Java Mailは、既存の電子メールアカウントを使用して電子メールを送信するツールです。たとえば、NetEaseにメールアカウントを登録します。 Java Mailの制御により、NetEase Mailboxに直接ログインすることはできません。そのため、プログラムはNetEase Mailboxを使用して電子メールを送信できるようにします。このメカニズムは、登録のアクティベーションとスパム送信に広く使用されています。
Javaメールを送信する一般的なプロセスは次のとおりです。
1. javax.mail.authenticatorから継承された特定のクラスを構築し、内部のgetpasswordauthentication()メソッドをオーバーライドします。このクラスは、このメールボックスに電子メールを送信する権利があることを確認するために、ログイン検証として使用されます。
2。SMTPサーバーアドレスなどのパラメーターを保存するプロパティファイルを作成します。
3.構築されたプロパティファイルとjavax.mail.authenticatorコンクリートクラスを介してjavax.mail.sessionを作成します。セッションの作成は、電子メールアドレスにログインするのと同等です。残りは当然、新しいメールです。
4.電子メールコンテンツを作成するには、通常、javax.mail.internet.mimemessageオブジェクトであり、送信者、受信者、件名、コンテンツなどを指定します。
5. javax.mail.transportツールクラスを使用して、メールを送信します。
以下は私がカプセル化したコードで、コメントも非常に詳細です。
1.最初に、javax.mail.authenticatorから継承された特定のクラスです。 getPassWordAuthentication()メソッドは、パスワードAuthenticationオブジェクトを作成して返すことです。これは、Javaメールの設計意図を理解するのが少し混乱することです。 javax.mail.authenticatorは、セキュリティを確保するための追加の検証措置を提供してくれる可能性があります。
パッケージcom.mzule.simplemail; javax.mail.authenticator; import javax.mail.passwordauthentication; /** *サーバーメールボックスログイン検証 * * @author mzule * */public class mailauthenticator extends authenticator {/** * username(login mailbox) */private string username; / ***パスワード*/プライベート文字列パスワード。 / ***メールボックスとパスワードの初期化** @paramユーザー名メールボックス* @paramパスワードパスワード*/ public mailauthenticator(string username、string password){this.username = username; this.password = password; } string getPassWord(){パスワードを返します。 } @Override Protected PasswordAuthentication getPassWordAuthentication(){return new PasswordAuthentication(username、password); } string getUsername(){return username; } public void setPassword(string password){this.password = password; } public void setUsername(string username){this.username = username; }}2。電子メール送信クラス、残りの手順はこのクラスで実装されています。コードのSimpleMailは、電子メールの主題とコンテンツをカプセル化するPOJOです。トピックとコンテンツの両方をメソッドパラメーターに含めることは適切ではないと感じているため、このメソッドを過負荷にしました。また、ほとんどのメールボックスのSMTPサーバーアドレスは、電子メールアドレスで計算できるためです。簡単にするために、SMTPサーバーアドレスを必要としないコンストラクターが提供されます。
パッケージcom.mzule.simplemail; java.util.list;インポートJava.util.properties; javax.mail.messagingexception; Import javax.mail.session; import javax.mail.transport; import javax.mail.internet.addressexception; Import javax.mail.internet.internetAddress; Import Javax.Mail.Internet.mimessage; Import Javax.mail.mail.memimemesage; /***単純なメール送信者は、単一または質量で送信できます。 * * @author mzule * */public class simplemailsender {/** *メール送信用ファイル */プライベート最終的な一時的なプロパティprops = system.getProperties(); / ***メールサーバーのログイン検証*/プライベートトランジェントMailAuthenticator Authenticator; / ** *メールセッション */プライベートトランジェントセッションセッション。 / ** *メール送信者の初期化 * * @param smtphostname * smtpメールサーバーアドレス * @param username * username * username(アドレス)メール * @paramパスワード *メールの送信のパスワード */ public simplemailsender(最終文字列smtphostname、final smtphostname、final string username、final string password){init、smtphostname); } /***電子メール送信者の初期化** @param username* username(アドレス)メール送信メールのユーザー名(アドレス)電子メールを送信し、これを使用してSMTPサーバーアドレスを解決します* @paramパスワード*メール* /public SimpleMailsender(最終的な文字列ユーザー名、最終文字列パスワード){// SMTP Serverを介してSMTPサーバーを削除します。 + username.split( "@")[1]; init(username、password、smtphostname); } / ** *初期化 * * @param username * username(アドレス)メールを送信するためのユーザー名 * @paramパスワード *パスワード * @param smtphostname * smtpホストアドレス * / private void init(string username、string password、string smtphostname){// props propss.puts( "mail.smtp.auth" "" "" "); props.put( "mail.smtp.host"、smtphostname); // authenticatorを確認= new MailAuthenticator(username、password); //セッションセッション= session.getInstance(Props、Authenticator)を作成します。 } / ** *電子メールを送信 * * @param受信者 *受信者メールアドレス * @param件名 * @paramコンテンツ * @throws destressexception * @throws messagingexception * / public void send(string reciontient、string、object content)throws addressexception、messagingexception {// mime type binmesage message = new mimessage(segies); //送信者message.setfrom(new InternetAddress(authenticator.getUsername()))を設定します。 //受信者message.setRecipient(ReciintientType.to、new InternetAddress(Reciontient))を設定します。 //トピックmessage.setsubject(subject); //メッセージコンテンツMessage.setContent(content.toString()、 "text/html; charset = utf-8"); // Transport.send(メッセージ)を送信します。 } / ** * bulk email * * @param受信者 *受信者 * @param subject * subject * @param content * @throws drestexception * @throws messagingception * / public void send(list <string>受信者、文字列、オブジェクトコンテンツ)スローアドレスエクセプション、メッセージングexception {// mime型最終メッセージ=新しいマイメーゼージ=新しいマイメメッシェージ=新しいマイメメス//送信者message.setfrom(new InternetAddress(authenticator.getusername()))を設定します。 //受信者を設定しますfinal int num = cosipient.size(); InternetAddress []アドレス= new InternetAddress [num]; for(int i = 0; i <num; i ++){addresses [i] = new InternetAddress(reciontients.get(i)); } message.setRecipients(ReciontientType.to、アドレス); //トピックmessage.setsubject(subject); //メールコンテンツmessage.setContent(content.toString()、 "text/html; charset = utf-8"); // Transport.send(メッセージ)を送信します。 } / ** *電子メールを送信 * * @param受信者 *受信者メールアドレス * @paramメール *メールオブジェクト * @throws drestexception * @throws MessagingException * / public void send(String Reciontient、SimpleMail Mail)THROWSEXCEPTION、MESSGESCEPTION {send(reciontient、mail.getSubject()、mail.getSubject()、mail.getSubject()); } / ** * bulk email * * @param受信者 *受信者 * @param mail *メールオブジェクト * @throws drestexception * @throws messagingexception * / public void send(list <string>受信者、simplemail mail)dressegexception、messagingepsection {send(reciontient、mail.getsubject()、mail.getcontent()); }}3.上記のメールボックス送信者を呼び出すと、工場のクラスを構築できます。工場のクラスは作成プロセスをカプセル化できるため、構成ファイルを読み取ってメールボックスのユーザー名を取得するのが非常に便利になります。次のコードは、私がオブザーバーモードを書いているときに書かれており、工場クラスを簡単に実証しました。
パッケージcom.mzule.dp.observer.factory; com.mzule.dp.observer.constant.mailsendertype;インポートcom.mzule.simplemail.simplemailsender; /*** Outbox Factory** @Author Mzule**/public class mailsenderFactory {/*** Service Mailbox*/private static SimpleMailsender servicesms = null; / *** get Mailbox** @param Type Mailbox Type* @returnメールボックスは、タイプに一致します*/ public static simplemailsender getsender(mailsendertype type){if(type == mailsendertype.service){if(servicesms == null){servicesms = new simplemailsender(new simplemailsender( "invisable @visible @hiddined"); } return servicesms; } nullを返します。 }}4.オブザーバーモードのデモで電子メールまたはコードを送信します。
パッケージcom.mzule.dp.observer.observer; java.util.arraylist;インポートjava.util.list; Import java.util.observable; import java.util.observable; Import java.util.observable; Import java.util.observer; Import Javax.mail.messageexception; Import javax.mail.mail.mail.mail.messexception; com.mzule.dp.observer.constant.mailsendertype;インポートcom.mzule.dp.observer.factory.mailsenderfactory; Import com.mzule.dp.observer.po.product; import com.mzule.simplemailsender; Public Class ProductPriceObserverはObserver {@Override Public Void Update(Observable OBJ、Object Arg){Product Product = null; if(obj instanceof product){product =(product)obj; } if(arg instanceof float){float price =(float)arg; float decraes = product.getPrice() - 価格; if(decrase> 0){// simplemailsender sms = mailsenderfactory .getsender(mailsendertype.service);リスト<String>受信者= new ArrayList <String>(); reciontients.add( "[email protected]"); reciontients.add( "[email protected]"); try {for(string reciontient:reciontient){sms.send(受信者、 "価格変化"、 "に注意を払う項目" + product.getName() + "価格は" + product.getprice() + "yuanに引き下げられました +" yuan、nection exted " + decroase +" yuan rmb。 "); }} catch(adstressException e){e.printstacktrace(); } catch(messagingexception e){e.printstacktrace(); }}}}} 5.電子メールが正常に送信されたかどうかを確認してください。
上記は、Javaメールを送信するプロセス全体であり、すべての人の学習に役立つことを願っています。