مقدمة
تم نسخ رمز إرسال البريد الإلكتروني مباشرة من تطبيق سابق. إن خدمة البريد الإلكتروني tencent التي استخدمتها في الماضي ليس لديها مشاكل في تنفيذ البرنامج. في وقت لاحق ، بعد تعديلها إلى خدمة البريد Office365 من Microsoft ، واجهت مشكلتين.
السؤال 1 ، إعدادات تشفير TLS
معلومات الاستثناء هي كما يلي:
استثناء في الموضوع "الرئيسي" com.sun.mail.smtp.smtpsendfailedException: 530 5.7.57 SMTP ؛ لم تتم مصادقة العميل لإرسال بريد مجهول أثناء البريد من
هذا أسهل لحل. بعد العثور على بعض المعلومات ، أضف التكوين التالي:
mail.smtp.starttls.enable = true
السؤال 2: البروتوكول المذهل فارغ:
معلومات الاستثناء هي كما يلي:
استثناء في الموضوع "الرئيسي" javax.mail.nosuchproviderexception: بروتوكول غير صالح: لاغية في javax.mail.session.getProvider (session.java:449) في javax.mail.session.gettransport (session.java:67) في javax.mail.session.gettransport javax.mail.session.getTransport (Session.java:634)
لا يتم مواجهة هذه المشكلة إلا بعد نشر التطبيق على بيئة الإنتاج. بعد التفتيش ، وجدت أن حزمة JAR التي اتصلت بها لم تكن النسخة التي حددتها في Maven. في وقت لاحق تم التأكيد على أن حزمة الجرة المستخدمة من قبل التطبيق تتعارض مع حزمة JAR المستخدمة من قبل الحاوية (أي رصيف). إصدار الجرة المستخدمة من قبل الحاوية أقدم ، ولكن يتم تحميل الجرار من الحاوية افتراضيًا. هناك طريقتان لحل هذه المشكلة:
إعادة كتابة الكود مع الجرار التي تعتمد على الحاويات ؛
تحديث جرة الحاوية.
الخيار الثاني خطير إلى حد ما ، لذا استخدم الخيار الأول ، فقط قم بتعديل سطر واحد:
Transport Transport = Session.getTransport ("SMTP") ؛ستحدث هذه المشكلة في Javax.mail الإصدار 1.4. في وقت لاحق ، ستستخدم الإصدارات العليا بروتوكول SMTP لإرسال رسائل البريد الإلكتروني افتراضيًا.
البرنامج المعدل:
package com.zhyea.zytools ؛ استيراد java.util.date ؛ استيراد java.util.properties ؛ استيراد javax.mail.message ؛ استيراد javax.mail.session ؛ استيراد javax.mail السلسلة النهائية mail_smtp_host = "smtp.exmail.qq.com" ؛ static integer integer mail_smtp_port = 587 ؛ ثابت خاص بولاني MAIL_SMTP_AUTH = صحيح ؛ Static Static Final Final Mail_smtp_user = "[email protected]" ؛ Static Static Final Final Mail_smtp_password = "Robinzhea" ؛ الخصائص الثابتة الخاصة الدعائم = خصائص جديدة () ؛ 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) ؛ }/*** أرسل بريدًا إلكترونيًا*/إرسال باطل ثابت عام (سلسلة إلى ، عنوان السلسلة ، محتوى السلسلة) {try {session session = session.getInstance (props) ؛ // إنشاء رسالة mimemessage جلسة بريد = جديد mimemessage (جلسة) message.setRecipient (message.recipienttype.to ، new InternetAddress (إلى)) // إرسال رسالة بريد إلكتروني عادي todo message.setsubject (العنوان) ؛ // قم بتعيين رسالة العنوان. // إرسال بريد HTML ، فإن نمط المحتوى هو رسالة أكثر ثراءً. Transport.connect (mail_smtp_user ، mail_smtp_password) ؛ Transport.SendMessage (message ، message.getAllRecipients ()) ؛ // إرسال بريد إلكتروني ، المعلمة الثانية هي جميع عناوين المستلم Transport.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }}} package com.zhyea.zytools ؛ استيراد java.util.date ؛ استيراد java.util.properties ؛ استيراد javax.mail.message ؛ استيراد javax.mail.session ؛ استيراد javax.mail.transport ؛ استيراد javax.internet.internetaddress ؛ استيراد javax.mail.internet.mimessage ؛ الفئة العامة mailsender {private static Final String Mail_smtp_host = "smtp.exmail.qq.com" ؛ static integer integer mail_smtp_port = 587 ؛ ثابت خاص بولاني MAIL_SMTP_AUTH = صحيح ؛ Static Static Final Final Mail_smtp_user = "[email protected]" ؛ Static Static Final Final Mail_smtp_password = "Robinzhea" ؛ الخصائص الثابتة الخاصة الدعائم = خصائص جديدة () ؛ 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) ؛ }/*** أرسل بريدًا إلكترونيًا*/إرسال باطل ثابت عام (سلسلة إلى ، عنوان السلسلة ، محتوى السلسلة) {try {session session = session.getInstance (props) ؛ // إنشاء رسالة mimemessage جلسة بريد = جديد mimemessage (جلسة) message.setRecipient (message.recipienttype.to ، new InternetAddress (إلى)) // إرسال رسالة بريد إلكتروني عادي todo message.setsubject (العنوان) ؛ // قم بتعيين رسالة العنوان. // إرسال بريد HTML ، فإن نمط المحتوى هو رسالة أكثر ثراءً. Transport.connect (mail_smtp_user ، mail_smtp_password) ؛ Transport.SendMessage (message ، message.getAllRecipients ()) ؛ // إرسال بريد إلكتروني ، المعلمة الثانية هي جميع عناوين المستلم Transport.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }}}
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون محتوى هذه المقالة مفيدًا لدراسة الجميع والعمل.