Sessionクラス

広告

最後にMessageクラスのオブジェクトの引数になっていたSessionクラスについて見ていきます。Sessionクラスのオブジェクトは簡単に言ってしまえば、メールの送信に関するSMTPサーバなどの情報を持っているものと思っていて下さい。まずクラス図から見ていきます。

ToやCcなどを指定する際に使うAddressクラスについて確認します。

  • java.lang.Object
  • javax.mail.Session
  • public final class Session extends java.lang.Object

このクラスにはコンストラクタはありません。使い方としては、Sessionクラスのオブジェクトを返すような下記の2つのメソッドを使ってSessionクラスのオブジェクトを作成すればよさそうです。getDefaultInstanceメソッドとgetInstanceメソッドの2つです。

Get the default Session object. If a default has not yet been setup,
a new Session object is created and installed as the default. 

Note that a default session created with no Authenticator is available
to all code executing in the same Java virtual machine, and the session
can contain security sensitive information such as user names and 
passwords.

Parameters:
  props - Properties object. Used only if a new Session object is created.
    It is expected that the client supplies values for the properties 
    listed in Appendix A of the JavaMail spec (particularly 
    mail.store.protocol, mail.transport.protocol, mail.host, mail.user, 
    and mail.from) as the defaults are unlikely to work in all cases.
Returns:
  the default Session object

引数にはこのセッションで使われる情報を登録するためのPropertiesクラスのオブジェクトを指定します。JavaMailで提供されているSMTPプロバイダーとしてcom.sun.mail.smtpというパッケージが用意されているのですが、その中で設定項目とその内容について下記のように定義されています。

NameTypeDescription
mail.smtp.userStringDefault user name for SMTP.
mail.smtp.hostStringThe SMTP server to connect to.
mail.smtp.portintThe SMTP server port to connect to, if the connect() method doesn't explicitly specify one. Defaults to 25.
mail.smtp.connectiontimeoutintSocket connection timeout value in milliseconds.Default is infinite timeout.
mail.smtp.timeoutintSocket I/O timeout value in milliseconds. Default is infinite timeout.
mail.smtp.fromStringEmail address to use for SMTP MAIL command. This sets the envelope return address. Defaults to msg.getFrom() or InternetAddress.getLocalAddress(). NOTE: mail.smtp.user was previously used for this.
mail.smtp.localhostStringLocal host name. Defaults to InetAddress.getLocalHost().getHostName(). Should not normally need to be set if your JDK and your name service are configured properly.
mail.smtp.ehlobooleanIf false, do not attempt to sign on with the EHLO command. Defaults to true. Normally failure of the EHLO command will fallback to the HELO command; this property exists only for servers that don't fail EHLO properly or don't implement EHLO properly.
mail.smtp.authbooleanIf true, attempt to authenticate the user using the AUTH command. Defaults to false.
mail.smtp.dsn.notifyStringThe NOTIFY option to the RCPT command. Either NEVER, or some combination of SUCCESS, FAILURE, and DELAY (separated by commas).
mail.smtp.dsn.retStringThe RET option to the MAIL command. Either FULL or HDRS.
mail.smtp.allow8bitmimebooleanIf set to true, and the server supports the 8BITMIME extension, text parts of messages that use the "quoted-printable" or "base64" encodings are converted to use "8bit" encoding if they follow the RFC2045 rules for 8bit text.
mail.smtp.sendpartialbooleanIf 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.

例えば下記のように情報をセットしていきます。

Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.from", from);

Session session = Session.getDefaultInstance(props);

必要な情報をセットして、Sessionクラスのオブジェクトを作成するだけです。

またgetDefaultInstanceとgetInstanceの違いが実はよく分かっていないのですが、getDefaultInstanceで得られるセッションは複数作成できないので、複数のセッションを同時に作りたい時はgetInstanceの方を使えばいいのではと思います。

ではgetInstanceメソッドも見ておきましょう。

Get a new Session object.

Parameters:
  props - Properties object that hold relevant properties.
    It is expected that the client supplies values for the properties 
    listed in Appendix A of the JavaMail spec (particularly 
    mail.store.protocol, mail.transport.protocol, mail.host, mail.user, 
    and mail.from) as the defaults are unlikely to work in all cases.
Returns:
  a new Session object

引数の使い方はgetDefaultInstanceと同じです。

なおサンプルプログラムではgetInstanceに2つの引数を渡していますが、同じメソッド名でgetInstance(java.util.Properties props, Authenticator authenticator)というメソッドがあるためです。2番目の引数にはNULLを渡しているように、今は必要無いので、引数が1つの方で説明を行いました。

( Written by Tatsuo Ikura )