JavaMailAPI-SMTPサーバー

SMTPはの頭字語です Simple Mail Transfer Protocol。これは、インターネットプロトコル(IP)ネットワークを介した電子メール(電子メール)送信のインターネット標準です。SMTPはTCPポート25を使用します。SSLで保護されたSMTP接続は、略称SMTPSで知られていますが、SMTPS自体はプロトコルではありません。

JavaMailAPIにはパッケージがあります com.sun.mail.smtpSMTPサーバーにアクセスするためのSMTPプロトコルプロバイダーとして機能します。次の表に、このパッケージに含まれるクラスを示します。

クラス 説明
SMTPMessage このクラスはMimeMessageクラスの特殊化であり、このメッセージがSMTPを介して送信されるときに使用されるさまざまなSMTPオプションとパラメーターを指定できます。
SMTPSSLTransport このクラスは、メッセージの送信と転送にSMTP overSSLを使用してTransport抽象クラスを実装します。
SMTPTransport このクラスは、メッセージの送信と転送にSMTPを使用してTransport抽象クラスを実装します。

次の表に、スローされる例外を示します。

例外 説明
SMTPAddressFailedException この例外は、メッセージを送信できない場合にスローされます。
SMTPAddressSucceededException mail.smtp.reportsuccessプロパティがtrueの場合、この例外はSendFailedExceptionから連鎖します。
SMTPSenderFailedException この例外は、メッセージを送信できない場合にスローされます。
SMTPSendFailedException この例外は、メッセージを送信できない場合にスローされます。例外には、メールサーバーが拒否した送信者のアドレスが含まれます。

ザ・ com.sun.mail.smtpプロバイダーはオプションでSMTP認証を使用します。SMTP認証を使用するには、mail.smtp.authプロパティを設定するか、SMTPサーバーに接続するときにSMTPトランスポートにユーザー名とパスワードを提供する必要があります。これは、次のいずれかのアプローチを使用して実行できます。

  • メールセッションを作成するときにAuthenticatorオブジェクトを提供し、Authenticatorコールバック中にユーザー名とパスワードの情報を提供します。mail.smtp.userプロパティは、コールバックのデフォルトのユーザー名を提供するように設定できますが、パスワードは明示的に指定する必要があります。このアプローチでは、静的なトランスポート送信メソッドを使用してメッセージを送信できます。例えば:

  • Transport.send(message);
  • ユーザー名とパスワードの引数を使用して、Transportconnectメソッドを明示的に呼び出します。例えば:

    Transport tr = session.getTransport("smtp");
    tr.connect(smtphost, username, password);
    msg.saveChanges();
    tr.sendMessage(msg, msg.getAllRecipients());
    tr.close();

SMTPプロトコルプロバイダーは、JavaMailSessionオブジェクトで設定できる次のプロパティをサポートしています。プロパティは常に文字列として設定されます。例えば:

props.put("mail.smtp.port", "587");

ここに Type 列は、文字列がどのように解釈されるかを説明します。

