JavaMail API - SMTP-Server
SMTP ist eine Abkürzung für Simple Mail Transfer Protocol. Es ist ein Internetstandard für die E-Mail-Übertragung über IP-Netzwerke (Internet Protocol). SMTP verwendet den TCP-Port 25. Durch SSL gesicherte SMTP-Verbindungen sind der Kurzform SMTPS bekannt, obwohl SMTPS kein eigenständiges Protokoll ist.
JavaMail API hat Paket com.sun.mail.smtpdie als SMTP-Protokollanbieter für den Zugriff auf einen SMTP-Server fungieren. In der folgenden Tabelle sind die in diesem Paket enthaltenen Klassen aufgeführt:
Klasse | Beschreibung |
---|---|
SMTPMessage | Diese Klasse ist eine Spezialisierung der MimeMessage-Klasse, mit der Sie verschiedene SMTP-Optionen und -Parameter angeben können, die beim Senden dieser Nachricht über SMTP verwendet werden. |
SMTPSSLTransport | Diese Klasse implementiert die abstrakte Transportklasse mit SMTP über SSL für die Nachrichtenübermittlung und den Transport. |
SMTPTransport | Diese Klasse implementiert die abstrakte Transportklasse mithilfe von SMTP für die Nachrichtenübermittlung und den Transport. |
In der folgenden Tabelle sind die ausgelösten Ausnahmen aufgeführt:
Ausnahme | Beschreibung |
---|---|
SMTPAddressFailedException | Diese Ausnahme wird ausgelöst, wenn die Nachricht nicht gesendet werden kann. |
SMTPAddressSucceededException | Diese Ausnahme wird von einer SendFailedException verkettet, wenn die Eigenschaft mail.smtp.reportsuccess wahr ist. |
SMTPSenderFailedException | Diese Ausnahme wird ausgelöst, wenn die Nachricht nicht gesendet werden kann. |
SMTPSendFailedException | Diese Ausnahme wird ausgelöst, wenn die Nachricht nicht gesendet werden kann. Die Ausnahme enthält die Absenderadresse, die der Mailserver abgelehnt hat. |
Das com.sun.mail.smtpAnbieter verwenden optional die SMTP-Authentifizierung. Um die SMTP-Authentifizierung verwenden zu können, müssen Sie die Eigenschaft mail.smtp.auth festlegen oder dem SMTP-Transport einen Benutzernamen und ein Kennwort geben, wenn Sie eine Verbindung zum SMTP-Server herstellen. Sie können dies mit einem der folgenden Ansätze tun:
Geben Sie beim Erstellen Ihrer Mail-Sitzung ein Authenticator-Objekt an und geben Sie während des Authenticator-Rückrufs den Benutzernamen und das Kennwort an. Die Eigenschaft mail.smtp.user kann so festgelegt werden, dass ein Standardbenutzername für den Rückruf angegeben wird. Das Kennwort muss jedoch weiterhin explizit angegeben werden. Mit diesem Ansatz können Sie die statische Transport-Sendemethode zum Senden von Nachrichten verwenden. Zum Beispiel:
Transport.send(message);
Rufen Sie die Transport connect-Methode explizit mit Benutzernamen- und Kennwortargumenten auf. Zum Beispiel:
Transport tr = session.getTransport("smtp");
tr.connect(smtphost, username, password);
msg.saveChanges();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();
Der SMTP-Protokollanbieter unterstützt die folgenden Eigenschaften, die im JavaMail-Sitzungsobjekt festgelegt werden können. Die Eigenschaften werden immer als Zeichenfolgen festgelegt. Zum Beispiel:
props.put("mail.smtp.port", "587");
Hier das Type Spalte beschreibt, wie die Zeichenfolge interpretiert wird.
Name | Art | Beschreibung |
---|---|---|
mail.smtp.user | String | Standardbenutzername für SMTP. |
mail.smtp.host | String | Der SMTP-Server, zu dem eine Verbindung hergestellt werden soll. |
mail.smtp.port | int | Der SMTP-Server-Port, zu dem eine Verbindung hergestellt werden soll, wenn die connect () -Methode keinen explizit angibt. Der Standardwert ist 25. |
mail.smtp.connectiontimeout | int | Zeitlimit für Socket-Verbindung in Millisekunden. Standard ist eine unendliche Zeitüberschreitung. |
mail.smtp.timeout | int | Socket-E / A-Zeitlimitwert in Millisekunden. Standard ist eine unendliche Zeitüberschreitung. |
mail.smtp.from | String | E-Mail-Adresse für den Befehl SMTP MAIL. Dies legt die Rücksendeadresse des Umschlags fest. Der Standardwert ist msg.getFrom () oder InternetAddress.getLocalAddress (). |
mail.smtp.localhost | String | Lokaler Hostname, der im Befehl SMTP HELO oder EHLO verwendet wird. Der Standardwert ist InetAddress.getLocalHost (). GetHostName (). Sollte normalerweise nicht eingestellt werden müssen, wenn Ihr JDK und Ihr Namensdienst ordnungsgemäß konfiguriert sind. |
mail.smtp.localaddress | String | Lokale Adresse (Hostname), an die beim Erstellen des SMTP-Sockets gebunden werden soll. Der Standardwert ist die von der Socket-Klasse ausgewählte Adresse. Sollte normalerweise nicht eingestellt werden müssen. |
mail.smtp.localport | int | Lokale Portnummer, an die beim Erstellen des SMTP-Sockets gebunden werden soll. Der Standardwert ist die von der Socket-Klasse ausgewählte Portnummer. |
mail.smtp.ehlo | Boolescher Wert | Wenn false, versuchen Sie nicht, sich mit dem EHLO-Befehl anzumelden. Der Standardwert ist true. |
mail.smtp.auth | Boolescher Wert | Wenn true, versuchen Sie, den Benutzer mit dem Befehl AUTH zu authentifizieren. Der Standardwert ist false. |
mail.smtp.auth.mechanisms | String | Wenn festgelegt, werden die zu berücksichtigenden Authentifizierungsmechanismen aufgelistet. Es werden nur Mechanismen verwendet, die vom Server und von der aktuellen Implementierung unterstützt werden. Der Standardwert ist "LOGIN PLAIN DIGEST-MD5 NTLM", der alle von der aktuellen Implementierung unterstützten Authentifizierungsmechanismen enthält. |
mail.smtp.auth.login.disable | Boolescher Wert | Wenn true, wird die Verwendung des Befehls AUTH LOGIN verhindert. Standard ist falsch. |
mail.smtp.auth.plain.disable | Boolescher Wert | Wenn true, wird die Verwendung des Befehls AUTH PLAIN verhindert. Standard ist falsch. |
mail.smtp.auth.digest-md5.disable | Boolescher Wert | Wenn true, wird die Verwendung des Befehls AUTH DIGEST-MD5 verhindert. Standard ist falsch. |
mail.smtp.auth.ntlm.disable | Boolescher Wert | Wenn true, wird die Verwendung des Befehls AUTH NTLM verhindert. Standard ist falsch. |
mail.smtp.auth.ntlm.domain | String | Die NTLM-Authentifizierungsdomäne. |
mail.smtp.auth.ntlm.flags | int | NTLM-protokollspezifische Flags. |
mail.smtp.submitter | String | Der Übermittler, der im AUTH-Tag im Befehl MAIL FROM verwendet werden soll. Wird normalerweise von einem Mail-Relay verwendet, um Informationen über den ursprünglichen Absender der Nachricht weiterzugeben. |
mail.smtp.dsn.notify | String | Die NOTIFY-Option für den RCPT-Befehl. Entweder NIE oder eine Kombination aus ERFOLG, FEHLER und VERZÖGERUNG (durch Kommas getrennt). |
mail.smtp.dsn.ret | String | Die RET-Option für den Befehl MAIL. Entweder FULL oder HDRS. |
mail.smtp.sendpartial | Boolescher Wert | Wenn der Wert auf "true" gesetzt ist und eine Nachricht einige gültige und einige ungültige Adressen enthält, senden Sie die Nachricht trotzdem und melden Sie den teilweisen Fehler mit einer SendFailedException. Bei der Einstellung false (Standardeinstellung) wird die Nachricht nicht an einen der Empfänger gesendet, wenn eine ungültige Empfängeradresse vorliegt. |
mail.smtp.sasl.enable | Boolescher Wert | Wenn true festgelegt ist, versuchen Sie, mit dem Paket javax.security.sasl einen Authentifizierungsmechanismus für die Anmeldung auszuwählen. Der Standardwert ist false. |
mail.smtp.sasl.mechanisms | String | Eine durch Leerzeichen oder Kommas getrennte Liste von SASL-Mechanismusnamen, die verwendet werden sollen. |
mail.smtp.sasl.authorizationid | String | Die Autorisierungs-ID, die für die SASL-Authentifizierung verwendet werden soll. Wenn nicht festgelegt, wird die Authentifizierungs-ID (Benutzername) verwendet. |
mail.smtp.sasl.realm | String | Der Bereich, der für die DIGEST-MD5-Authentifizierung verwendet werden soll. |
mail.smtp.quitwait | Boolescher Wert | Bei false wird der Befehl QUIT gesendet und die Verbindung sofort geschlossen. Wenn der Wert auf true gesetzt ist (Standardeinstellung), wartet der Transport auf die Antwort auf den Befehl QUIT. |
mail.smtp.reportsuccess | Boolescher Wert | Wenn der Wert auf true gesetzt ist, enthält der Transport für jede erfolgreiche Adresse eine SMTPAddressSucceededException. |
mail.smtp.socketFactory | Steckdosenfabrik | Wenn diese Klasse auf eine Klasse festgelegt ist, die die Schnittstelle javax.net.SocketFactory implementiert, wird diese Klasse zum Erstellen von SMTP-Sockets verwendet. |
mail.smtp.socketFactory.class | String | Wenn festgelegt, wird der Name einer Klasse angegeben, die die Schnittstelle javax.net.SocketFactory implementiert. Diese Klasse wird zum Erstellen von SMTP-Sockets verwendet. |
mail.smtp.socketFactory.fallback | Boolescher Wert | Wenn der Wert auf true gesetzt ist, wird der Socket mit der Klasse java.net.Socket erstellt, wenn kein Socket mit der angegebenen Socket-Factory-Klasse erstellt wird. Der Standardwert ist true. |
mail.smtp.socketFactory.port | int | Gibt den Port an, an den eine Verbindung hergestellt werden soll, wenn die angegebene Socket-Factory verwendet wird. Wenn nicht festgelegt, wird der Standardport verwendet. |
mail.smtp.ssl.enable | Boolescher Wert | Wenn true festgelegt ist, verwenden Sie SSL, um eine Verbindung herzustellen, und verwenden Sie standardmäßig den SSL-Port. Der Standardwert ist false für das Protokoll "smtp" und true für das Protokoll "smtps". |
mail.smtp.ssl.checkserveridentity | Boolescher Wert | Wenn true festgelegt ist, wird die Serveridentität gemäß RFC 2595 überprüft. Der Standardwert ist false. |
mail.smtp.ssl.trust | String | Wenn festgelegt und keine Socket-Factory angegeben wurde, wird die Verwendung einer MailSSLSocketFactory aktiviert. Bei der Einstellung "*" sind alle Hosts vertrauenswürdig. Wenn eine durch Leerzeichen getrennte Liste von Hosts festgelegt ist, werden diese Hosts als vertrauenswürdig eingestuft. Andernfalls hängt das Vertrauen von dem Zertifikat ab, das der Server vorlegt. |
mail.smtp.ssl.socketFactory | SSL Socket Factory | Wenn diese Klasse auf eine Klasse festgelegt ist, die die Klasse javax.net.ssl.SSLSocketFactory erweitert, wird diese Klasse zum Erstellen von SMTP-SSL-Sockets verwendet. |
mail.smtp.ssl.socketFactory.class | String | Wenn festgelegt, wird der Name einer Klasse angegeben, die die Klasse javax.net.ssl.SSLSocketFactory erweitert. Diese Klasse wird zum Erstellen von SMTP-SSL-Sockets verwendet. |
mail.smtp.ssl.socketFactory.port | int | Gibt den Port an, an den eine Verbindung hergestellt werden soll, wenn die angegebene Socket-Factory verwendet wird. Wenn nicht festgelegt, wird der Standardport verwendet. |
mail.smtp.ssl.protocols | Zeichenfolge | Gibt die SSL-Protokolle an, die für SSL-Verbindungen aktiviert werden. Der Eigenschaftswert ist eine durch Leerzeichen getrennte Liste von Token, die für die Methode javax.net.ssl.SSLSocket.setEnabledProtocols akzeptabel sind. |
mail.smtp.starttls.enable | Boolescher Wert | Wenn true, wird die Verwendung des STARTTLS-Befehls (sofern vom Server unterstützt) verwendet, um die Verbindung zu einer TLS-geschützten Verbindung zu wechseln, bevor Anmeldebefehle ausgegeben werden. Der Standardwert ist false. |
mail.smtp.starttls.required | Boolescher Wert | Wenn true, muss der Befehl STARTTLS verwendet werden. Wenn der Server den Befehl STARTTLS nicht unterstützt oder der Befehl fehlschlägt, schlägt die Verbindungsmethode fehl. Der Standardwert ist false. |
mail.smtp.socks.host | Zeichenfolge | Gibt den Hostnamen eines SOCKS5-Proxyservers an, der für Verbindungen zum Mailserver verwendet wird. |
mail.smtp.socks.port | Zeichenfolge | Gibt die Portnummer für den SOCKS5-Proxyserver an. Dies sollte nur verwendet werden müssen, wenn der Proxyserver nicht die Standardportnummer 1080 verwendet. |
mail.smtp.mailextension | String | Erweiterungszeichenfolge zum Anhängen an den Befehl MAIL. |
mail.smtp.userset | Boolescher Wert | Wenn true festgelegt ist, verwenden Sie den Befehl RSET anstelle des Befehls NOOP in der Methode isConnected. In einigen Fällen reagiert sendmail nach vielen NOOP-Befehlen langsam. Durch die Verwendung von RSET wird dieses Sendmail-Problem vermieden. Der Standardwert ist false. |
Im Allgemeinen sollten Anwendungen die Klassen in diesem Paket nicht direkt verwenden müssen. Stattdessen sollten sie die APIs verwenden, die durch das Paket javax.mail (und Unterpakete) definiert sind. Angenommen, Anwendungen sollten niemals Instanzen von SMTPTransport direkt erstellen. Stattdessen sollten sie die Sitzungsmethode getTransport verwenden, um ein geeignetes Transportobjekt abzurufen.
Beispiele für die Verwendung des SMPT-Servers finden Sie im Kapitel Senden von E-Mails .