ฉันเรียนรู้เกี่ยวกับ Javamail วันนี้ เพื่อความสะดวกในการใช้งานในอนาคตฉันเขียนโค้ดด้วยตัวเองและพิมพ์ลงในแพ็คเกจ Jar เพื่อความสะดวกในการใช้งานในอนาคต ฮิฮิ
รหัสสามตัวต่อไปนี้เป็นรหัสทั้งหมดของฉัน เพราะฉันไม่รู้วิธีอัปโหลดแพ็คเกจ Jar ไปยัง Javaeye เพื่อน ๆ กลับไปทำด้วยตัวเอง
รหัสของฉันมีสามคลาส:
ชั้นหนึ่ง: mailsenderinfo.java
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.util.mail;
-
* ข้อมูลพื้นฐานที่จำเป็นในการส่งอีเมล
-
นำเข้า java.util.properties;
MailSenderInfo ชั้นเรียนสาธารณะ {
// IP และพอร์ตของเซิร์ฟเวอร์ที่ส่งจดหมาย
MailServerHost ส่วนตัว;
MailServerPort ส่วนตัว = "25";
// ที่อยู่ของผู้ส่งอีเมล
สตริงส่วนตัวจากที่อยู่
// ที่อยู่ของผู้รับอีเมล
สตริงส่วนตัว Toaddress;
// เข้าสู่ระบบชื่อผู้ใช้และรหัสผ่านของเซิร์ฟเวอร์ส่งอีเมล
ชื่อผู้ใช้สตริงส่วนตัว;
รหัสผ่านสตริงส่วนตัว
// เป็นสิ่งที่ต้องรับรองความถูกต้อง
บูลีนส่วนตัวตรวจสอบความถูกต้อง = false;
// อีเมลเรื่อง
หัวข้อสตริงส่วนตัว
// เนื้อหาข้อความของอีเมล
เนื้อหาสตริงส่วนตัว
// ชื่อไฟล์ของไฟล์แนบอีเมล
สตริงส่วนตัว [] attachfilenames;
-
* รับแอตทริบิวต์เซสชันอีเมล
-
คุณสมบัติสาธารณะ getProperties () {
คุณสมบัติ p = คุณสมบัติใหม่ ();
p.put ("mail.smtp.host", this.mailserverhost);
p.put ("mail.smtp.port", this.mailserverport);
p.put ("mail.smtp.auth", ตรวจสอบ? "true": "false");
กลับ P;
-
สตริงสาธารณะ getMailServerHost () {
ส่งคืน MailServerHost;
-
โมฆะสาธารณะ SetMailServerHost (String MailServerHost) {
this.mailServerHost = MailServerHost;
-
สตริงสาธารณะ getMailServerPort () {
ส่งคืน MailServerPort;
-
โมฆะสาธารณะ SetMailServerPort (สตริง MailServerPort) {
this.mailserverport = mailserverport;
-
บูลีนสาธารณะ isValidate () {
การตรวจสอบความถูกต้องกลับ;
-
โมฆะสาธารณะ setValidate (การตรวจสอบบูลีน) {
this.validate = ตรวจสอบ;
-
สตริงสาธารณะ [] getattachfilenames () {
return attachfilenames;
-
โมฆะสาธารณะ setattachfilenames (String [] ชื่อไฟล์) {
this.attachfilenames = ชื่อไฟล์;
-
สตริงสาธารณะ getFromaddress () {
กลับมาจากที่พัก;
-
โมฆะสาธารณะ setFromAddress (สตริงจาก Adaddress) {
this.fromaddress = fromaddress;
-
สตริงสาธารณะ getPassword () {
ส่งคืนรหัสผ่าน;
-
โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {
this.password = รหัสผ่าน;
-
สตริงสาธารณะ getToaddress () {
กลับมา Toaddress;
-
โมฆะสาธารณะ setToaddress (String toaddress) {
this.toaddress = toaddress;
-
สตริงสาธารณะ getUserName () {
คืนชื่อผู้ใช้;
-
โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {
this.username = ชื่อผู้ใช้;
-
สตริงสาธารณะ getSubject () {
เรื่องกลับ;
-
โมฆะสาธารณะ setSubject (หัวเรื่องสตริง) {
this.subject = เรื่อง;
-
สตริงสาธารณะ getContent () {
ส่งคืนเนื้อหา;
-
โมฆะสาธารณะ setContent (String textContent) {
this.content = textContent;
-
-
ชั้นสอง: simplemailsender.java
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.util.mail;
นำเข้า java.util.date;
นำเข้า java.util.properties;
นำเข้า Javax.mail.address;
นำเข้า Javax.mail.bodypart;
นำเข้า Javax.mail.message;
นำเข้า Javax.mail.messagingException;
นำเข้า Javax.mail.multipart;
นำเข้า Javax.mail.session;
นำเข้า Javax.mail.transport;
นำเข้า javax.mail.internet.internetaddress;
นำเข้า javax.mail.internet.mimebodypart;
นำเข้า javax.mail.internet.mimemessage;
นำเข้า javax.mail.internet.mimemultipart;
-
* จดหมายง่าย ๆ (จดหมายที่ไม่มีไฟล์แนบ) ผู้ส่ง
-
คลาสสาธารณะ SimpleMailsender {
-
* ส่งอีเมลในรูปแบบข้อความ
* @Param MailInfo ข้อมูลเกี่ยวกับอีเมลที่จะส่ง
-
Public Boolean SendTextMail (MailSenderInfo MailInfo) {
// พิจารณาว่าจำเป็นต้องมีการรับรองความถูกต้องของตัวตน
MyAuthenticator Authenticator = null;
Properties Pro = MailInfo.getProperties ();
if (mailinfo.isvalidate ()) {
// หากจำเป็นต้องมีการรับรองความถูกต้องของตัวตนให้สร้าง Authenticator รหัสผ่าน
Authenticator = ใหม่ myauthenticator (mailinfo.getUserName (), mailInfo.getPassword ());
-
// สร้างเซสชันเพื่อส่งอีเมลตามคุณสมบัติเซสชันอีเมลและตัวตรวจสอบรหัสผ่าน
เซสชัน sendmailsession = session.getDefaultInstance (Pro, Authenticator);
พยายาม {
// สร้างข้อความจดหมายตามเซสชัน
ข้อความ mailMessage = mimeMessage ใหม่ (SendMailSession);
// สร้างที่อยู่ผู้ส่งอีเมล
ที่อยู่จาก = new InternetAddress (MailInfo.getFromAddress ());
// ตั้งค่าผู้ส่งข้อความอีเมล
MailMessage.SetFrom (จาก);
// สร้างที่อยู่ผู้รับอีเมลและตั้งค่าเป็นข้อความอีเมล
ที่อยู่เป็น = new InternetAddress (MailInfo.getToaddress ());
mailMessage.SetRecipient (message.recipientType.to, ถึง);
// ตั้งค่าหัวข้อของข้อความอีเมล
MailMessage.SetSubject (MailInfo.getSubject ());
// ตั้งเวลาสำหรับการส่งข้อความอีเมล
MailMessage.SetSentDate (วันที่ใหม่ ());
// ตั้งค่าเนื้อหาหลักของข้อความอีเมล
String MailContent = MailInfo.getContent ();
MailMessage.Settext (MailContent);
// ส่งจดหมาย
Transport.Send (MailMessage);
กลับมาจริง;
} catch (messagingException ex) {
Ex.PrintStackTrace ();
-
กลับเท็จ;
-
-
* ส่งอีเมลในรูปแบบ HTML
* @Param MailInfo Mail ที่จะส่ง
-
Public Static Boolean Sendhtmlmail (MailsenderInfo MailInfo) {
// พิจารณาว่าจำเป็นต้องมีการรับรองความถูกต้องของตัวตน
MyAuthenticator Authenticator = null;
Properties Pro = MailInfo.getProperties ();
// หากจำเป็นต้องมีการรับรองความถูกต้องของตัวตนให้สร้าง Authenticator รหัสผ่าน
if (mailinfo.isvalidate ()) {
Authenticator = ใหม่ myauthenticator (mailinfo.getUserName (), mailInfo.getPassword ());
-
// สร้างเซสชันเพื่อส่งอีเมลตามคุณสมบัติเซสชันอีเมลและตัวตรวจสอบรหัสผ่าน
เซสชัน sendmailsession = session.getDefaultInstance (Pro, Authenticator);
พยายาม {
// สร้างข้อความจดหมายตามเซสชัน
ข้อความ mailMessage = mimeMessage ใหม่ (SendMailSession);
// สร้างที่อยู่ผู้ส่งอีเมล
ที่อยู่จาก = new InternetAddress (MailInfo.getFromAddress ());
// ตั้งค่าผู้ส่งข้อความอีเมล
MailMessage.SetFrom (จาก);
// สร้างที่อยู่ผู้รับอีเมลและตั้งค่าเป็นข้อความอีเมล
ที่อยู่เป็น = new InternetAddress (MailInfo.getToaddress ());
// message.recipientType.to แอตทริบิวต์ระบุว่าประเภทของผู้รับคือ
mailMessage.SetRecipient (message.recipientType.to, ถึง);
// ตั้งค่าหัวข้อของข้อความอีเมล
MailMessage.SetSubject (MailInfo.getSubject ());
// ตั้งเวลาสำหรับการส่งข้อความอีเมล
MailMessage.SetSentDate (วันที่ใหม่ ());
// minimultipart class เป็นคลาสคอนเทนเนอร์ที่มีวัตถุประเภท mimebodypart ประเภท
multipart mainPart = new MIMEMULTIPART ();
// สร้าง mimebodypart ที่มีเนื้อหา HTML
bodypart html = new mimebodypart ();
// ตั้งค่าเนื้อหา HTML
html.setContent (mailInfo.getContent (), "text/html; charset = utf-8");
MainPart.AddbodyPart (HTML);
// ตั้งค่าวัตถุ minimultipart เป็นเนื้อหาจดหมาย
MailMessage.SetContent (MainPart);
// ส่งจดหมาย
Transport.Send (MailMessage);
กลับมาจริง;
} catch (messagingException ex) {
Ex.PrintStackTrace ();
-
กลับเท็จ;
-
-
หมวดที่สาม: myauthenticator.java
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.util.mail;
นำเข้า Javax.mail.*;
Myauthenticator ชั้นเรียนสาธารณะขยาย Authenticator {
String username = null;
สตริงรหัสผ่าน = null;
สาธารณะ myauthenticator () {
-
สาธารณะ myauthenticator (ชื่อผู้ใช้สตริงรหัสผ่านสตริง) {
this.username = ชื่อผู้ใช้;
this.password = รหัสผ่าน;
-
รหัสผ่านที่ได้รับการป้องกันการกำหนดค่า getPasswordauthentication () {
ส่งคืนรหัสผ่านใหม่ (ชื่อผู้ใช้รหัสผ่าน);
-
-
ต่อไปนี้เป็นรหัสโดยใช้สามคลาสข้างต้น:
การคัดลอกรหัสมีดังนี้:
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
// คลาสนี้ส่วนใหญ่ตั้งค่าอีเมล
MailsenderInfo MailInfo = new MailsenderInfo ();
MailInfo.SetMailServerHost ("smtp.163.com");
MailInfo.SetMailServerport ("25");
MailInfo.SetValidate (จริง);
mailinfo.setUsername ("[email protected]");
MailInfo.SetPassword ("*********"); // รหัสผ่านอีเมลของคุณ
MailInfo.SetFromaddress ("[email protected]");
mailinfo.settoaddress ("[email protected]");
MailInfo.SetSubject ("ตั้งชื่อกล่องจดหมาย");
MailInfo.SetContent ("ตั้งค่าเนื้อหากล่องจดหมาย");
// ชั้นนี้ส่วนใหญ่ส่งอีเมล
SimpleMailSender SMS = New SimpleMailSender ();
sms.sendtextmail (mailinfo); // ส่งรูปแบบข้อความ
sms.sendhtmlmail (mailinfo); // ส่งรูปแบบ html
-
สุดท้ายให้ฉันให้ความสนใจกับคุณ:
1. การใช้รหัสนี้คุณสามารถทำฟังก์ชั่นการส่งอีเมลของ Javamail ของคุณให้เสร็จสมบูรณ์ ทั้งสามหมวดหมู่นั้นขาดไม่ได้
2. ฉันใช้แพ็คเกจ com.util.mail เพื่อจัดแพ็คเกจสามคลาสนี้
3. อย่าใช้ที่อยู่อีเมลที่คุณเพิ่งลงทะเบียนเพื่อส่งอีเมลในโปรแกรม เพราะคุณไม่สามารถส่งออกได้ ที่อยู่อีเมลที่คุณเพิ่งลงทะเบียนจะไม่ให้สิทธิ์ดังกล่าวซึ่งหมายความว่าคุณไม่สามารถผ่านการตรวจสอบได้ คุณต้องใช้ที่อยู่อีเมลที่คุณใช้บ่อยและใช้เวลานาน
4. ปัญหาอื่นคือสองประโยคของ MailInfo.SetMailServerHost ("smtp.163.com") และ mailinfo.setfromaddress ("[email protected]"); นั่นคือถ้าคุณใช้เซิร์ฟเวอร์ 163SMTP คุณต้องใช้ที่อยู่อีเมล 163 เพื่อส่งที่อยู่อีเมล
5. มีคำอธิบายมากมายบนอินเทอร์เน็ตเกี่ยวกับข้อผิดพลาดในการตรวจสอบ Javamail แต่ฉันเห็นเพียงข้อเดียว มันเป็นหมวดหมู่ที่สามของฉัน ตราบใดที่คุณคัดลอกรหัสทั้งหมดฉันคิดว่าจะไม่มีปัญหา