クラス Session
Session クラスは、Store、Transport、関連するクラスを実装するプロトコルプロバイダーへのアクセスを提供します。プロトコルプロバイダーは、次のファイルを使用して構成されます。
javamail.providersおよびjavamail.default.providersjavamail.address.mapおよびjavamail.default.address.map
各 javamail.X リソースファイルは、次の順序で 3 つの方法を使用して検索されます。
java.home/conf/javamail.XMETA-INF/javamail.XMETA-INF/javamail.default.X
(ここでの java.home は "java.home" システムプロパティの値で、conf は、存在する場合は "conf" という名前のディレクトリ、存在しない場合は "lib" という名前のディレクトリです。"conf" ディレクトリは JDK 1.9 で導入されました)
最初の方法では、java.home プロパティが指す conf ディレクトリにリソースファイルを置くことで、ユーザーが独自のバージョンのリソースファイルを含めることができます。2 番目の方法では、Jakarta Mail API を使用するアプリケーションが独自のリソースファイルをアプリケーションまたは jar ファイルの META-INF ディレクトリに含めることができます。javamail.default.X デフォルトファイルは Jakarta Mail mail.jar ファイルの一部であり、ユーザーが指定することはできません。
ファイルの場所は、ClassLoader メソッド getResource の実装方法によって異なります。通常、getResource メソッドは、リクエストされたファイルが見つかるまで CLASSPATH を検索して停止します。
リソースファイル内のエントリの順序は重要です。複数のエントリが存在する場合、最初のエントリが後のエントリより優先されます。例: アプリケーションによって明示的に変更されるまで、最初に見つかった IMAP プロバイダーがデフォルトの IMAP 実装として設定されます。ユーザーまたはシステムが提供するリソースファイルは、Jakarta Mail API に含まれているデフォルトファイルをオーバーライドしません。これは、読み込まれたすべてのファイルのすべてのエントリが利用できることを意味します。
javamail.providers および javamail.default.providers
これらのリソースファイルは、システムで利用可能なストアとトランスポートを指定し、アプリケーションが利用可能なストアとトランスポートの実装を「発見」できるようにします。プロトコルの実装は、1 行に 1 つずつリストされています。ファイル形式は、プロトコルの実装を説明する 4 つの属性を定義します。各属性は "=" -separated 名前と値のペアで、名前は小文字です。名前と値の各ペアはセミコロン(";")で区切られます。以下の名前が定義されています。
| 名前 | 説明 |
|---|---|
| プロトコル | プロトコルに割り当てられた名前。例: 輸送用の smtp。 |
| 型 | 有効なエントリは store および transport です。 |
| class | このプロトコルを実装するクラス名。 |
| ベンダー | ベンダーを識別するオプションの文字列。 |
| バージョン | バージョンを識別するオプションの文字列。 |
META-INF/javamail.default.providers ファイルの内容の例を次に示します。
protocol=imap; type=store; class=com.sun.mail.imap.IMAPStore; vendor=Oracle; protocol=smtp; type=transport; class=com.sun.mail.smtp.SMTPTransport; vendor=Oracle;
現在の実装では、Java SE ServiceLoaderSE メカニズムを使用したプロバイダーの設定もサポートしています。独自のプロバイダーを作成するときは、Provider サブクラスを作成します。例:
package com.example;
import jakarta.mail.Provider;
public class MyProvider extends Provider {
public MyProvider() {
super(Provider.Type.STORE, "myprot", MyStore.class.getName(),
"Example", null);
}
}
次に、jar ファイルに META-INF/services/jakarta.mail.Provider という名前のファイルを含めます。このファイルには、プロバイダークラスの名前がリストされています。com.example.MyProvider
javamail.address.map および javamail.default.address.map
これらのリソースファイルは、トランスポートアドレス型をトランスポートプロトコルにマップします。jakarta.mail.Address の getType メソッドはアドレス型を返します。javamail.address.map ファイルは、トランスポート型をプロトコルにマップします。ファイル形式は、一連の名前と値のペアです。各キー名は、現在システムにインストールされているアドレス型に対応している必要があります。また、jakarta.mail.Address を使用する場合は、jakarta.mail.Address 実装ごとにエントリが存在する必要があります。例: jakarta.mail.internet.InternetAddress メソッド getType は "rfc822" を返します。参照されている各プロトコルをシステムにインストールする必要があります。以下の news の場合、クライアントは nntp プロトコルをサポートするトランスポートプロバイダーをインストールする必要があります。
javamail.address.map ファイルの一般的な内容は次のとおりです。
rfc822=smtp news=nntp
- 作成者:
- John Mani, Bill Shannon, Max Spivak
メソッドのサマリー
修飾子と型メソッド説明voidaddProvider(Provider provider) プロバイダーをセッションに追加します。booleangetDebug()このセッションのデバッグ設定を取得します。デバッグ出力に使用されるストリームを返します。static SessiongetDefaultInstance(PropertiesSE props) デフォルトの Session オブジェクトを取得します。static SessiongetDefaultInstance(PropertiesSE props, Authenticator authenticator) デフォルトの Session オブジェクトを取得します。指定された URLName の閉じた Folder オブジェクトを取得します。static SessiongetInstance(PropertiesSE props) 新しい Session オブジェクトを取得します。static SessiongetInstance(PropertiesSE props, Authenticator authenticator) 新しい Session オブジェクトを取得します。この(ストアまたはトランスポート)URLName の保存済み PasswordAuthentication を返します。このセッションに関連付けられた Properties オブジェクトを返しますgetProperty(StringSE name) 指定されたプロパティの値を返します。getProvider(StringSE protocol) 指定されたプロトコルのデフォルトのプロバイダーを返します。Provider[]このメソッドは、javamail 経由でインストールされたすべての実装の配列を返します。getStore()このユーザーが希望する Store プロトコルを実装する Store オブジェクトを取得します。プロバイダーによって指定されたストアのインスタンスを取得します。指定された URLName の Store オブジェクトを取得します。指定されたプロトコルを実装する Store オブジェクトを取得します。セッションのストリームプロバイダーインスタンスを取得します。このユーザーの希望するトランスポートプロトコルを実装するトランスポートオブジェクトを取得します。getTransport(Address address) 指定されたアドレス型のメッセージを転送できる Transport オブジェクトを取得します。getTransport(Provider provider) プロバイダーで指定されたトランスポートのインスタンスを取得します。getTransport(URLName url) 指定された URLName の Transport オブジェクトを取得します。getTransport(StringSE protocol) 指定されたプロトコルを実装する Transport オブジェクトを取得します。requestPasswordAuthentication(InetAddressSE addr, int port, StringSE protocol, StringSE prompt, StringSE defaultUserName) アプリケーションにコールバックして、必要なユーザー名とパスワードを取得します。voidsetDebug(boolean debug) このセッションのデバッグ設定を設定します。voidsetDebugOut(PrintStreamSE out) このセッションのデバッグ出力に使用するストリームを設定します。voidこの(ストアまたはトランスポート)URLName の PasswordAuthentication を保存します。voidsetProtocolForAddress(StringSE addresstype, StringSE protocol) 指定された型のアドレスに使用するデフォルトのトランスポートプロトコルを設定します。voidsetProvider(Provider provider) 渡されたプロバイダーを Provider.protocol のプロトコルのデフォルト実装に設定し、以前の値を上書きします。
メソッドの詳細
getStreamProvider
セッションのストリームプロバイダーインスタンスを取得します。- 戻り値:
- ストリームプロバイダー
- 導入:
- JavaMail 2.1
getInstance
新しい Session オブジェクトを取得します。- パラメーター:
props- 関連するプロパティを保持するプロパティオブジェクト。
デフォルトでは、Jakarta Mail 仕様の付録 A にリストされているプロパティ(特に mail.store.protocol、mail.transport.protocol、mail.host、mail.user、mail.from)の値がクライアントから提供されることが期待されています。すべてのケースで機能する可能性は低いです。authenticator- ユーザー名とパスワードが必要なときにアプリケーションにコールバックするために使用される認証システムオブジェクト。- 戻り値:
- 新しい Session オブジェクト
- 関連事項:
getInstance
新しい Session オブジェクトを取得します。- パラメーター:
props- 関連するプロパティを保持するプロパティオブジェクト。
デフォルトでは、Jakarta Mail 仕様の付録 A にリストされているプロパティ(特に mail.store.protocol、mail.transport.protocol、mail.host、mail.user、mail.from)の値がクライアントから提供されることが期待されています。すべてのケースで機能する可能性は低いです。- 戻り値:
- 新しい Session オブジェクト
- 導入:
- JavaMail 1.2
getDefaultInstance
デフォルトの Session オブジェクトを取得します。デフォルトがまだ設定されていない場合、新しい Session オブジェクトが作成され、デフォルトとしてインストールされます。デフォルトのセッションは、同じ Java 仮想マシンで実行されるすべてのコードで利用できる可能性があり、セッションにはユーザー名やパスワードなどの機密情報が含まれている可能性があるため、デフォルトのセッションへのアクセスは制限されます。Authenticator オブジェクトは呼び出し側で作成する必要があり、アクセス権限を確認するために間接的に使用されます。セッションの作成時に渡された Authenticator オブジェクトは、デフォルトのセッションを取得するために後続のリクエストに渡された Authenticator オブジェクトと比較されます。両方のオブジェクトが同じ、または同じ ClassLoader からのものである場合、リクエストは許可されます。それ以外の場合は拒否されます。
セッションの作成に使用される Authenticator オブジェクトが null の場合、null を渡すことで誰でもデフォルトセッションを取得できることに注意してください。
Properties オブジェクトは、このメソッドが初めて呼び出されたときにのみ、新しい Session オブジェクトが作成されたときに使用されることにも注意してください。以降の呼び出しでは、最初の呼び出しで作成された Session オブジェクトが返され、渡された Properties オブジェクトは無視されます。
getInstanceメソッドを使用して、メソッドが呼び出されるたびに新しい Session オブジェクトを取得します。追加のセキュリティ許可オブジェクトを使用して、デフォルトセッションへのアクセスを制御できます。
現在の実装では、SecurityManager が設定されている場合、呼び出し元には
RuntimePermission("setFactory")権限が必要です。- パラメーター:
props- プロパティオブジェクト。新しい Session オブジェクトが作成された場合にのみ使用されます。
デフォルトでは、Jakarta Mail 仕様の付録 A にリストされているプロパティ(特に mail.store.protocol、mail.transport.protocol、mail.host、mail.user、mail.from)の値がクライアントから提供されることが期待されています。すべてのケースで機能する可能性は低いです。authenticator- Authenticator オブジェクト。新しい Session オブジェクトが作成された場合にのみ使用されます。それ以外の場合は、セッションの作成に使用されたオーセンティケーターと一致する必要があります。- 戻り値:
- デフォルトの Session オブジェクト
getDefaultInstance
デフォルトの Session オブジェクトを取得します。デフォルトがまだ設定されていない場合、新しい Session オブジェクトが作成され、デフォルトとしてインストールされます。オーセンティケーターなしで作成されたデフォルトのセッションは、同じ Java 仮想マシンで実行されるすべてのコードで使用でき、セッションにはユーザー名やパスワードなどの機密情報を含めることができます。
- パラメーター:
props- プロパティオブジェクト。新しい Session オブジェクトが作成された場合にのみ使用されます。
デフォルトでは、Jakarta Mail 仕様の付録 A にリストされているプロパティ(特に mail.store.protocol、mail.transport.protocol、mail.host、mail.user、mail.from)の値がクライアントから提供されることが期待されています。すべてのケースで機能する可能性は低いです。- 戻り値:
- デフォルトの Session オブジェクト
- 導入:
- JavaMail 1.2
setDebug
public void setDebug(boolean debug) このセッションのデバッグ設定を設定します。デバッグ設定はセッションの作成後にのみ有効にできるため、Session コンストラクターでデバッグを有効にするには、コンストラクターに渡される Properties オブジェクトのプロパティ
mail.debugを true に設定します。mail.debugプロパティの値は、セッションごとのデバッグフラグを初期化するために使用されます。後続のsetDebugメソッドの呼び出しでは、セッションごとのデバッグフラグが操作され、mail.debugプロパティには影響しません。- パラメーター:
debug- デバッグ設定
getDebug
public boolean getDebug()このセッションのデバッグ設定を取得します。- 戻り値:
- 現在のデバッグ設定
setDebugOut
このセッションのデバッグ出力に使用するストリームを設定します。outが null の場合、System.outが使用されます。mail.debugシステムプロパティを設定した結果として、セッションが作成される前に発生するデバッグ出力は、常にSystem.outに送信されることに注意してください。- パラメーター:
out- デバッグ出力に使用する PrintStream- 導入:
- JavaMail 1.3
getDebugOut
デバッグ出力に使用されるストリームを返します。ストリームが設定されていない場合は、System.outが返されます。- 戻り値:
- デバッグ出力に使用する PrintStream
- 導入:
- JavaMail 1.3
getProviders
このメソッドは、このアプリケーションで使用可能な ClassLoader を使用してロードできる javamail。[default。] providers ファイルを介してインストールされたすべての実装の配列を返します。- 戻り値:
- 構成されたプロバイダーの配列
getProvider
指定されたプロトコルのデフォルトのプロバイダーを返します。最初に mail。<protocol> .class プロパティをチェックし、存在する場合は、この実装に関連付けられているプロバイダーを返します。存在しない場合は、構成ファイルで最初に出現したプロバイダーを返します。プロトコルの実装が見つからない場合、NoSuchProviderException をスローします- パラメーター:
protocol- 構成済みプロトコル (つまり、smtp、imap など)- 戻り値:
- 指定されたプロトコル用に現在構成されているプロバイダー
- 例外:
NoSuchProviderException- 指定されたプロトコルのプロバイダーが見つからない場合。
setProvider
渡されたプロバイダーを Provider.protocol のプロトコルのデフォルト実装に設定し、以前の値を上書きします。- パラメーター:
provider- プロトコルのデフォルトとして設定される、現在構成されているプロバイダー- 例外:
NoSuchProviderException- 渡されたプロバイダーが無効な場合。
getStore
このユーザーが希望する Store プロトコルを実装する Store オブジェクトを取得します。mail.store.protocolプロパティは、目的のプロトコルを指定します。適切な Store オブジェクトが取得されない場合、NoSuchProviderException がスローされます- 戻り値:
- Store オブジェクト
- 例外:
NoSuchProviderException- 指定されたプロトコルのプロバイダーが見つからない場合。
getStore
指定されたプロトコルを実装する Store オブジェクトを取得します。適切な Store オブジェクトを取得できない場合、NoSuchProviderException がスローされます。- パラメーター:
protocol- ストアプロトコル- 戻り値:
- Store オブジェクト
- 例外:
NoSuchProviderException- 指定されたプロトコルのプロバイダーが見つからない場合。
getStore
指定された URLName の Store オブジェクトを取得します。リクエストされた Store オブジェクトを取得できない場合、NoSuchProviderException がスローされます。URL 文字列(RFC 1738 を参照)の「スキーム」部分は、ストアプロトコルを見つけるために使用されます。- パラメーター:
url- 目的のストアを表す URLName- 戻り値:
- 閉じた Store オブジェクト
- 例外:
NoSuchProviderException- 指定された URLName のプロバイダーが見つからない場合。- 関連事項:
getStore
プロバイダーによって指定されたストアのインスタンスを取得します。ストアをインスタンス化して返します。- パラメーター:
provider- インスタンス化されるストアプロバイダー- 戻り値:
- インスタンス化されたストア
- 例外:
NoSuchProviderException- 指定されたプロバイダーのプロバイダーが見つからない場合。
getFolder
指定された URLName の閉じた Folder オブジェクトを取得します。リクエストされた Folder オブジェクトを取得できない場合、null が返されます。URL 文字列(RFC 1738 を参照)の「スキーム」部分は、ストアプロトコルを見つけるために使用されます。URL 文字列の残りの部分(つまり、RFC 1738 に基づく "schemepart" )は、適切な Folder オブジェクトを見つけてインスタンス化するために、プロトコルに依存した方法でそのストアによって使用されます。
RFC 1738 では、IP ベースのプロトコル(IMAP4、POP3 など)の "schemepart" の構文も指定されていることに注意してください。IP ベースのメールストアのプロバイダーは、フォルダーを参照するためにその構文を実装する必要があります。
- パラメーター:
url- 目的のフォルダーを表す URLName- 戻り値:
- フォルダー
- 例外:
NoSuchProviderException- 指定された URLName のプロバイダーが見つからない場合。MessagingException- フォルダーが見つからなかったか、作成できなかった場合。- 関連事項:
getTransport
このユーザーが希望するトランスポートプロトコルを実装するトランスポートオブジェクトを取得します。mail.transport.protocolプロパティは、目的のプロトコルを指定します。適切な Transport オブジェクトを取得できない場合、MessagingException がスローされます。- 戻り値:
- Transport オブジェクト
- 例外:
NoSuchProviderException- プロバイダーが見つからない場合。
getTransport
指定されたプロトコルを実装する Transport オブジェクトを取得します。適切な Transport オブジェクトを取得できない場合は、null が返されます。- パラメーター:
protocol- トランスポートプロトコル- 戻り値:
- Transport オブジェクト
- 例外:
NoSuchProviderException- 指定されたプロトコルのプロバイダーが見つからない場合。
getTransport
指定された URLName の Transport オブジェクトを取得します。リクエストされたトランスポートオブジェクトを取得できない場合、NoSuchProviderException がスローされます。URL 文字列(RFC 1738 を参照)の「スキーム」部分は、トランスポートプロトコルを見つけるために使用されます。- パラメーター:
url- 目的のトランスポートを表す URLName- 戻り値:
- 閉じた Transport オブジェクト
- 例外:
NoSuchProviderException- 指定された URLName のプロバイダーが見つからない場合。- 関連事項:
getTransport
プロバイダーで指定されたトランスポートのインスタンスを取得します。トランスポートをインスタンス化して返します。- パラメーター:
provider- インスタンス化されるトランスポートプロバイダー- 戻り値:
- インスタンス化されたトランスポート
- 例外:
NoSuchProviderException- 指定されたプロバイダーのプロバイダーが見つからない場合。
getTransport
指定されたアドレス型のメッセージを転送できる Transport オブジェクトを取得します。- パラメーター:
address- トランスポートが必要なアドレス- 戻り値:
- Transport オブジェクト
- 例外:
NoSuchProviderException- アドレス型のプロバイダーが見つからない場合- 関連事項:
setPasswordAuthentication
この(ストアまたはトランスポート)URLName の PasswordAuthentication を保存します。pw が null の場合、URLName に対応するエントリは削除されます。これは通常、ストアまたはトランスポートの実装でのみ使用され、セッションの複数の使用間で認証情報を共有できるようにします。
- パラメーター:
url- URLNamepw- 保存する PasswordAuthentication
getPasswordAuthentication
この(ストアまたはトランスポート)URLName の保存済み PasswordAuthentication を返します。通常、ストアまたはトランスポートの実装でのみ使用されます。- パラメーター:
url- URLName- 戻り値:
- URLName に対応する PasswordAuthentication
requestPasswordAuthentication
public PasswordAuthentication requestPasswordAuthentication(InetAddressSE addr, int port, StringSE protocol, StringSE prompt, StringSE defaultUserName) アプリケーションにコールバックして、必要なユーザー名とパスワードを取得します。アプリケーションは次のようなダイアログを表示する必要があります。Connecting to <protocol> mail service on host <addr>, port <port>. <prompt> User Name: <defaultUserName> Password:
- パラメーター:
addr- ホストの InetAddress。null の可能性があります。port- ホストのポートprotocol- プロトコルスキーム (たとえば imap、pop3 など)prompt- プロンプトの一部として表示する追加の文字列。null の可能性があります。defaultUserName- デフォルトのユーザー名。null の可能性があります。- 戻り値:
- オーセンティケーターによって収集された認証。null の可能性があります。
getProperties
このセッションに関連付けられた Properties オブジェクトを返します- 戻り値:
- プロパティオブジェクト
getProperty
指定されたプロパティの値を返します。このプロパティが存在しない場合は null を返します。- パラメーター:
name- プロパティ名- 戻り値:
- プロパティ値である文字列
addProvider
プロバイダーをセッションに追加します。- パラメーター:
provider- 追加するプロバイダー- 導入:
- JavaMail 1.4
setProtocolForAddress
指定された型のアドレスに使用するデフォルトのトランスポートプロトコルを設定します。通常、デフォルトはjavamail.default.address.mapまたはjavamail.address.mapファイルまたはリソースによって設定されます。- パラメーター:
addresstype- 住所の型protocol- プロトコルの名前- 導入:
- JavaMail 1.4
- 関連事項: