概要
1。電子メール関連の標準
メーカーが提供するJavamailサービスプログラムは、特定のメールプロトコルを選択的に実装できます。一般的なメールプロトコルには以下が含まれます。
SMTP(Simple Mail転送プロトコル)は、単純なメール転送プロトコルです。これは、ソースアドレスから宛先アドレスにメールを送信するための一連のルールです。文字の通過方法を制御します。
POP3(郵便局プロトコルバージョン3):電子メールを受信するために使用される標準的なプロトコルです。
IMAP(インターネットメールアクセスプロトコル):つまり、インターネットメールアクセスプロトコル。 POP3の代替プロトコルです。
これらの3つのプロトコルには、SSL暗号化された伝送、つまりSMTPS、POP3S、IMAPSに対応するプロトコルがあります。
MIME(多目的インターネットメールエクステンション):つまり、多目的インターネットメールエクステンション標準。メール転送プロトコルではありません。ただし、この形式は、送信されるメッセージ、添付ファイル、その他のコンテンツに対して定義されています。
2。Javamailの紹介
Javamailは、電子メールを処理するためにSunが公開したAPIです。 Java SEには含まれていませんが、Java EEの一部です。
Mail.jar:このJARファイルには、Javamail APIとSUNが提供するSMTP、IMAP、およびPOP3サービスプロバイダーが含まれています。
Activation.jar:このJARファイルには、JAF APIとSunの実装が含まれています。
電子メールを処理するためにJavamailパッケージで使用されるコアクラスは、プロパティ、セッション、メッセージ、アドレス、認証者、輸送、ストアなどです。
3。メール転送プロセス
上記の写真に示すように、電子メールを処理する手順は次のとおりです。
4。メッセージ構造
Mimemessageクラス:メール全体を表します。
MimeBodyPartクラス:メッセージを表すMIMEメッセージ。
MimemultiPartクラス:複数のMIME情報で構成されるMIME情報を組み合わせたものを表します。
5。Javamailのコアクラス
Javamailは、メールの送信と受信の高レベルの抽象化を提供し、いくつかの重要なインターフェイスとクラスを形成し、プログラムの基礎を形成します。これらの最も一般的なオブジェクトを見てみましょう。
6。java.util.propertiesクラス(プロパティオブジェクト)
java.util.propertiesクラスは、プロパティのセットを表します。
各キーと値は型文字列です。
Javamailはメールサーバーと通信する必要があるため、これにはサーバーアドレス、ポート、ユーザー名、パスワードなどの多くの情報を提供するためにプログラムが必要です。Javamailは、プロパティオブジェクトを介してこれらの属性情報をカプセル化します。
例:たとえば、次のコードはいくつかの属性情報をカプセル化します。
Properties Prop = new Properties(); prop.setProperty( "mail.debug"、 "true"); prop.setproperty( "mail.host"、 "[email protected]"); prop.setProperty( "mail.transport.protocol"、 "smtp"); prop.setporty( "mail.smtp.auth" "" mail.smtp.auth "); prop.setporty(
さまざまなメールプロトコルの場合、Javamailは、サービスプロバイダーが一連の属性をサポートする必要があると規定しています。
次の表にはいくつかの一般的な属性があります(属性値は文字列型として設定され、属性タイプのbarは属性の解析方法のみを示します):
7。javax.mail.sessionクラス(セッションオブジェクト)
セッションはメールセッションを表します。
セッションの主な機能には2つの側面が含まれます。
さまざまな構成属性情報を受信します。プロパティオブジェクトを介して属性情報が設定されています。
Javamail環境の初期化:Javamail構成ファイルに従ってJavamail環境を初期化して、セッションオブジェクトを介して他の重要なクラスのインスタンスを作成します。
Javamailは、JARパッケージのMeta-INFディレクトリの次のファイルを介して基本的な構成情報を提供して、セッションがこの構成ファイルに従ってプロバイダーの実装クラスをロードできるようにすることができます。
javamail.default.providers;
javamail.default.address.map。
例:
Properties Props = new Properties(); Props.setProperty( "Mail.Transport.Protocol"、 "SMTP");セッションsession = session.getInstance(props);
8。javax.mail.transportクラス(メール転送)
電子メール操作を処理する方法は2つしかありません:送信または受信。
Javamailは、これら2つの異なる操作を、送信(javax.mail.transport)およびストレージ(javax.mail.store)として説明し、対応するメールの送信を送信し、対応するメールの受信を保存します。
getTransport:getTransport()セッションクラスには、トランスポートオブジェクトを作成するために使用できる複数のオーバーロードされたメソッドがあります。
接続:認証コマンド-mail.smtp.authが設定されている場合、トランスポートクラスの接続メソッドを使用してサーバーに接続する場合、ユーザー名とパスワードを追加する必要があります。
SendMessage:トランスポートクラスのSendMessageメソッドは、メールメッセージを送信するために使用されます。
閉じる:トランスポートクラスの閉じる方法は、メールサーバーへの接続を閉じるために使用されます。
9。javax.mail.storeクラス(メールストレージ)
GetStore:GetStore()セッションクラスには、ストアオブジェクトを作成するために使用できる複数のオーバーロードされたメソッドがあります。
接続:認証コマンド-mail.smtp.authが設定されている場合、ストアクラスの接続メソッドを使用してサーバーに接続する場合、ユーザー名とパスワードを追加する必要があります。
GetFolder:ストアクラスのGetFolderメソッドは、メールボックス内のフォルダーフォルダーオブジェクトを取得できます。
閉じる:ストアクラスの閉じる方法は、メールサーバーへの接続を閉じるために使用されます。
10。javax.mail.message(メッセージオブジェクト)
javax.mail.messageは、サブクラスによってのみインスタンス化できる抽象クラスであり、ほとんどの場合、javax.mail.internet.mimemessageです。
Mimemessageは、Mimeタイプの電子メールメッセージを表します。
メッセージを作成するには、セッションオブジェクトをMimemessageコンストラクターに渡す必要があります。
mimemessage message = new Mimemessage(session);
注:RFC822形式で入力ストリームを使用してメッセージを作成するなど、他のコンストラクターがあります。
Setfrom:電子メールの送信者を設定します
setRecipient:送信者、CCの人、および電子メールの秘密者を設定する
3つの事前定義されたアドレスタイプは次のとおりです。
message.recipientType.to:受信者
message.RecipientType.cc:CCの人
message.RecipientType.BCC:ひそかに配ります
SetSubject:電子メールの件名を設定します
SetContent:メールコンテンツを設定します
Settext:電子メールコンテンツがプレーンテキストの場合、このインターフェイスを使用してテキストコンテンツを設定できます。
10。javax.mail.address(アドレス)
セッションとメッセージを作成してメッセージに記入したら、アドレスを使用してメールアドレスを決定できます。メッセージのように、アドレスも抽象クラスです。 javax.mail.internet.internetaddressクラスを使用しています。
作成されたアドレスに電子メールアドレスのみが含まれている場合は、電子メールアドレスをコンストラクターに渡すだけです。
例:
アドレスアドレス= new InternetAddress( "[電子メール保護]");
認証者:認定
java.netクラスと同様に、Javamail APIは認証機を利用して、ユーザー名とパスワードを介して保護されたリソースにアクセスすることもできます。 Javamail APIの場合、これらのリソースはメールサーバーです。 Javamail Authenticatorはjavax.mailパッケージにあり、java.netで同じ名前を持つクラス認証者とは異なります。 Javamail APIはJava 1.1に使用されており、java.netカテゴリがないため、2つは同じ認証器を共有していません。
Authenticatorを使用するには、最初に抽象クラスのサブクラスを作成し、GetPassWordAuthentication()メソッドからPasswordAuthenticationインスタンスを返します。作成が完了したら、Authenticatorをセッションに登録する必要があります。次に、認証が必要な場合、認証機に通知されます。 Windowsをポップアップしたり、構成ファイルからユーザー名とパスワードを読み取ったり(暗号化しないように安全ではありません)、PasswordAuthenticationオブジェクトとして呼び出しプログラムに戻すことができます。
例:
Properties Props = new Properties(); Authenticator auth = new myauthenticator(); session session = session.getDefaultInstance(props、auth);
例
テキストメールを送信します
public static void main(string [] args)throws exception {properties prop = new Properties(); prop.setProperty( "mail.debug"、 "true"); prop.setProperty( "mail.host"、mail_server_host); prop.setProperty( "mail.transport.protocol"、 "smtp"); prop.setProperty( "mail.smtp.auth"、 "true"); //1。セッションセッション= session.getInstance(prop); Ts = nullを輸送します。 // 2。セッションts = session.getTransport()を介してトランスポートオブジェクトを取得します。 // 3。メールサーバーに接続するts.connect(mail_server_host、user、password); //4。メッセージを作成するmimemessageメッセージ= new mimemessage(session); //電子メールメッセージヘッダーmessage.setfrom(new InternetAddress(mail_from)); // message.setRecipientの送信者(message.recipientType.to、new InternetAddress(Mail_to)); //電子メールmessage.setRecipientの受信者(message.recipientType.cc、new InternetAddress(mail_cc)); // cc message.setRecipient(message.recipientType.bcc、new InternetAddress(Mail_BCC)); //メッセージ送信者message.setsubject( "test text mail"); //電子メールのタイトル//メッセージmessage.settext( "世界では比類のない。"); //5。mailts.sendmessage(message、message.getallRecipients())を送信します。 ts.close();}HTML形式のメールを送信します
public static void main(string [] args)throws exception {properties prop = new Properties(); prop.setProperty( "mail.debug"、 "true"); prop.setProperty( "mail.host"、mail_server_host); prop.setProperty( "mail.transport.protocol"、 "smtp"); prop.setProperty( "mail.smtp.auth"、 "true"); //1。セッションセッション= session.getInstance(prop); Ts = nullを輸送します。 // 2。セッションts = session.getTransport()を介してトランスポートオブジェクトを取得します。 // 3。メールサーバーに接続するts.connect(mail_server_host、user、password); //4。メッセージを作成するmimemessageメッセージ= new mimemessage(session); //電子メールメッセージヘッダーmessage.setfrom(new InternetAddress(mail_from)); // message.setRecipientの送信者(message.recipientType.to、new InternetAddress(Mail_to)); //電子メールmessage.setRecipientの受信者(message.recipientType.cc、new InternetAddress(Mail_cc)); // cc message.setRecipient(message.recipientType.bcc、new InternetAddress(Mail_BCC)); // email message.setsubjectの受信者( "test html mail"); //電子メール文字列のタイトルhtmlcontent = "<h1> hello </h1>" + "<p>写真を表示<img src = 'cid:abc.jpg'> 1.jpg </p>"; mimebodypart text = new MimeBodyPart(); text.setContent(htmlcontent、 "text/html; charset = utf-8"); mimebodypart image = new MimeBodyPart(); Datahandler DH = new Datahandler(new FiledataSource( "d:// [04] temp // img // 1.jpg")); image.setDatahandler(DH); image.setcontentid( "abc.jpg"); //データ関係を説明するmimemultipart mm = new mimemultipart(); mm.addbodypart(テキスト); mm.adddodypart(画像); mm.SetSubType( "関連"); message.setContent(mm); message.savechanges(); //5。mailts.sendmessage(message、message.getallRecipients())を送信します。 ts.close();}添付ファイル付きのメールを送信します
public static void main(string [] args)throws exception {properties prop = new Properties(); prop.setProperty( "mail.debug"、 "true"); prop.setProperty( "mail.host"、mail_server_host); prop.setProperty( "mail.transport.protocol"、 "smtp"); prop.setProperty( "mail.smtp.auth"、 "true"); //1。セッションセッション= session.getInstance(prop); Ts = nullを輸送します。 // 2。セッションts = session.getTransport()を介してトランスポートオブジェクトを取得します。 // 3。メールサーバーに接続するts.connect(mail_server_host、user、password); //4。メッセージを作成するmimemessageメッセージ= new mimemessage(session); //電子メールメッセージヘッダーmessage.setfrom(new InternetAddress(mail_from)); // message.setRecipientの送信者(message.recipientType.to、new InternetAddress(Mail_to)); //電子メールmessage.setRecipientの受信者(message.recipientType.cc、new InternetAddress(Mail_cc)); // cc message.setRecipient(message.recipientType.bcc、new InternetAddress(Mail_BCC)); // email message.setsubjectの受信者( "添付メールでのテスト"); //電子メールのタイトルmimebodypart text = new MimeBodyPart(); text.setContent( "電子メールには2つの添付ファイルがあります。"、 "text/html; charset = utf-8"); //データ関係を説明するmimemultipart mm = new mimemultipart(); mm.SetSubType( "関連"); mm.addbodypart(テキスト); string [] files = {"d:// [04] temp // img // 1.jpg"、 "d:// [04] temp // img // 2.jpg"}; //(string filename:files)の電子メール添付ファイルを追加{mimebodypart attachpart = new MimeBodyPart(); attachpart.attachfile(filename); mm.addbodypart(actitspart); } message.setContent(mm); message.savechanges(); //5。mailts.sendmessage(message、message.getallRecipients())を送信します。 ts.close();}メールボックスにメールを入手してください
public class storemail {final static string user = "robot"; // username final static string password = "password520"; //パスワードpublic final static string mail_server_host = "mail。***。com"; //メールボックスサーバーpublic final static string type_html = "text/html; charset = utf-8"; //テキストコンテンツタイプpublic final static string mail_from = "[電子メール保護]"; //送信者public final final static string mail_to = "[電子メール保護]"; //受信者へのパブリック最終静的文字列mail_cc = "[電子メール保護]"; // ccの人パブリック最終静的文字列mail_bcc = "[電子メール保護]"; //密かにpublic static void main(string [] args)スロー例外{//特定の接続情報プロパティを使用してプロパティオブジェクトを作成するproperties prope = new Properties(); prop.setProperty( "mail.debug"、 "true"); prop.setProperty( "mail.store.protocol"、 "pop3"); prop.setProperty( "mail.pop3.host"、mail_server_host); //1。セッションセッションセッション= session.getInstance(prop); // 2。セッションストアストア= session.getStore()を介してストアオブジェクトを取得します。 //3。mailServer Store.connectに接続(mail_server_host、user、password); //4。メールボックスフォルダーフォルダー= store.getFolder( "Inbox")でメールフォルダーを取得します。 folder.open(folder.read_only); //フォルダーメッセージオブジェクトですべてのメッセージを取得するメッセージ[]メッセージ= folder.getMessages(); for(int i = 0; i <messages.length; i ++){string subject = messages [i] .getSubject(); string from =(messages [i] .getfrom()[0])。toString(); system.out.println( "th" +(i + 1) + "メッセージの主題:" + subject); System.out.println( "th" +(i + 1) + "電子メールの送信先アドレス:" + from); } // 5。close folder.close(false); store.close(); }}フォワードメール
例:指定されたメールフォルダーの下に最初の電子メールを入手して転送します
public static void main(string [] args)throws exception {properties prop = new Properties(); prop.put( "mail.store.protocol"、 "pop3"); prop.put( "mail.pop3.host"、mail_server_host); prop.put( "mail.pop3.starttls.enable"、 "true"); prop.put( "mail.smtp.auth"、 "true"); prop.put( "mail.smtp.host"、mail_server_host); // 1。セッションセッション= session.getDefaultInstance(prop)を作成します。 // 2。メールフォルダーストア= session.getStore( "pop3")を読み取ります。 store.connect(mail_server_host、user、password); Folder folder = store.getFolder( "Inbox"); folder.open(folder.read_only); //メールフォルダーメッセージ[]メッセージ= folder.getMessages()で最初の電子メールメッセージを取得します。 if(messages.length <= 0){return; }メッセージメッセージ=メッセージ[0]; // = InternetAddress.toString(message.getFrom())からキーメッセージ文字列を印刷します。 if(from!= null){system.out.println( "from:" + from); } string Replyto = InternetAddress.ToString(message.getReplyto()); if(ReplyTo!= null){system.out.println( "Reply-to:" + ReplyTO); } string to = internetAddress.toString(message.getRecipients(message.recipientType.to)); if(to!= null){system.out.println( "to:" + to); }文字列件名= message.getSubject(); if(subject!= null){system.out.println( "subject:" + subject); } sent = message.getSentDate(); if(sent!= null){system.out.println( "sent:" + sent); } //フォローしている電子メールメッセージヘッダーメッセージforward = new Mimemessage(session); Forward.setfrom(new InternetAddress(mail_from)); Forward.setRecipient(message.RecipientType.to、new InternetAddress(Mail_to)); Forward.setsubject( "fwd:" + message.getSubject()); //電子メールコンテンツmimebodypart bodypart = new MimeBodyPart(); BodyPart.setContent(メッセージ、 "Message/rfc822"); MultiPart MultiPart = new Mimemultipart(); multipart.addbodypart(bodypart); Forward.setContent(MultiPart); forward.savechanges(); TS = session.getTransport( "smtp"); ts.Connect(ユーザー、パスワード); ts.sendmessage(forward、forward.getallrecipients()); folder.close(false); store.close(); ts.close(); System.out.println( "メッセージが正常に転送されました...");}上記はこの記事に関するすべてです。 Javamailからメールを送信して受信する方法を誰もが学ぶことが役立つことを願っています。