บทความนี้เป็นบทความที่สิบสองของซีรี่ส์ VHR พร้อมที่อยู่โครงการ https://github.com/lenve/vhr
การส่งอีเมลเป็นปัญหาทั่วไป แม้ว่ารหัสนั้นง่าย แต่เพื่อนหลายคนไม่เข้าใจกระบวนการที่ดีดังนั้นพวกเขายังคงวางแผนที่จะพูดคุยกับคุณเกี่ยวกับหัวข้อนี้
ข้อตกลงทางอีเมล
เรามักจะได้ยินโปรโตคอลอีเมลต่าง ๆ เช่น SMTP, POP3 และ IMAP แล้วฟังก์ชั่นของโปรโตคอลเหล่านี้คืออะไรและความแตกต่างคืออะไร? มาพูดคุยเรื่องนี้ก่อน
SMTP เป็นโปรโตคอลแอปพลิเคชันชั้นที่ใช้ TCP/IP สถานะของมันค่อนข้างคล้ายกับ HTTP หมายเลขพอร์ตเริ่มต้นของเซิร์ฟเวอร์ SMTP คือ 25 เมื่อเห็นสิ่งนี้เพื่อนอาจคิดว่าเนื่องจากโปรโตคอล SMTP นั้นใช้โปรโตคอลเลเยอร์แอปพลิเคชัน TCP/IP ฉันสามารถส่งอีเมลผ่านซ็อกเก็ตได้หรือไม่? คำตอบคือใช่
ในชีวิตเราต้องทำตามขั้นตอนต่อไปนี้:
1. Xiao Wang จากเซินเจิ้นส่งอีเมลไปที่ที่ทำการไปรษณีย์ในเซินเจิ้นเป็นครั้งแรก
2. ที่ทำการไปรษณีย์ในเซินเจิ้นจะส่งจดหมายไปที่ที่ทำการไปรษณีย์ในเซี่ยงไฮ้
3. Xiao Zhang จากเซี่ยงไฮ้มาที่ที่ทำการไปรษณีย์เพื่อรับจดหมาย
นี่คือกระบวนการส่งจดหมายในชีวิตที่ลดลงในชีวิต สามขั้นตอนเหล่านี้สามารถสอดคล้องกับกระบวนการส่งอีเมลของเราแยกกัน สมมติว่าอีเมลถูกส่งจาก [email protected] ถึง [email protected]:
[email protected] ส่งอีเมลไปยังเซิร์ฟเวอร์จดหมายของ Tencent
2. เซิร์ฟเวอร์เมลของ Tencent ส่งอีเมลของเราไปยังเซิร์ฟเวอร์เมลของ NetEase
[email protected] เข้าสู่ระบบเซิร์ฟเวอร์อีเมลของ NetEase เพื่อดูอีเมล
การส่งอีเมลเป็นกระบวนการนี้ประมาณซึ่งเกี่ยวข้องกับโปรโตคอลหลายอย่าง ลองมาดูกัน
ชื่อเต็มของโปรโตคอล SMTP เป็นโปรโตคอลการถ่ายโอนจดหมายอย่างง่ายซึ่งแปลว่าเป็นโปรโตคอลการถ่ายโอนจดหมายอย่างง่าย มันกำหนดกฎการสื่อสารระหว่างซอฟต์แวร์ไคลเอนต์เมลและเซิร์ฟเวอร์ SMTP และเซิร์ฟเวอร์ SMTP กล่าวอีกนัยหนึ่งกระบวนการส่งอีเมลไปยังเซิร์ฟเวอร์ SMTP ของ Tencent ใช้โปรโตคอล SMTP ก่อนจากนั้นเซิร์ฟเวอร์ SMTP ของ Tencent จะส่งอีเมลไปยังเซิร์ฟเวอร์ SMTP ของ NetEase ยังคงใช้โปรโตคอล SMTP ซึ่งใช้เพื่อรับอีเมล ชื่อเต็มของโปรโตคอล POP3 คือโปรโตคอลที่ทำการไปรษณีย์ซึ่งแปลว่าเป็นโปรโตคอลที่ทำการไปรษณีย์ มันกำหนดกฎการสื่อสารระหว่างไคลเอนต์เมลและเซิร์ฟเวอร์ POP3 ดังนั้นโปรโตคอลนี้จะใช้ในสถานการณ์ใด? เมื่ออีเมลมาถึงเซิร์ฟเวอร์ SMTP ของ NetEase ผู้ใช้ [email protected] จำเป็นต้องเข้าสู่ระบบเซิร์ฟเวอร์เพื่อดูอีเมล ในเวลานี้มีการใช้ข้อตกลง: ผู้ให้บริการอีเมลจะให้พื้นที่เก็บข้อมูลอีเมลพิเศษแก่ผู้ใช้แต่ละราย หลังจากเซิร์ฟเวอร์ SMTP ได้รับอีเมลจะบันทึกอีเมลไปยังพื้นที่เก็บข้อมูลอีเมลของผู้ใช้ที่เกี่ยวข้อง หากผู้ใช้ต้องการอ่านอีเมลจะต้องเสร็จสิ้นผ่านเซิร์ฟเวอร์อีเมล POP3 ของผู้ให้บริการอีเมล ในที่สุดเพื่อนบางคนอาจเคยได้ยินเกี่ยวกับโปรโตคอล IMAP ซึ่งเป็นส่วนขยายของโปรโตคอล POP3 ที่มีฟังก์ชั่นที่แข็งแกร่งและฟังก์ชั่นที่คล้ายกัน ฉันจะไม่ทำซ้ำที่นี่
เตรียมการส่งอีเมล QQ
ก่อนอื่นเราต้องเข้าสู่ระบบเว็บ QQ Email และคลิกปุ่มการตั้งค่าด้านบน:
จากนั้นคลิกแท็บบัญชี:
ค้นหาตัวเลือกเพื่อเปิดใช้งาน POP3/SMTP ในแท็บบัญชีดังต่อไปนี้:
คลิกเพื่อเปิดใช้งานฟังก์ชั่นที่เกี่ยวข้อง กระบวนการเปิดใช้งานต้องมีการตรวจสอบหมายเลขโทรศัพท์มือถือ เพียงทำตามขั้นตอนและอย่าทำอย่างละเอียด หลังจากเปิดใช้งานได้สำเร็จคุณสามารถรับรหัสการอนุญาตให้บันทึกหมายเลขและใช้งานได้สักพัก
จากนั้นเราต้องการแพ็คเกจ Javaxmail Jar เพื่อนสามารถดาวน์โหลดได้โดยตรงในคลังสินค้า Maven Central ฉันจะไม่ไปที่รายละเอียดต่อไปนี้ที่นี่
ส่ง
อีเมลง่ายๆ
หากเราส่งข้อความง่าย ๆ วิธีการส่งจะค่อนข้างง่าย กระบวนการทั้งหมดสามารถแบ่งออกเป็นสามขั้นตอนดังนี้:
ขั้นตอนที่ 1: สร้างสภาพแวดล้อมพื้นฐานของเซิร์ฟเวอร์ SMTP Mail
คุณสมบัติคุณสมบัติ = คุณสมบัติใหม่ (); Properties.SetProperty ("mail.host", "smtp.qq.com"); properties.setProperty ("mail.transport.protocol", "Smtp"); "true"); properties.setProperty ("mail.smtp.socketfactory.class", "javax.net.ssl.sslsocketFactory"); Properties.setProperty ("Mail.smtp.port.port", "465"); session.setDebug (จริง);ขั้นตอนที่ 2: สร้างอีเมล
mimemessage mimemessage = mimemessage ใหม่ (เซสชัน); mimemessage.addrecipients (message.recipienttype.to, "[email protected]"); // ตั้งค่าผู้รับ mimemessage.addrecipients mimemessage.setfrom ("[email protected]"); // อีเมลผู้ส่ง mimemessage.setsubject ("ทดสอบหัวเรื่องอีเมล"); // อีเมลหัวข้อ mimemessage.setContent ("สวัสดีนี่คืออีเมลทดสอบ", "ข้อความ/html; charset = utf-8");
ขั้นตอนที่ 3: ส่งอีเมล
Transport Transport = session.getTransport (); transport.connect ("smtp.qq.com", "[email protected]", "รหัสการอนุญาตเพิ่งใช้สำหรับ"); transport.sendmessage (mimemessage, mimemessage.getallrecipients (); // ส่งอีเมลอีเมลที่ซับซ้อน
เมื่อส่งอีเมลที่ซับซ้อนขั้นตอนแรกและสามจะเหมือนกัน เฉพาะขั้นตอนที่สองเท่านั้นที่มีปัญหาในการสร้างอีเมล จากนั้นให้ฉันสาธิตอีเมลที่ส่งรูปภาพและข้อความ + ไฟล์แนบสองไฟล์ ในการส่งอีเมลที่ซับซ้อนคุณต้องคุ้นเคยกับสามแนวคิดดังนี้:
1.MimeMessage: คลาสนี้เป็นข้อความอีเมลที่สามารถเข้าใจประเภท MIME และส่วนหัวได้
2.MimemUltipart: คลาสนี้กำหนดวิธีการเพิ่มลบและรับส่วนต่าง ๆ ของอีเมล
3.MimeBodyPart: วัตถุนี้แสดงถึงส่วนหนึ่งของเนื้อหาของวัตถุ mimemessage MimeBodyPart แต่ละตัวได้รับการพิจารณาว่ามีสองส่วน: ประเภท MIME และเนื้อหาที่ตรงกับประเภทนี้
กระบวนการสร้างอีเมลที่สมบูรณ์มีดังนี้ (ดูด้านบนสำหรับขั้นตอนแรกและขั้นตอนที่สาม):
mimemessage mimemessage = mimemessage ใหม่ (เซสชัน); mimemessage.addrecipients (message.recipienttype.to, "[email protected]"); // ตั้งค่าผู้รับ mimemessage.addrecipients mimemessage.setfrom ("[email protected]"); // อีเมลผู้ส่ง mimemessage.setsubject ("ทดสอบหัวข้ออีเมล"); // หัวข้ออีเมล mimemultipart mixed = new mimeMultipart ("ผสม"); mimebodypart (); // สร้างสิ่งที่แนบมา 1MimeBodyPart attach2 = new MimeBodyPart (); // สร้างไฟล์แนบ 2MimeBodypart เนื้อหา = ใหม่ mimebodypart (); // สร้างร่างกายอีเมลผสม Addbodypart (แนบ 1); // เพิ่มสิ่งที่แนบมา Mixed.addbodypart (เนื้อหา); // เพิ่มร่างกายลงในข้อความที่ส่งข้อความ FDS1 = ใหม่ fileDataSource (ไฟล์ใหม่ ("c: //users//sang//desktop//1.png"); // สร้างแหล่งข้อมูล Attach1.SetDatahandler (DH1); // ตั้งค่าแหล่งข้อมูลของไฟล์แนบ 1 Attached1.SetFilename ("1.PNG"); // ตั้งชื่อไฟล์ของไฟล์แนบ 1 // การดำเนินการของไฟล์แนบ 2 คล้ายกับสิ่งที่แนบมา 1 ดังนั้นเราจะไม่แสดงความคิดเห็นแต่ละอันที่นี่ FileDataSource fds2 = ใหม่ filedataSource (ไฟล์ใหม่ ("c: // ผู้ใช้ // sang // เดสก์ท็อป // บล็อก note.xlsx")); datahandler dh2 = ใหม่ datahandler (fds2); attach2.setDatahandler (dh2); การตั้งค่าชื่อไฟล์หากมีภาษาจีนคุณสามารถเข้ารหัสผ่านวิธี encodeText ในคลาส mimeutility เพื่อหลีกเลี่ยง miMemuLtipart bodymimemuLtipart = mimemultipart ใหม่ ("เกี่ยวข้อง"); // ตั้งค่าร่างกายของร่างกาย mimebodypart (); // html ส่วนหนึ่งของ bodypart.setContent ("<h1> สวัสดีทุกคนนี่คืออีเมลทดสอบ <img src = 'cid: 2.png' // </h1>", "text/html; charset = utf-8"); ใหม่ DataHandler (FiledataSource ใหม่ ("C: //users//sang//desktop//2.png")); picpart.setDatahandler (Datahandler); picpart.setContentId ("2.png"); // เพิ่ม html และส่วนภาพของร่างกายลงใน bodymimemuretipart.addbodypart (bodypart); BodyMimemUltipart.addbodypart (picpart); mimemessage.savechanges ();
ตกลงมันเป็นเรื่องง่ายที่จะส่งอีเมล QQ ทางไปรษณีย์ Java สำหรับสิ่งอื่น ๆ เช่น 163, Sina, ฯลฯ สไตล์การเขียนนั้นคล้ายกันฉันจะไม่อธิบายรายละเอียดที่นี่
สรุป
ข้างต้นคือรหัสการใช้งานของฟังก์ชั่นอีเมล QQ ใน Springboot แนะนำให้คุณรู้จักโดย Editor ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!