名前 タイプ 説明
mail.smtp.user ストリング SMTPのデフォルトのユーザー名。
mail.smtp.host ストリング 接続するSMTPサーバー。
mail.smtp.port int connect()メソッドで明示的に指定されていない場合に接続するSMTPサーバーポート。デフォルトは25です。
mail.smtp.connectiontimeout int ミリ秒単位のソケット接続タイムアウト値。デフォルトは無限タイムアウトです。
mail.smtp.timeout int ミリ秒単位のソケットI / Oタイムアウト値。デフォルトは無限タイムアウトです。
mail.smtp.from ストリング SMTPMAILコマンドに使用する電子メールアドレス。封筒の返送先住所を設定します。デフォルトはmsg.getFrom()またはInternetAddress.getLocalAddress()です。
mail.smtp.localhost ストリング SMTPHELOまたはEHLOコマンドで使用されるローカルホスト名。デフォルトはInetAddress.getLocalHost()。getHostName()です。JDKとネームサービスが適切に構成されている場合、通常は設定する必要はありません。
mail.smtp.localaddress ストリング SMTPソケットを作成するときにバインドするローカルアドレス(ホスト名)。デフォルトは、Socketクラスによって選択されたアドレスです。通常は設定する必要はありません。
mail.smtp.localport int SMTPソケットを作成するときにバインドするローカルポート番号。デフォルトは、Socketクラスによって選択されたポート番号です。
mail.smtp.ehlo ブール値 falseの場合、EHLOコマンドでサインオンを試みないでください。デフォルトはtrueです。
mail.smtp.auth ブール値 trueの場合、AUTHコマンドを使用してユーザーの認証を試みます。デフォルトはfalseです。
mail.smtp.auth.mechanisms ストリング 設定されている場合、考慮すべき認証メカニズムを一覧表示します。サーバーでサポートされ、現在の実装でサポートされているメカニズムのみが使用されます。デフォルトは「LOGINPLAINDIGEST-MD5 NTLM」で、これには現在の実装でサポートされているすべての認証メカニズムが含まれています。
mail.smtp.auth.login.disable ブール値 trueの場合、AUTHLOGINコマンドの使用を防ぎます。デフォルトはfalseです。
mail.smtp.auth.plain.disable ブール値 trueの場合、AUTHPLAINコマンドの使用を防ぎます。デフォルトはfalseです。
mail.smtp.auth.digest-md5.disable ブール値 trueの場合、AUTHDIGEST-MD5コマンドの使用を防ぎます。デフォルトはfalseです。
mail.smtp.auth.ntlm.disable ブール値 trueの場合、AUTHNTLMコマンドの使用を防ぎます。デフォルトはfalseです。
mail.smtp.auth.ntlm.domain ストリング NTLM認証ドメイン。
mail.smtp.auth.ntlm.flags int NTLMプロトコル固有のフラグ。
mail.smtp.submitter ストリング MAILFROMコマンドのAUTHタグで使用するサブミッター。通常、メッセージの元の送信者に関する情報を渡すためにメールリレーによって使用されます。
mail.smtp.dsn.notify String The NOTIFY option to the RCPT command. Either NEVER, or some combination of SUCCESS, FAILURE, and DELAY (separated by commas).
mail.smtp.dsn.ret String The RET option to the MAIL command. Either FULL or HDRS.
mail.smtp.sendpartial boolean If set to true, and a message has some valid and some invalid addresses, send the message anyway, reporting the partial failure with a SendFailedException. If set to false (the default), the message is not sent to any of the recipients if there is an invalid recipient address.
mail.smtp.sasl.enable boolean If set to true, attempt to use the javax.security.sasl package to choose an authentication mechanism for login. Defaults to false.
mail.smtp.sasl.mechanisms String A space or comma separated list of SASL mechanism names to try to use.
mail.smtp.sasl.authorizationid String The authorization ID to use in the SASL authentication. If not set, the authentication ID (user name) is used.
mail.smtp.sasl.realm String The realm to use with DIGEST-MD5 authentication.
mail.smtp.quitwait boolean If set to false, the QUIT command is sent and the connection is immediately closed. If set to true (the default), causes the transport to wait for the response to the QUIT command.
mail.smtp.reportsuccess boolean If set to true, causes the transport to include an SMTPAddressSucceededException for each address that is successful.
mail.smtp.socketFactory Socket Factory If set to a class that implements the javax.net.SocketFactory interface, this class will be used to create SMTP sockets.
mail.smtp.socketFactory.class String If set, specifies the name of a class that implements the javax.net.SocketFactory interface. This class will be used to create SMTP sockets.
mail.smtp.socketFactory.fallback boolean If set to true, failure to create a socket using the specified socket factory class will cause the socket to be created using the java.net.Socket class. Defaults to true.
mail.smtp.socketFactory.port int Specifies the port to connect to when using the specified socket factory. If not set, the default port will be used.
mail.smtp.ssl.enable boolean If set to true, use SSL to connect and use the SSL port by default. Defaults to false for the "smtp" protocol and true for the "smtps" protocol.
mail.smtp.ssl.checkserveridentity boolean If set to true, checks the server identity as specified by RFC 2595. Defaults to false.
mail.smtp.ssl.trust String If set, and a socket factory hasn't been specified, enables use of a MailSSLSocketFactory.
If set to "*", all hosts are trusted.
If set to a whitespace separated list of hosts, those hosts are trusted.
Otherwise, trust depends on the certificate the server presents.
mail.smtp.ssl.socketFactory SSL Socket Factory If set to a class that extends the javax.net.ssl.SSLSocketFactory class, this class will be used to create SMTP SSL sockets.
mail.smtp.ssl.socketFactory.class String If set, specifies the name of a class that extends the javax.net.ssl.SSLSocketFactory class. This class will be used to create SMTP SSL sockets.
mail.smtp.ssl.socketFactory.port int Specifies the port to connect to when using the specified socket factory. If not set, the default port will be used.
mail.smtp.ssl.protocols string Specifies the SSL protocols that will be enabled for SSL connections. The property value is a whitespace separated list of tokens acceptable to the javax.net.ssl.SSLSocket.setEnabledProtocols method.
mail.smtp.starttls.enable boolean If true, enables the use of the STARTTLS command (if supported by the server) to switch the connection to a TLS-protected connection before issuing any login commands. Defaults to false.
mail.smtp.starttls.required boolean If true, requires the use of the STARTTLS command. If the server doesn't support the STARTTLS command, or the command fails, the connect method will fail. Defaults to false.
mail.smtp.socks.host string Specifies the host name of a SOCKS5 proxy server that will be used for connections to the mail server.
mail.smtp.socks.port string Specifies the port number for the SOCKS5 proxy server. This should only need to be used if the proxy server is not using the standard port number of 1080.
mail.smtp.mailextension String Extension string to append to the MAIL command.
mail.smtp.userset boolean If set to true, use the RSET command instead of the NOOP command in the isConnected method. In some cases sendmail will respond slowly after many NOOP commands; use of RSET avoids this sendmail issue. Defaults to false.

In general, applications should not need to use the classes in this package directly. Instead, they should use the APIs defined by javax.mail package (and subpackages). Say for example applications should never construct instances of SMTPTransport directly. Instead, they should use the Session method getTransport to acquire an appropriate Transport object.

Examples to use SMPT server is demonstrated in chapter Sending Emails.