في الآونة الأخيرة ، يعمل المشروع كزاحف أخبار. أريد تنفيذ هذه الوظيفة: بعد فشل الزاحف في إرسال عنوان URL لهذه الصفحة إلى عنوان البريد الإلكتروني. مخطط التأثير النهائي هو كما يلي. يمكن إضافة علامات التصفية ورموز حالة الفشل وما إلى ذلك لاحقًا لتسهيل الاستثناءات للتصنيف والبحث.
يمكن للمطورين تحليل أسباب فشل الزاحف بناءً على عنوان URL ومكدس المعلومات في البريد الإلكتروني.
قم بتشغيل خدمة SMTP
الإعدادات في QQ البريد الإلكتروني -> تمكين خدمة SMTP في حسابك
لاحظ أنه بعد الافتتاح ، ستقوم البريد الإلكتروني QQ بإنشاء رمز إذن. استخدم رمز التفويض هذا بدلاً من كلمة مرور البريد الإلكتروني الأصلية عند توصيل البريد الإلكتروني في الرمز ، وذلك لتجنب استخدام كلمة مرور نصية عادي.
لقد بحثت عن مثال عبر الإنترنت ، ووفقًا لهذه المقالة Java Mail (II): Javamail Introduction و Sample Code لإرسال بريد إلكتروني بسيط.
خصائص الدعائم = خصائص جديدة () ؛ // تمكين تصحيح الأخطاء الدعائم name props.setProperty ("mail.transport.protocol" ، "smtp") ؛ جلسة الجلسة = session.getInstance (الدعائم) ؛ // رسالة جزء محتوى البريد msg = new mimemessage (جلسة) ؛ msg.setsubject ("خطأ Seekews") ؛ StringBuilder builder = new StringBuilder () ؛ builder.append ("url =" + " + ' msg.setfrom (New InternetAddress ("** عنوان البريد الإلكتروني للمرسل **")) ؛ // إرسال نقل البريد الإلكتروني نقل النقل = session.getTransport () ؛ Transport.connect ("smtp.qq.com" ، "** عنوان البريد الإلكتروني للمرسل **" ، " العنوان ** ")}) ؛ transport.close () ؛لكنه خطأ
Debug SMTP: AUTH Login Command TRACE COMPURCEDDEBUG SMTP: فشل تسجيل الدخول في مؤشر الترابط "MAIN" javax.mail.AuthenticationFailedException: 530 خطأ: هناك حاجة إلى اتصال آمن (مثل SSL). مزيد من المعلومات في http://service.mail.qq.com/cgi-bin/help؟id=28
نظرًا لأن رمز العينة يستخدم 163 عنوان بريد إلكتروني ، والمؤلف هو عنوان بريد إلكتروني QQ ، فإن تحليل السجل يعني أن عنوان البريد الإلكتروني QQ يتطلب تشفير SSL.
قم بتشغيل تشفير SSL
لقد بحثت عبر الإنترنت ووجدت أن أشياء أخرى ، مثل 163. Sina Email لا تتطلب تشفير SSL ، بحيث يمكنك التخلي عن بريدك الإلكتروني QQ.
هناك أيضًا قول على الإنترنت بأن تغيير smtp.qq.com إلى smtp.exmail.qq.com لا يتطلب تشفير SSL ، لكن المؤلف لم ينجح في الركض. لذا أضف تشفير SSL بأمانة.
يتيح الرمز التالي تشفير SSL
mailsslsocketfactory sf = mailsslsocketfactory ()
بنجاح ، سجل إخراج وحدة التحكم والإجراءات على النحو التالي
Debug SMTP: useehlo true ، useauth truedebug smtp: محاولة الاتصال بمضيف "smtp.qq.com" ، المنفذ 465 ، ISSSL True220 smtp.qq.com esmtp qq mail serverdebug smtp: connected to host "smtp.qq.com" ، port: 465 ... data 2016-019 17:00:00 QUIT221 وداعا
مثال رمز كامل
الطبقة العامة mailtool {public static void main (string [] args) يلقي MessagingException ، GrelalSecurityException {properties props = new properties () ؛ // تمكين Debug Debugging Props.setProperty ("mail.debug" ، "true") ؛ // يتطلب خادم إرسال Props.SetProperty المصادقة ("mail.smtp.auth" ، "True") ؛ // قم بتعيين اسم مضيف Mail Server Props.setProperty ("mail.host" ، "smtp.qq.com") ؛ // إرسال اسم بروتوكول البريد props.setProperty ("mail.transport.protocol" ، "SMTP") ؛ mailsslsocketfactory sf = mailsslsocketfactory () جديد ؛ sf.setTrustAllhosts (صواب) ؛ props.put ("mail.smtp.ssl.enable" ، "true") ؛ props.put ("mail.smtp.ssl.socketfactory" ، sf) ؛ جلسة الجلسة = session.getInstance (الدعائم) ؛ رسالة msg = new mimemessage (جلسة) ؛ msg.setsubject ("خطأ SEENEWS") ؛ StringBuilder Builder = new StringBuilder () ؛ builder.append ("url =" + "http://blog.csdn.net/never_cxb/article/details/50524571") ؛ builder.append ("/n page crawler error") ؛ builder.append ("/n time" + timetool.getCurrentTime ()) ؛ msg.settext (builder.toString ()) ؛ msg.setfrom (New InternetAddress ("** عنوان البريد الإلكتروني للمرسل **")) ؛ النقل النقل = session.getTransport () ؛ Transport.connect ("smtp.qq.com" ، "** عنوان البريد الإلكتروني المرسل **" ، "** كلمة مرور البريد الإلكتروني أو رمز التفويض **") ؛ Transport.SendMessage (MSG ، عنوان جديد [] {new InternetAdDress ("** عنوان البريد الإلكتروني الخاص بالمستقبل **")}) ؛ transport.close () ؛ }}ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.