Kata pengantar
Kode untuk mengirim email disalin langsung dari aplikasi sebelumnya. Layanan email Tencent yang saya gunakan di masa lalu tidak memiliki masalah dengan pelaksanaan program. Kemudian, setelah memodifikasinya ke layanan surat Microsoft Office365, saya mengalami dua masalah.
Pertanyaan 1, Pengaturan Enkripsi TLS
Informasi pengecualian adalah sebagai berikut:
Pengecualian di Thread "Main" com.sun.mail.smtp.smtpsendfailedException: 530 5.7.57 SMTP; Klien tidak diautentikasi untuk mengirim surat anonim selama surat dari
Ini lebih mudah dipecahkan. Setelah menemukan beberapa informasi, tambahkan konfigurasi berikut:
mail.smtp.starttls.enable = true
Pertanyaan 2: Protokol yang cepat adalah NULL:
Informasi pengecualian adalah sebagai berikut:
Pengecualian di Thread "Main" javax.mail.nosuchproviderException: protokol tidak valid: nol di javax.mail.session.getProvider (session.java:449) di javax.mail.session.gettransport (session.java:667) di javax.mail.session.session (session.java:667) di javax.mail javax.mail.session.getTransport (session.java:634)
Masalah ini ditemui hanya setelah menggunakan aplikasi ke lingkungan produksi. Setelah inspeksi, saya menemukan bahwa paket JAR yang saya sebut bukan versi yang saya tentukan di Maven. Kemudian dikonfirmasi bahwa paket JAR yang digunakan oleh aplikasi yang bertentangan dengan paket JAR yang digunakan oleh wadah (mis. Jetty). Versi toples yang digunakan oleh wadah lebih tua, tetapi toples wadah dimuat secara default. Ada dua cara untuk menyelesaikan masalah ini:
Menulis ulang kode dengan stoples yang bergantung pada wadah;
Perbarui toples wadah.
Pilihan kedua agak berbahaya, jadi gunakan opsi pertama, cukup ubah satu baris:
Transport transport = session.getTransport ("smtp");Masalah ini akan terjadi di javax.mail versi 1.4. Kemudian, versi yang lebih tinggi akan menggunakan protokol SMTP untuk mengirim email secara default.
Program yang dimodifikasi:
Paket com.zhyea.zytools; impor java.util.date; impor java.util.properties; impor javax.mail.message; impor javax.mail.sisession; impor javax.mail.transport; impor javax.mail.ininternet.innet.Ininternet; Insesi; Impor; string final statis mail_smtp_host = "smtp.exmail.qq.com"; private static final integer mail_smtp_port = 587; private static final boolean mail_smtp_auth = true; string final statis pribadi mail_smtp_user = "[email protected]"; Private Static Final String 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); }/*** Kirim email*/public static void kirim (string ke, judul string, konten string) {coba {session session = session.getInstance (props); // Buat sesi email mimemessage pesan = mimemessage baru (sesi); // objek pesan baru dari mail mimemessage (new internetAdress (mail_sm. message.setrecipient (message.recipienttype.to, new internetAddress (to)); // Atur penerima dan atur jenis penerima ke // atur konten pesan // pesan.setText (mailcontent); // Kirim email sederhana email todo pesan.setsubject (title); // atur judul pesan.setContent (konten, "text/html; charset = gbk"); // Kirim surat HTML, gaya kontennya lebih kaya pesan.setsentDate (tanggal baru ()); // Atur pesan pengiriman waktu. SaveChanges (); // Informasi email penyimpanan // Kirim email transportasi transport = session.gettransport ("smtp"); transport.connect (mail_smtp_user, mail_smtp_password); transport.sendMessage (pesan, pesan.getAllRecipients ()); // Kirim Email, Parameter Kedua adalah semua set alamat penerima Transport.close (); } catch (Exception e) {E.PrintStackTrace (); }}} paket com.zhyea.zytools; impor java.util.date; impor java.util.properties; impor javax.mail.message; impor javax.mail.Session; impor javax.mail.transport; impor javax.mail.internet.internetaddress; import javax.mail.internet.mimemessage; mailsender kelas publik {private static final string mail_smtp_host = "smtp.exmail.qq.com"; private static final integer mail_smtp_port = 587; private static final boolean mail_smtp_auth = true; Private Static Final String mail_smtp_user = "[email protected]"; Private Static Final String 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); }/*** Kirim email*/public static void kirim (string ke, judul string, konten string) {coba {session session = session.getInstance (props); // Buat sesi email mimemessage pesan = mimemessage baru (sesi); // objek pesan baru dari mail mimemessage (new internetAdress (mail_sm. message.setrecipient (message.recipienttype.to, new internetAddress (to)); // Atur penerima dan atur jenis penerima ke // atur konten pesan // pesan.setText (mailcontent); // Kirim email sederhana email todo pesan.setsubject (title); // atur judul pesan.setContent (konten, "text/html; charset = gbk"); // Kirim surat HTML, gaya kontennya lebih kaya pesan.setsentDate (tanggal baru ()); // Atur pesan pengiriman waktu. SaveChanges (); // Informasi email penyimpanan // Kirim email transportasi transport = session.gettransport ("smtp"); transport.connect (mail_smtp_user, mail_smtp_password); transport.sendMessage (pesan, pesan.getAllRecipients ()); // Kirim Email, Parameter Kedua adalah semua set alamat penerima Transport.close (); } catch (Exception e) {E.PrintStackTrace (); }}}
Di atas adalah semua konten artikel ini. Saya berharap konten artikel ini akan membantu untuk belajar dan bekerja semua orang.