序文
メールを送信するためのコードは、以前のアプリケーションから直接コピーされました。私が過去に使用していたTencent電子メールサービスは、プログラムの実行に問題はありません。その後、MicrosoftのOffice365メールサービスに変更した後、2つの問題に遭遇しました。
質問1、TLS暗号化設定
例外情報は次のとおりです。
スレッド「メイン」com.sun.mail.smtp.smtpsendfailedexception:530 5.7.57 smtp;クライアントは、メール中に匿名のメールを送信することを認証されていませんでした
これは解決しやすいです。いくつかの情報を見つけた後、次の構成を追加します。
mail.smtp.starttls.enable = true
質問2:プロンプトプロトコルはnullです:
例外情報は次のとおりです。
スレッドの例外 "main" javax.mail.nosuchproviderexception:無効なプロトコル:javax.mail.session.getprovider(session.java:449)at javax.mail.session.gettransport(session.java:667)at javax.mail.session.java:648) javax.mail.session.getTransport(session.java:634)
この問題は、アプリケーションを生産環境に展開した後にのみ発生します。検査後、私が呼んだJARパッケージは、Mavenで指定したバージョンではないことがわかりました。その後、アプリケーションで使用されるJARパッケージがコンテナで使用されるJARパッケージ(つまりjetty)と矛盾することが確認されました。コンテナで使用されるJARバージョンは古いですが、容器の瓶はデフォルトでロードされます。この問題を解決するには2つの方法があります。
コンテナに依存する瓶を使用したコードを書き直します。
コンテナの瓶を更新します。
2番目の選択肢はやや危険なので、最初のオプションを使用して、1行を変更するだけです。
輸送輸送= session.getTransport( "smtp");
この問題は、javax.mailバージョン1.4で発生します。その後、上位バージョンはSMTPプロトコルを使用してデフォルトで電子メールを送信します。
修正プログラム:
パッケージcom.zhyea.zytools; import java.util.date; import java.util.properties; import javax.mail.message; import javax.mail.session; import javax.mail.transport; import javax.mail.internet.internetdress静的最終文字列mail_smtp_host = "smtp.exmail.qq.com";プライベート静的最終整数mail_smtp_port = 587; private static final boolean mail_smtp_auth = true; private static final string mail_smtp_user = "[email protected]";プライベート静的な最終文字列mail_smtp_password = "robinzhyea"; private static Properties props = new Properties(); static {props.put( "mail.smtp.host"、mail_smtp_host); props.put( "mail.smtp.auth"、mail_smtp_auth); props.put( "mail.smtp.user"、mail_smtp_user); props.put( "mail.smtp.password"、mail_smtp_password); props.put( "mail.smtp.starttls.enable"、true); }/***電子メールを送信*/public static void send(string to、string title、string content){try {session session.getInstance(props); //メールセッションmimemessage message = new mimemessage(session); //メールセッションメッセージから新しいメッセージオブジェクトを作成します。 message.setRecipient(message.recipientType.to、new InternetAddress(to)); //受信者を設定し、受信タイプを// message content // message.settext(mailcontent)に設定します。 //プレーンテキストの電子メールtodo message.setsubject(title); // title message.setcontent(content、 "text/html; charset = gbk"); // htmlメールを送信すると、コンテンツスタイルは豊富です。setsentdate(new date()); //送信時間message.savechanges(); // email transport transport = session.getTransport( "smtp"); Transport.Connect(mail_smtp_user、mail_smtp_password); Transport.sendmessage(message、message.getallRecipients()); //電子メールを送信すると、2番目のパラメーターはすべて設定された受信者アドレスTransport.close(); } catch(Exception e){e.printstacktrace(); }}}パッケージcom.zhyea.zytools; Import Java.util.date; import java.util.properties; javax.mail.message; Import javax.mail.session; Import javax.mail.transport; Import javax.mail.internet.internetadress; Import javax.mail.internet.mimemessage; public class mailsender {private static final string mail_smtp_host = "smtp.exmail.qq.com";プライベート静的最終整数mail_smtp_port = 587; private static final boolean mail_smtp_auth = true; private static final string mail_smtp_user = "[email protected]";プライベート静的な最終文字列mail_smtp_password = "robinzhyea"; private static Properties props = new Properties(); static {props.put( "mail.smtp.host"、mail_smtp_host); props.put( "mail.smtp.auth"、mail_smtp_auth); props.put( "mail.smtp.user"、mail_smtp_user); props.put( "mail.smtp.password"、mail_smtp_password); props.put( "mail.smtp.starttls.enable"、true); }/***電子メールを送信*/public static void send(string to、string title、string content){try {session session.getInstance(props); //メールセッションmimemessage message = new mimemessage(session); //メールセッションメッセージから新しいメッセージオブジェクトを作成します。 message.setRecipient(message.recipientType.to、new InternetAddress(to)); //受信者を設定し、受信タイプを// message content // message.settext(mailcontent)に設定します。 //プレーンテキストの電子メールtodo message.setsubject(title); // title message.setcontent(content、 "text/html; charset = gbk"); // htmlメールを送信すると、コンテンツスタイルは豊富です。setsentdate(new date()); //送信時間message.savechanges(); // email transport transport = session.getTransport( "smtp"); Transport.Connect(mail_smtp_user、mail_smtp_password); Transport.sendmessage(message、message.getallRecipients()); //電子メールを送信すると、2番目のパラメーターはすべて設定された受信者アドレスTransport.close(); } catch(Exception e){e.printstacktrace(); }}}
上記はこの記事のすべての内容です。この記事の内容が、すべての人の勉強と仕事に役立つことを願っています。