JavaMailAPI-コアクラス
JavaMail APIは、電子メールメッセージの送信、読み取り、および削除に使用されるいくつかのインターフェースとクラスで構成されています。JavaMail APIには多くのパッケージがありますが、Java Mail APIで頻繁に使用される主な2つのパッケージ、javax.mailとjavax.mail.internetパッケージについて説明します。これらのパッケージには、すべてのJavaMailコアクラスが含まれています。彼らです:
クラス | 説明 |
---|---|
javax.mail.Session | APIのキークラス。マルチスレッドオブジェクトは、接続ファクトリを表します。 |
javax.mail.Message | 電子メールメッセージをモデル化する抽象クラス。サブクラスは実際の実装を提供します。 |
javax.mail.Address | メッセージ内のアドレス(差出人アドレスと宛先アドレス)をモデル化する抽象クラス。サブクラスは特定の実装を提供します。 |
javax.mail.Authenticator | メールサーバー上のメールリソースを保護するために使用される抽象クラス。 |
javax.mail.Transport | 電子メールメッセージを送信するためのメッセージ転送メカニズムをモデル化する抽象クラス。 |
javax.mail.Store | メッセージを格納および取得するための、メッセージストアとそのアクセスプロトコルをモデル化する抽象クラス。ストアはフォルダーに分割されます。 |
javax.mail.Folder | メールメッセージのフォルダを表す抽象クラス。サブフォルダーを含めることができます。 |
javax.mail.internet。MimeMessage | メッセージは抽象クラスであるため、サブクラスで機能する必要があります。ほとんどの場合、MimeMessageを使用します。MimeMessageは、MIMEタイプとヘッダーを理解する電子メールメッセージです。 |
javax.mail.internet。InternetAddress | このクラスは、RFC822の構文を使用してインターネットの電子メールアドレスを表します。一般的なアドレス構文は、user @ host.domainまたはPersonalName <[email protected]>の形式です。 |
これらの各クラスを詳細に学習し、次の章では、これらの各クラスを使用して例を学習します。
セッションクラス
セッションクラスはのJavaMail APIの主要なクラスであり、サブクラス化されていません。セッションオブジェクトは、構成設定と認証の両方を扱うのJavaMail API、の接続ファクトリとして機能します。
セッションオブジェクトは、次の方法で作成できます。
JNDIサービスに格納されている管理対象オブジェクトを検索する
InitialContext ctx = new InitialContext(); Session session = (Session) ctx.lookup("usersMailSession");
usersMailSessionは、Sessionオブジェクトの管理対象オブジェクトとして使用されるJNDI名オブジェクトです。usersMailSessionは、メールサーバーのホスト名、メールを送信するユーザーアカウント、Sessionオブジェクトでサポートされているプロトコルなどの情報を含む、名前と値のペアとして必要なパラメーターを使用して作成および構成できます。
Sessionオブジェクトを作成する別の方法は、java.util.Propertiesオブジェクトを使用して、メールサーバー名、ユーザー名、パスワード、その他の情報などのデフォルト情報の一部を上書きできるプログラムによるアプローチに基づいています。アプリケーション全体で共有されます。
Sessionクラスのコンストラクターはprivateです。したがって、Sessionクラスは、Sessionオブジェクトを取得する2つのメソッド(以下にリスト)を提供します。
getDefaultInstance():getDefaultInstance()メソッドを使用してセッションオブジェクトを取得するには、2つのメソッドがあります。デフォルトのセッションを返します。
public static Session getDefaultInstance(Properties props) public static Session getDefaultInstance(Properties props,Authenticator auth)
getInstance():getInstance()メソッドを使用してセッションオブジェクトを取得するには、2つのメソッドがあります。新しいセッションを返します。
public static Session getInstance(Properties props) public static Session getInstance(Properties props,Authenticator auth)
メッセージクラス
Sessionオブジェクトが作成されたら、送信されるメッセージの作成に移ります。メッセージタイプはjavax.mail.Messageになります。
メッセージは抽象クラスです。したがって、そのサブクラスjavax.mail.internet.MimeMessageクラスが主に使用されます。
メッセージを作成するには、MimeMessageクラスコンストラクタでセッションオブジェクトを渡す必要があります。例えば:
MimeMessage message=new MimeMessage(session);
メッセージオブジェクトが作成されたら、そこに情報を保存する必要があります。メッセージクラスはjavax.mail.Partインターフェイスを実装し、javax.mail.internetは実装します。MimeMessageはjavax.mail.internet.MimePartを実装します。message.setContent()またはmimeMessage.setText()を使用してコンテンツを保存できます。
MimeMessageクラスの一般的に使用されるメソッドは次のとおりです。
方法 説明 public void setFrom(Address address) fromヘッダーフィールドを設定するために使用されます。 public void addRecipients(Message.RecipientType type、String addresss) 指定されたアドレスを受信者タイプに追加するために使用されます。 public void setSubject(String subject) 件名ヘッダーフィールドを設定するために使用されます。 public void setText(String textmessage) text / plainMIMEタイプを使用してテキストをメッセージコンテンツとして設定するために使用されます。
アドレスクラス
SessionオブジェクトとMessage(コンテンツが格納されている)オブジェクトができたので、Addressオブジェクトを使用してレターのアドレスを指定する必要があります。
アドレスは抽象クラスです。したがって、そのサブクラスjavax.mail.internet.InternetAddressクラスが主に使用されます。
アドレスは、ちょうど電子メールアドレスを渡すことによって作成することができます。
Address address = new InternetAddress("[email protected]");
アドレスを作成する別の方法は、名前と電子メールアドレスをログに渡すことです。
Address address = new InternetAddress("[email protected]", Manisha);
To、From、CC、BCCフィールドを以下のように設定することもできます
message.setFrom(address)
message.addRecipient(type、address)
3つの事前定義されたアドレスタイプは、次のいずれかの値を持つオブジェクトです。
Message.RecipientType.TO
Message.RecipientType.CC
Message.RecipientType.BCC
オーセンティケータークラス
クラスAuthenticatorは、ネットワーク接続の認証を取得する方法を知っているオブジェクトを表します。通常、これはユーザーに情報の入力を求めることによって行われます。
オーセンティケーターは抽象クラスです。サブクラスPasswordAuthenticationを作成し、そのコンストラクターにユーザー名とパスワードを渡します。
セッションオブジェクトを作成するときは、オーセンティケーターをセッションに登録する必要があります。
以下は、オーセンティケーターの使用例です。
Properties props = new Properties();
//Override props with any customized data
PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd")
Session session = Session.getDefaultInstance(props, auth);
輸送クラス
トランスポートクラスは、メッセージトランスポートメカニズムとして使用されます。このクラスは通常、SMTPプロトコルを使用してメッセージを送信します。
抽象クラスです。
静的send()メソッドを呼び出すだけで、クラスのデフォルトバージョンを使用できます。
Transport.send(message);
メッセージを送信するもう1つの方法は、プロトコルのセッションから特定のインスタンスを取得し、ユーザー名とパスワード(不要な場合は空白)を渡し、メッセージを送信して、接続を閉じることです。
message.saveChanges(); // implicit with send() //Get transport for session Transport transport = session.getTransport("smtp"); //Connect transport.connect(host, username, password); //repeat if necessary transport.sendMessage(message, message.getAllRecipients()); //Done, close the connection transport.close();
ストアクラス
メッセージを格納および取得するための、メッセージストアとそのアクセスプロトコルをモデル化する抽象クラス。サブクラスは実際の実装を提供します。StoreはServiceクラスを拡張します。これは、ストアに名前を付けたり、ストアに接続したり、接続イベントをリッスンしたりするための多くの一般的なメソッドを提供します。
クライアントは、データベースアクセスプロトコルを実装するStoreオブジェクトを取得することにより、メッセージストアにアクセスできます。ほとんどのメッセージストアでは、アクセスを許可する前にユーザーを認証する必要があります。connectメソッドはその認証を実行します。
Store store = session.getStore("pop3");
store.connect(host, username, password);
フォルダークラス
Folderは、メールメッセージのフォルダーを表す抽象クラスです。サブクラスは、プロトコル固有のフォルダーを実装します。フォルダにはメッセージだけでなくサブフォルダも含めることができるため、階層構造が提供されます。
ストアに接続すると、フォルダーを取得できます。フォルダーからメッセージを読み取るには、フォルダーを開く必要があります。
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
FolderオブジェクトのgetFolder(String name)メソッドは、名前付きサブフォルダーを返します。メールの読み取りが完了したら、ストアとフォルダの両方の接続を閉じます。
以下の画像で、ストアとフォルダーの関係を確認できます。
ご覧のとおり、ユーザーアカウントごとに、サーバーにはユーザーのメッセージのストレージであるストアがあります。ストアはフォルダーに分割され、「受信ボックス」フォルダーは主に電子メールメッセージを含むフォルダーです。フォルダには、メッセージとサブフォルダの両方を含めることができます。