java發(fā)送郵件示例講解
本文實(shí)例講解了java發(fā)郵件的詳細(xì)過(guò)程,供大家參考,具體內(nèi)容如下
1、郵件協(xié)議
發(fā)郵件的:SMTP (Simple Mail Transport Protocal)
收郵件的協(xié)議:pop3 (Post Office Protocal 3)
IMAP 新協(xié)議 發(fā)郵件也可以收郵件。
(一步步的與服務(wù)器交互)
SMTP :
2、收發(fā)郵件的過(guò)程:
一般情況下,smtp和pop3是兩個(gè)服務(wù)器(主機(jī))。
Smtp郵件的端口為25。
POP3 端口 為110。
發(fā)郵件示例
1)、安裝foxmail:
2)、發(fā)郵件時(shí),要對(duì)用戶名和密碼進(jìn)行base64編碼
//對(duì)用戶名和密碼進(jìn)行base64編碼 @Test public void base64(){ String name = "wj_leaf12345"; String pwd = "1qaz2wsx"; BASE64Encoder en = new BASE64Encoder(); name = en.encode(name.getBytes()); pwd = en.encode(pwd.getBytes()); System.err.println(name); System.err.println(pwd); }
3)、通過(guò)java代碼發(fā)郵件
用java發(fā)郵件,必須要導(dǎo)入新的包
mail.jar – 發(fā)郵件的核心包
activation.jar – 對(duì)用戶和密碼加密.
在mail.jar中有三個(gè)核心類:
Javax.mail.Session – 是指與郵件服務(wù)器會(huì)話。整個(gè)項(xiàng)目中只要一個(gè)就可以了.
Javax.mail.Message(接口) —準(zhǔn)備發(fā)送數(shù)據(jù)信息。
MimeMessage - 可以設(shè)置類型的數(shù)據(jù)信息。
Transport – 它擁有一個(gè)方法可以發(fā)送Message。
第一步:導(dǎo)入兩個(gè)jar包
第二步:發(fā)簡(jiǎn)單的郵件
public void sendMail() throws Exception{ //第一步:聲明properties對(duì)象放信息 Properties prop = new Properties(); //設(shè)置連接哪一臺(tái)服務(wù)器 prop.setProperty("mail.host","smtp.126.com"); //設(shè)置是否驗(yàn)證 prop.setProperty("mail.smtp.auth", "true"); //第二步:聲明用戶名和密碼 Authenticator auth = new Authenticator() { //此訪求返回用戶和密碼的對(duì)象 public PasswordAuthentication getPasswordAuthentication() { PasswordAuthentication pa = new PasswordAuthentication("aaa", "sss"); return pa; } }; ////第二步:獲取Session對(duì)象 Session session = Session.getDefaultInstance(prop,auth); //設(shè)置session的調(diào)試模式 session.setDebug(true); //第三步:聲明信息 MimeMessage mm1 = new MimeMessage(session); //第四步:設(shè)置發(fā)件人email Address from = new InternetAddress("wj@126.com"); mm1.setFrom(from); //第五步:設(shè)置收件人 mm1.setRecipient(RecipientType.TO,new InternetAddress("wj@163.com")); mm1.setRecipient(RecipientType.CC, new InternetAddress("554@qq.com")); mm1.setRecipient(RecipientType.BCC, new InternetAddress("wj@ss.cn")); //第六步:設(shè)置主題 mm1.setSubject("這是用Java發(fā)的郵件3"); mm1.setContent("你好,這是用java發(fā)的郵件,3333再試一下", "text/plain;charset=UTF-8"); //第七步: Transport.send(mm1); }
第三步:v發(fā)帶有超連接的郵件
mm1.setSubject("這是用Java發(fā)的郵件sfasdf3"); mm1.setContent("你好,這是用java發(fā)的郵件,<a text/html;charset=UTF-8" ); //第七步: Transport.send(mm1);
第四步:符件的郵件
public void sendFile() throws Exception{ Properties p = new Properties(); p.setProperty("mail.host","smtp.163.com"); p.setProperty("mail.smtp.auth","true"); Session s = Session.getDefaultInstance(p,new Authenticator() { @Override public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("ww", "123"); } }); s.setDebug(true); //聲明MimeMessage MimeMessage msg = new MimeMessage(s); msg.setFrom(new InternetAddress("ww@163.com")); msg.setRecipient(RecipientType.TO, new InternetAddress("ww@126.com")); msg.setSubject("圖片的"); //第一步:聲明多處理的Part MimeMultipart mm = new MimeMultipart(); //第二步:聲明 MimeBodyPart body1 = new MimeBodyPart(); //第三步:設(shè)置符件 DataSource ds = new FileDataSource(new File("./img/a.jpg")); DataHandler dh = new DataHandler(ds); body1.setDataHandler(dh); //必須要設(shè)置名稱 body1.setFileName(MimeUtility.encodeText("美女.jpg")); MimeBodyPart body2 = new MimeBodyPart(); //第三步:設(shè)置符件 DataSource ds2 = new FileDataSource(new File("./img/b.jpg")); DataHandler dh2 = new DataHandler(ds2); body2.setDataHandler(dh2); //必須要設(shè)置名稱 body2.setFileName(MimeUtility.encodeText("美女2.jpg")); MimeBodyPart body3 = new MimeBodyPart(); //第三步:設(shè)置符件 DataSource ds3 = new FileDataSource(new File("./img/m.mp3")); DataHandler dh3 = new DataHandler(ds3); body3.setDataHandler(dh3); //必須要設(shè)置名稱 body3.setFileName(MimeUtility.encodeText("世紀(jì)末.mp3")); //將body1添加到mm mm.addBodyPart(body1); mm.addBodyPart(body2); mm.addBodyPart(body3); msg.setContent(mm); //發(fā)送 Transport.send(msg); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Java synchronized鎖升級(jí)jol過(guò)程詳解
這篇文章主要介紹了Java synchronized鎖升級(jí)jol過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04使用maven方式創(chuàng)建springboot項(xiàng)目的方式
使用Spring Initializr創(chuàng)建spring boot項(xiàng)目,因?yàn)橥饩W(wǎng)問(wèn)題導(dǎo)致很難成功,所以只能使用maven方式,這里介紹下使用maven方式創(chuàng)建springboot項(xiàng)目的方法,感興趣的朋友一起看看吧2022-09-09Java實(shí)現(xiàn)字符串倒序輸出的四種方法匯總
這篇文章主要介紹了Java實(shí)現(xiàn)字符串倒序輸出的四種方法匯總,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06初學(xué)者易上手的SSH-struts2 01環(huán)境搭建(圖文教程)
下面小編就為大家?guī)?lái)一篇初學(xué)者易上手的SSH-struts2 01環(huán)境搭建(圖文教程)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10第三方包jintellitype實(shí)現(xiàn)Java設(shè)置全局熱鍵
本文主要介紹了,在java中使用第三方插件包jintellitype來(lái)實(shí)現(xiàn)全局熱鍵,非常的簡(jiǎn)單,但是很實(shí)用,有需要的朋友可以參考下,歡迎一起來(lái)參與改進(jìn)此項(xiàng)目2014-09-09