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.