ใช้ Javamail เพื่อส่งอีเมลแพ็คเกจ JAR ที่จำเป็น (โปรดดาวน์โหลดไฟล์ต้นฉบับของ Javamail หน้าดาวน์โหลดอย่างเป็นทางการ: http://www.oracle.com/technetwork/java/javamail/index-138643.html):
Mailapi.jar กำหนดอินเตอร์เฟส API ที่ใช้ในการส่งและรับอีเมล
smtp.jar มีชั้นเรียนที่ใช้ส่งอีเมล
POP3.JAR รวมชั้นเรียนที่ใช้เพื่อรับอีเมล
โปรโตคอลที่เราใช้ในการส่งอีเมลคือโปรโตคอล SMTP และโปรโตคอลที่เราใช้เพื่อรับอีเมลคือโปรโตคอล POP3 หรือเราเพิ่ม mail.jar โดยตรงไปยังโครงการซึ่งมีส่วนต่อประสานและคลาสทั้งหมดสำหรับการส่งและรับจดหมาย Java
คลาสที่ใช้กันทั่วไป:
ส่งอีเมล
ด้านล่างนี้ฉันจะแสดงรายการตัวอย่างการทดสอบขนาดเล็กที่ง่ายที่สุดในการส่งอีเมลใน Java:
นำเข้า java.util.properties; นำเข้า Javax.mail.address; นำเข้า Javax.mail.message; นำเข้า Javax.mail.messagingException; นำเข้า Javax.mail.session; นำเข้า Javax.mail.transport; นำเข้า javax.mail.internet.internetaddress; นำเข้า javax.mail.internet.mimemessage; /** * * qq (mail.qq.com): เซิร์ฟเวอร์ POP3 (พอร์ต 995) เซิร์ฟเวอร์ SMTP (พอร์ต 465 หรือ 587) * */ คลาสสาธารณะ demo1 {/ ** * @param args * @throws messagingException */ โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น messagingException {string sendusername = "[email protected]"; สตริง sendPassword = "pwd"; คุณสมบัติคุณสมบัติ = คุณสมบัติใหม่ (); Properties.SetProperty ("mail.smtp.auth", "true"); // เซิร์ฟเวอร์จำเป็นต้องตรวจสอบคุณสมบัติคุณสมบัติ SetProperty ("mail.transport.protocol", "smtp"); // ประกาศพอร์ตที่ใช้ส่งเซสชันอีเมล session.setDebug (จริง); // ตกลงที่จะพิมพ์ข้อมูลการสนทนาด้วยเซิร์ฟเวอร์บนคอนโซลของข้อความเธรดข้อความปัจจุบัน = mimemessage ใหม่ (เซสชัน); // สร้างข้อความที่ส่งข้อความ settext ("สวัสดีฉันเป็นแชมป์!"); // ข้อมูลเนื้อหา Transport.connect ("smtp.126.com", 25, sendusername, sendpassword); // เชื่อมต่อเซิร์ฟเวอร์ผู้ส่งการขนส่ง sendmessage (ข้อความ, ที่อยู่ใหม่ [] {new internetaddress ("[email protected]")}); // ยอมรับการขนส่งทางอีเมล -โดยทั่วไปเราใช้ Authenticator เพื่อห่อหุ้มชื่อผู้ใช้และรหัสผ่านซึ่งเป็นทึบแสง! ดังนั้น:
นำเข้า Javax.mail.authenticator; นำเข้า Javax.mail.message; นำเข้า Javax.mail.messagingException; นำเข้า javax.mail.passwordauthentication; นำเข้า Javax.mail.session; นำเข้า Javax.mail.transport; นำเข้า javax.mail.internet.address; นำเข้า javax.mail.internet.internetaddress; นำเข้า javax.mail.internet.mimemessage; นำเข้า junit.framework.testcase; /*** javamail ส่งอีเมล* @author Championship Wong* message.addrecipient (message.recipient ผู้รับที่อยู่ที่อยู่); ระบุบทบาทของผู้รับและผู้รับเมื่อส่งอีเมล* message.recipientType.to ผู้รับ* message.recipientType.cc cc นั่นคือคัดลอกหนึ่งไปยังบุคคลอื่นเมื่อส่งอีเมลโดยไม่ตอบกลับ! อย่างไรก็ตามผู้รับด้านบนสามารถดูว่าคุณคัดลอกใครไปยัง * message.recipientType.bcc ส่งอย่างลับ ๆ และจะส่งสำเนาไปยังบุคคลอื่นเมื่อส่งอีเมล อย่างไรก็ตามซึ่งแตกต่างจากข้างต้นผู้รับไม่สามารถเห็นว่าใครที่คุณมอบให้กับ * */ คลาสสาธารณะ Demo2 ขยาย testcase {สตริงสุดท้ายคงที่ส่วนตัว sendusername = "[email protected]"; // ชื่อผู้ใช้ของเซิร์ฟเวอร์ที่ต้องเชื่อมต่อกับอีเมล SENDPROTOCOL = "SMTP"; // พอร์ตที่ใช้ในการส่งสตริงสุดท้ายของจดหมายคงที่ sendHostAddress = "smtp.126.com"; // ที่อยู่ของเซิร์ฟเวอร์ที่ใช้ส่งการทดสอบโมฆะสาธารณะ Properties.SetProperty ("mail.smtp.auth", "true"); // เซิร์ฟเวอร์จำเป็นต้องตรวจสอบคุณสมบัติคุณสมบัติ SetProperty ("mail.transport.protocol", sendprotocol); // ประกาศพอร์ตที่ใช้ส่งอีเมล Session.getInstance (คุณสมบัติ, Authenticator ใหม่ () {PasswordAstionAuthEntication GetPasswordAuthentication () {ส่งคืนรหัสผ่านใหม่ (sendusername, sendPassword);}}); session.setDebug (จริง); // พิมพ์ข้อมูลเรียลไทม์เกี่ยวกับการส่งอีเมลในข้อความพื้นหลังข้อความ = mimeSessage ใหม่ (เซสชัน); Message.setFrom (InternetAddress ใหม่ ("[email protected]")); message.setsubject ("demo2javaCode ส่งการทดสอบอีเมลโดยใช้ Authenticator"); // ตั้งค่าข้อความหัวข้อการตรวจสอบ (message.recipientType.to, internetaddress .parse ("[email protected], [email protected]" .parse ("[email protected]")); // cc message. setContent ("<span style =" font-size: 20px; color: #ffccff "mce_style =" font-size: 20px; สี: #ffccff "> ถ้าคุณเห็น "ข้อความ/html; charset = gbk"); Transport.send (ข้อความ); // ส่งอีเมล}} เราส่งอีเมลที่ค่อนข้างซับซ้อนรวมถึงไฟล์แนบรูปภาพและข้อความ:
นำเข้า java.io.filenotfoundException; นำเข้า Java.io.FileOutputStream; นำเข้า java.io.ioException; นำเข้า Java.io.OutputStream; นำเข้า java.util.properties; นำเข้า Javax.activation.datahandler; นำเข้า Javax.activation.datasource; นำเข้า Javax.activation.filedatasource; นำเข้า Javax.mail.authenticator; นำเข้า Javax.mail.messagingException; นำเข้า javax.mail.passwordauthentication; นำเข้า Javax.mail.session; นำเข้า Javax.mail.transport; นำเข้า Javax.mail.message.recipientType; นำเข้า javax.mail.internet.internetaddress; นำเข้า javax.mail.internet.mimebodypart; นำเข้า javax.mail.internet.mimemessage; นำเข้า javax.mail.internet.mimemultipart; นำเข้า Javax.mail.internet.mimeutility; /** * * @author Administrator Mr Xp.wang * mimemultipart คอนเทนเนอร์ทั่วไปของอีเมลคือ Multipart ซึ่งกำหนดวิธีการเพิ่มและลบส่วนต่าง ๆ ของอีเมล * อย่างไรก็ตามมันเป็นคลาสที่เป็นนามธรรมและจำเป็นต้องใช้ mimeMultipart subclass สำหรับวัตถุ mimeMessage* mimebodypart เป็น subclass ของ bodypart ที่ใช้สำหรับ mimemessage โดยเฉพาะ วัตถุ mimebodypart แสดงถึง * ทุกส่วนของวัตถุ mimemultipart * mimeutility.encodetext (สตริง CN) ใช้เพื่อแก้ปัญหาของรหัสภาษาจีนที่อ่านไม่ออกในข้อมูลส่วนหัวในอีเมล * */ คลาสสาธารณะ Demo3_Test Properties.SetProperty ("mail.smtp.auth", "true"); // เซิร์ฟเวอร์จำเป็นต้องตรวจสอบคุณสมบัติคุณสมบัติ SetProperty ("mail.transport.protocol", "smtp"); Session.getInstance (คุณสมบัติ, Authenticator ใหม่ () {String sendusername = "[email protected]"; สตริง sendpassword = "pwd"; passwordauthentication ป้องกัน getpasswordauthentication () {ส่งคืนรหัสผ่านใหม่ (sendusername, sendpassword); session.setDebug (จริง); mimemessage msg = mimeMessage ใหม่ (เซสชั่น); // ประกาศตัวตนอีเมล msg.setfrom (ใหม่ InternetAddress ("/" "+mimeutility.encodetext (" Mr XP.Wang ")+"/"<[email protected]>")); msg.setsubject ("นี่เป็นอีเมลที่ซับซ้อนครั้งแรกของฉัน"); // ตั้งค่าอีเมลหัวเรื่อง msg.setRecipients (mimeMessage.recipientType.to, internetaddress.parse (mimeutility.encodetext (" xiangpan ")+" <[email protected]>, "+mimeutility.encodetext (" sanmao ")+" <[email protected]> "); mimemultipart msgmultipart = new mimemultipart ("mixed"); // ระบุความสัมพันธ์แบบผสมผสานของอีเมล, ความสัมพันธ์แบบผสม msg.setContent (msgmultipart); // ตั้งค่า body mimebodypart 1 = new mimebodypart () mimebodypart (); // ข้อความของอีเมล, ส่วนผสม (รูปภาพ + ข้อความ) // ตั้งค่าไฟล์แนบและข้อความลงในร่างกายอีเมลนี้ msgmultipart.addbodypart (Attch1); msgmultipart.addbodypart (Attch2); msgmultipart.addbodypart (เนื้อหา); // ตั้งค่า dataSource ไฟล์แนบครั้งแรก ds1 = ใหม่ filedataSource ("f: /accp5.0/file/ssh configuration.txt"); // ระบุแหล่งข้อมูลของไฟล์แนบ datahandler dh1 = ใหม่ datahandler (ds1); // ข้อมูลแนบ attch1.setfilename ("ssh.txt"); // ตั้งค่าข้อมูลแนบที่สอง DS2 = ใหม่ fileDataSource ("ทรัพยากร/48.jpg"); // ระบุแหล่งข้อมูลของไฟล์แนบ Datahandler DH2 = ใหม่ Datahandler (DS2); // ข้อมูลแนบไฟล์แนบ 2.SetDatahandler (DH2); // // ตั้งค่าข้อความของอีเมล mimeMultipart bodyMultipart = new mimemultipart ("เกี่ยวข้อง"); // เนื้อหาการพึ่งพา setContent (bodyMultipart); // ระบุ body mimebodypart htmlpart = new mimebodypart (); mimebodypart gifpart = new mimebodypart (); bodymultipart.addbodypart (htmlpart); bodymultipart.addbodypart (gifpart); DataSource GIFDS = New FileDataSource ("Resource/48.jpg"); // ตั้งค่ารูปภาพของข้อความ Datahandler gifdh = ใหม่ Datahandler (GIFDS); gifpart.setheader ("การจัดสรรเนื้อหา", "http://mimg.126.net/logo/126logo.gif"); gifpart.setDatahandler (gifdh); // ตั้งค่ารูปภาพของข้อความ htmlpart.setContent ("ฉันเพิ่งมาที่นี่เพื่อทำซอสถั่วเหลืองนี่คือภาพรูปภาพของฉัน! "text/html; charset = gbk"); // ตั้งค่าข้อความ msg.savechanges (); // บันทึกอีเมล // บันทึกอีเมลเป็นไฟล์ OutputStream ops = new FileOutputStream ("C: /users/administrator/desktop/test.eml"); msg.writeto (ops); ops.close (); Transport.send (MSG); - รับอีเมล
ตัวอย่าง: Rose รวบรวมอีเมลล่าสุด
นำเข้า java.util.date; นำเข้า java.util.properties; นำเข้า javax.mail.folder; นำเข้า Javax.mail.message นำเข้า Javax.mail.messagingException; นำเข้า Javax.mail.nosuchproviderexception; Main (String [] args) {String Protocol = "POP3"; บูลีน ISSSL = true; สตริงโฮสต์ = "pop.163.com"; พอร์ต int = 995; String username = "[email protected]"; สตริงรหัสผ่าน = "โรส"; คุณสมบัติอุปกรณ์ประกอบฉาก = คุณสมบัติใหม่ (); props.put ("mail.pop3.ssl.enable", isssl); props.put ("mail.pop3.host", โฮสต์); props.put ("mail.pop3.port", พอร์ต); เซสชัน session = session.getDefaultInstance (อุปกรณ์ประกอบฉาก); ร้านค้า = null; โฟลเดอร์โฟลเดอร์ = null; ลอง {store = session.getStore (โปรโตคอล); store.connect (ชื่อผู้ใช้รหัสผ่าน); โฟลเดอร์ = store.getFolder ("กล่องจดหมาย"); folder.open (folder.read_only); ขนาด int = folder.getMessageCount (); ข้อความข้อความ = folder.getMessage (ขนาด); สตริงจาก = message.getFrom () [0] .toString (); String subject = message.getSubject (); วันที่ = message.getSentDate (); System.out.println ("จาก:" + จาก); System.out.println ("หัวเรื่อง:" + หัวเรื่อง); System.out.println ("วันที่:" + วันที่); } catch (nosuchproviderexception e) {e.printstacktrace (); } catch (messagingException e) {e.printStackTrace (); } ในที่สุด {ลอง {if (โฟลเดอร์! = null) {folder.close (false); } if (store! = null) {store.close (); }} catch (messagingException e) {e.printStackTrace (); }} system.out.println ("ได้รับ!"); -