เมื่อเร็ว ๆ นี้โครงการกำลังทำงานเป็นตัวรวบรวมข้อมูลข่าว ฉันต้องการใช้ฟังก์ชั่นนี้: หลังจากตัวรวบรวมข้อมูลไม่สามารถส่ง URL ของหน้านี้ไปยังที่อยู่อีเมล แผนภาพเอฟเฟกต์สุดท้ายมีดังนี้ แท็กตัวกรองรหัสสถานะความล้มเหลว ฯลฯ สามารถเพิ่มได้ในภายหลังเพื่ออำนวยความสะดวกในการจำแนกประเภทและข้อยกเว้นการค้นหา
นักพัฒนาสามารถวิเคราะห์สาเหตุของความล้มเหลวของตัวรวบรวมข้อมูลตามข้อมูล URL และสแต็กในอีเมล
เปิดบริการ SMTP
การตั้งค่าในอีเมล QQ -> เปิดใช้งานบริการ SMTP ในบัญชีของคุณ
โปรดทราบว่าหลังจากเปิดอีเมล QQ จะสร้างรหัสการอนุญาต ใช้รหัสการอนุญาตนี้แทนรหัสผ่านอีเมลต้นฉบับเมื่อเชื่อมต่ออีเมลในรหัสเพื่อหลีกเลี่ยงการใช้รหัสผ่านข้อความธรรมดา
ฉันค้นหาตัวอย่างออนไลน์และตามบทความนี้ Java Mail (II): บทนำ Javamail และรหัสตัวอย่างสำหรับการส่งอีเมลง่าย ๆ
คุณสมบัติคุณสมบัติ = คุณสมบัติใหม่ (); // เปิดใช้งานการดีบักการดีบัก props.setProperty ("mail.debug", "true"); // เซิร์ฟเวอร์ส่งต้องใช้ props.setProperty ("mail.smtp.auth", "true"); ชื่อโปรโตคอลเมล props.setProperty ("mail.transport.protocol", "smtp"); เซสชัน = เซสชัน. getInstance (อุปกรณ์ประกอบฉาก); // ข้อความส่วนเนื้อหาจดหมายข้อความ msg = new mimeMessage (เซสชัน); msg.setsubject ("ข้อผิดพลาดที่เห็นได้"); StringBuilder Builder = new StringBuilder (); builder.Append ("url =" + " +" + " +" + " +" + " +" + " +" + " +" + " "http://blog.csdn.net/never_cxb/article/details/50524571"); msg.setFrom (InternetAddress ใหม่ ("** ที่อยู่อีเมลของผู้ส่ง **")); // ส่งการขนส่งทางอีเมลการขนส่ง = session.getTransport (); transport.connect ("smtp.qq.com", "** ที่อยู่อีเมลของผู้ส่ง **" ที่อยู่ ** ")}); transport.close ();แต่มันเป็นข้อผิดพลาด
DEBUG SMTP: Auth Login Command Trace SuppressedDebug SMTP: Auth Login FailedException ในเธรด "Main" Javax.mail.authenticationFaileDexception: 530 ข้อผิดพลาด: จำเป็นต้องมีการเชื่อมต่อที่ปลอดภัย (เช่น SSL) ข้อมูลเพิ่มเติมที่ http://service.mail.qq.com/cgi-bin/help?id=28
เนื่องจากรหัสตัวอย่างใช้ที่อยู่อีเมล 163 และผู้เขียนเป็นที่อยู่อีเมล QQ การวิเคราะห์บันทึกหมายความว่าที่อยู่อีเมล QQ ต้องมีการเข้ารหัส SSL
เปิดการเข้ารหัส SSL
ฉันค้นหาออนไลน์และพบว่าสิ่งอื่น ๆ เช่น 163 อีเมล SINA ไม่จำเป็นต้องมีการเข้ารหัส SSL ดังนั้นคุณสามารถยกเลิกอีเมล QQ ของคุณได้
นอกจากนี้ยังมีคำพูดบนอินเทอร์เน็ตว่าการเปลี่ยน smtp.qq.com เป็น smtp.exmail.qq.com ไม่จำเป็นต้องมีการเข้ารหัส SSL แต่ผู้เขียนไม่ประสบความสำเร็จในการทำงาน ดังนั้นเพิ่มการเข้ารหัส SSL อย่างตรงไปตรงมา
รหัสต่อไปนี้เปิดใช้งานการเข้ารหัส SSL
mailsslsocketFactory sf = new mailsslsocketFactory (); sf.setTrustAllHosts (จริง); props.put ("mail.smtp.ssl.enable", "true"); props.put ("mail.smtp.ssl.socketfactory", sf);สำเร็จบันทึกการส่งออกคอนโซลและการเรนเดอร์มีดังนี้
Debug SMTP: USEEHLO TRUE, USEAUTH TRUEBUG SMTP: พยายามเชื่อมต่อกับโฮสต์ "smtp.qq.com", พอร์ต 465, ISSSL TRUE220 SMTP.QQ.com ESMTP QQ Mail ServerDebug SMTP: เชื่อมต่อกับโฮสต์ เป็น quit221 ลาก่อน
ตัวอย่างรหัสกรอกข้อมูล
MailTool ชั้นเรียนสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น MessagingException, GeneralsecurityException {Properties Props = คุณสมบัติใหม่ (); // เปิดใช้งาน 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 = new mailsslsocketFactory (); SF.SetTrustAllHosts (จริง); props.put ("mail.smtp.ssl.enable", "true"); props.put ("mail.smtp.ssl.socketfactory", sf); เซสชัน = เซสชัน GetInstance (อุปกรณ์ประกอบฉาก); ข้อความ MSG = ใหม่ mimeMessage (เซสชัน); msg.setSubject ("ข้อผิดพลาดที่เห็น"); 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 (InternetAddress ใหม่ ("** ที่อยู่อีเมลของผู้ส่ง **")); Transport Transport = session.getTransport (); Transport.connect ("smtp.qq.com", "** ที่อยู่อีเมลของผู้ส่ง **", "** รหัสผ่านอีเมลหรือรหัสการอนุญาตของคุณ **"); Transport.sendMessage (ผงชูรสที่อยู่ใหม่ [] {ใหม่ InternetAddress ("** ที่อยู่อีเมลของผู้รับ **")}); Transport.close (); -ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของทุกคน