日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

JavaWeb-JavaMail邮件开发

發(fā)布時(shí)間:2025/4/16 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb-JavaMail邮件开发 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Email的歷史比Web還要久遠(yuǎn),直到現(xiàn)在,Email也是互聯(lián)網(wǎng)上應(yīng)用非常廣泛的服務(wù)。

幾乎所有的編程語(yǔ)言都支持發(fā)送和接收電子郵件,但是,先等等,在我們開始編寫代碼之前,有必要搞清楚電子郵件是如何在互聯(lián)網(wǎng)上運(yùn)作的。

我們來(lái)看看傳統(tǒng)郵件是如何運(yùn)作的。假設(shè)你現(xiàn)在在北京,要給一個(gè)香港的朋友發(fā)一封信,怎么做呢?

首先你得寫好信,裝進(jìn)信封,寫上地址,貼上郵票,然后就近找個(gè)郵局,把信仍進(jìn)去。

信件會(huì)從就近的小郵局轉(zhuǎn)運(yùn)到大郵局,再?gòu)拇筻]局往別的城市發(fā),比如先發(fā)到天津,再走海運(yùn)到達(dá)香港,也可能走京九線到香港,但是你不用關(guān)心具體路線,你只需要知道一件事,就是信件走得很慢,至少要幾天時(shí)間。

信件到達(dá)香港的某個(gè)郵局,也不會(huì)直接送到朋友的家里,因?yàn)猷]局的叔叔是很聰明的,他怕你的朋友不在家,一趟一趟地白跑,所以,信件會(huì)投遞到你的朋友的郵箱里,郵箱可能在公寓的一層,或者家門口,直到你的朋友回家的時(shí)候檢查郵箱,發(fā)現(xiàn)信件后,就可以取到郵件了。

電子郵件的流程基本上也是按上面的方式運(yùn)作的,只不過速度不是按天算,而是按秒算。

現(xiàn)在我們回到電子郵件,假設(shè)我們自己的電子郵件地址是me@163.com,對(duì)方的電子郵件地址是friend@sina.com(注意地址都是虛構(gòu)的哈),現(xiàn)在我們用Outlook或者Foxmail之類的軟件寫好郵件,填上對(duì)方的Email地址,點(diǎn)“發(fā)送”,電子郵件就發(fā)出去了。這些電子郵件軟件被稱為MUA:Mail User Agent——郵件用戶代理。

Email從MUA發(fā)出去,不是直接到達(dá)對(duì)方電腦,而是發(fā)到MTA:Mail Transfer Agent——郵件傳輸代理,就是那些Email服務(wù)提供商,比如網(wǎng)易、新浪等等。由于我們自己的電子郵件是163.com,所以,Email首先被投遞到網(wǎng)易提供的MTA,再由網(wǎng)易的MTA發(fā)到對(duì)方服務(wù)商,也就是新浪的MTA。這個(gè)過程中間可能還會(huì)經(jīng)過別的MTA,但是我們不關(guān)心具體路線,我們只關(guān)心速度。

Email到達(dá)新浪的MTA后,由于對(duì)方使用的是@sina.com的郵箱,因此,新浪的MTA會(huì)把Email投遞到郵件的最終目的地MDA:Mail Delivery Agent——郵件投遞代理。Email到達(dá)MDA后,就靜靜地躺在新浪的某個(gè)服務(wù)器上,存放在某個(gè)文件或特殊的數(shù)據(jù)庫(kù)里,我們將這個(gè)長(zhǎng)期保存郵件的地方稱之為電子郵箱。

同普通郵件類似,Email不會(huì)直接到達(dá)對(duì)方的電腦,因?yàn)閷?duì)方電腦不一定開機(jī),開機(jī)也不一定聯(lián)網(wǎng)。對(duì)方要取到郵件,必須通過MUA從MDA上把郵件取到自己的電腦上。

所以,一封電子郵件的旅程就是:

發(fā)件人 -> MUA -> MTA -> MTA -> 若干個(gè)MTA -> MDA <- MUA <- 收件人

有了上述基本概念,要編寫程序來(lái)發(fā)送和接收郵件,本質(zhì)上就是:

  • 編寫MUA把郵件發(fā)到MTA;
  • 編寫MUA從MDA上收郵件。
  • 發(fā)郵件時(shí),MUA和MTA使用的協(xié)議就是SMTP:Simple Mail Transfer Protocol,后面的MTA到另一個(gè)MTA也是用SMTP協(xié)議。

    收郵件時(shí),MUA和MDA使用的協(xié)議有兩種:POP:Post Office Protocol,目前版本是3,俗稱POP3;IMAP:Internet Message Access Protocol,目前版本是4,優(yōu)點(diǎn)是不但能取郵件,還可以直接操作MDA上存儲(chǔ)的郵件,比如從收件箱移到垃圾箱,等等。

    郵件客戶端軟件在發(fā)郵件時(shí),會(huì)讓你先配置SMTP服務(wù)器,也就是你要發(fā)到哪個(gè)MTA上。假設(shè)你正在使用163的郵箱,你就不能直接發(fā)到新浪的MTA上,因?yàn)樗环?wù)新浪的用戶,所以,你得填163提供的SMTP服務(wù)器地址:smtp.163.com,為了證明你是163的用戶,SMTP服務(wù)器還要求你填寫郵箱地址和郵箱口令,這樣,MUA才能正常地把Email通過SMTP協(xié)議發(fā)送到MTA。

    類似的,從MDA收郵件時(shí),MDA服務(wù)器也要求驗(yàn)證你的郵箱口令,確保不會(huì)有人冒充你收取你的郵件,所以,Outlook之類的郵件客戶端會(huì)要求你填寫POP3或IMAP服務(wù)器地址、郵箱地址和口令,這樣,MUA才能順利地通過POP或IMAP協(xié)議從MDA取到郵件。

    在收發(fā)郵件前,請(qǐng)先準(zhǔn)備好至少兩個(gè)電子郵件,如xxx@163.com,xxx@sina.com,xxx@qq.com等,注意兩個(gè)郵箱不要用同一家郵件服務(wù)商。

    1. 郵件協(xié)議

    1.1 收發(fā)郵件

    發(fā)郵件大家都會(huì)吧!發(fā)郵件是從客戶端把郵件發(fā)送到郵件服務(wù)器,收郵件是把郵件服務(wù)器的郵件下載到客戶端。

    我們?cè)?63、126、QQ、sohu、sina等網(wǎng)站注冊(cè)的Email賬戶,其實(shí)就是在郵件服務(wù)器中注冊(cè)的。這些網(wǎng)站都有自己的郵件服務(wù)器。

    1.2 郵件協(xié)議概述

    與HTTP協(xié)議相同,收發(fā)郵件也是需要有傳輸協(xié)議的。

    • SMTP:(Simple Mail Transfer Protocol,簡(jiǎn)單郵件傳輸協(xié)議)發(fā)郵件協(xié)議;
    • POP3:(Post Office Protocol Version 3,郵局協(xié)議第3版)收郵件協(xié)議;
    • IMAP:(Internet Message Access Protocol,因特網(wǎng)消息訪問協(xié)議)收發(fā)郵件協(xié)議,我們的課程不涉及該協(xié)議。

    1.3 理解郵件收發(fā)過程

    其實(shí)你可以把郵件服務(wù)器理解為郵局!如果你需要給朋友寄一封信,那么你需要把信放到郵筒中,這樣你的信會(huì)“自動(dòng)”到達(dá)郵局,郵局會(huì)把信郵到另一個(gè)省市的郵局中。然后這封信會(huì)被送到收信人的郵箱中。最終收信人需要自己經(jīng)常查看郵箱是否有新的信件。

    其實(shí)每個(gè)郵件服務(wù)器都由SMTP服務(wù)器和POP3服務(wù)器構(gòu)成,其中SMTP服務(wù)器負(fù)責(zé)發(fā)郵件的請(qǐng)求,而POP3負(fù)責(zé)收郵件的請(qǐng)求。

    當(dāng)然,有時(shí)我們也會(huì)使用163的賬號(hào),向126的賬號(hào)發(fā)送郵件。這時(shí)郵件是發(fā)送到126的郵件服務(wù)器,而對(duì)于163的郵件服務(wù)器是不會(huì)存儲(chǔ)這封郵件的。

    1.4 郵件服務(wù)器名稱

    smtp服務(wù)器的端口號(hào)為25,服務(wù)器名稱為smtp.xxx.xxx。
    pop3服務(wù)器的端口號(hào)為110,服務(wù)器名稱為pop3.xxx.xxx。

    例如:

    • 163:smtp.163.com和pop3.163.com;
    • 126:smtp.126.com和pop3.126.com;
    • qq:smtp.qq.com和pop3.qq.com;
    • sohu:smtp.sohu.com和pop3.sohu.com;
    • sina:smtp.sina.com和pop3.sina.com。

    2. Telnet收發(fā)郵件

    Telnet協(xié)議是TCP/IP協(xié)議族中的一員,是Internet遠(yuǎn)程登陸服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式。它為用戶提供了在本地計(jì)算機(jī)上完成遠(yuǎn)程主機(jī)工作的能力。在終端使用者的電腦上使用telnet程序,用它連接到服務(wù)器。終端使用者可以在telnet程序中輸入命令,這些命令會(huì)在服務(wù)器上運(yùn)行,就像直接在服務(wù)器的控制臺(tái)上輸入一樣。可以在本地就能控制服務(wù)器。要開始一個(gè)telnet會(huì)話,必須輸入用戶名和密碼來(lái)登錄服務(wù)器。Telnet是常用的遠(yuǎn)程控制Web服務(wù)器的方法

    2.1 BASE64加密

    BASE64是一種加密算法,這種加密方式是可逆的!它的作用是使加密后的文本無(wú)法用肉眼識(shí)別。Java提供了sun.misc.BASE64Encoder這個(gè)類,用來(lái)對(duì)做Base64的加密和解密,但我們知道,使用sun包下的東西會(huì)有警告!甚至在eclipse中根本使用不了這個(gè)類(需要設(shè)置),所以我們還是聽sun公司的話,不要去使用它內(nèi)部使用的類,我們?nèi)ナ褂胊pache commons組件中的codec包下的Base64這個(gè)類來(lái)完成BASE64加密和解密。

    package cn.itcast; import org.apache.commons.codec.binary.Base64;public class Base64Utils {public static String encode(String s) {return encode(s, "utf-8");}public static String decode(String s) {return decode(s, "utf-8");}public static String encode(String s, String charset) {try {byte[] bytes = s.getBytes(charset);bytes = Base64.encodeBase64(bytes);return new String(bytes, charset);} catch (Exception e) {throw new RuntimeException(e);}}public static String decode(String s, String charset) {try {byte[] bytes = s.getBytes(charset);bytes = Base64.decodeBase64(bytes);return new String(bytes, charset);} catch (Exception e) {throw new RuntimeException(e);}} }

    2.2 telnet發(fā)郵件

    Xshell是一個(gè)強(qiáng)大的安全終端模擬軟件,它支持SSH1, SSH2, 以及Microsoft Windows 平臺(tái)的TELNET 協(xié)議。Xshell 通過互聯(lián)網(wǎng)到遠(yuǎn)程主機(jī)的安全連接以及它創(chuàng)新性的設(shè)計(jì)和特色幫助用戶在復(fù)雜的網(wǎng)絡(luò)環(huán)境中享受他們的工作

    Xshell可以在Windows界面下用來(lái)訪問遠(yuǎn)端不同系統(tǒng)下的服務(wù)器,從而比較好的達(dá)到遠(yuǎn)程控制終端的目的。

    連接163的smtp服務(wù)器

    連接成功后需要如下步驟才能發(fā)送郵件:

    (1)、與服務(wù)器打招呼:ehlo你的名字

    (2)、發(fā)出登錄請(qǐng)求:auth login

    (3)、輸入加密后的郵箱名:(itcast_cxf@163.com)aXRjYXN0X2N4ZkAxNjMuY29t

    (4)、輸入加密后的郵箱密碼:(itcast)aXRjYXN0

    (5)、輸入誰(shuí)來(lái)發(fā)送郵件,即from:mail from:itcast_cxf@163.com

    (6)、輸入把郵件發(fā)給誰(shuí),即to:rcpt to:itcast_cxf@126.com

    (7)、發(fā)送填寫數(shù)據(jù)請(qǐng)求:data

    (8)、開始輸入數(shù)據(jù),數(shù)據(jù)包含:from、to、subject,以及郵件內(nèi)容,如果輸入結(jié)束后,以一個(gè)“.”為一行,表示輸入結(jié)束:

    from:<zhangBoZhi@163.com> to:<itcast_cxf@sina.com> subject: 我愛上你了我已經(jīng)深深的愛上你了,我是張柏芝。 .

    注意,在標(biāo)題和郵件正文之間要有一個(gè)空行!當(dāng)要退出時(shí),一定要以一個(gè)“.”為單行,表示輸入結(jié)束。

    (9)、最后一步:quit

    3. telnet收郵件

    3.1 telnet收郵件的步驟

    pop3無(wú)需使用Base64加密

    收郵件連接的服務(wù)器是pop3.xxx.com,pop3協(xié)議的默認(rèn)端口號(hào)是110。請(qǐng)注意!這與發(fā)郵件完全不同。如果你在163有郵箱賬戶,那么你想使用telnet收郵件,需要連接的服務(wù)器是pop3.163.com

    連接pop3服務(wù)器:telnet pop3.163.com 110

    命令功能描述
    user命令user 用戶名,例如:user itcast_cxf@163.com
    pass命令pass 密碼,例如:pass itcast
    stat命令stat命令用來(lái)查看郵箱中郵件的個(gè)數(shù),所有郵件所占的空間
    list命令list命令用來(lái)查看所有郵件,或指定郵件的狀態(tài),例如:list 1是查看第一封郵件的大小,
    list是查看郵件列表,即列出所有郵件的編號(hào),及大小
    retr命令查看指定郵件的內(nèi)容,例如:retr 1#是查看第一封郵件的內(nèi)容
    dele命令標(biāo)記某郵件為刪除,但不是馬上刪除,而是在退出時(shí)才會(huì)真正刪除
    quit命令退出!如果在退出之前已經(jīng)使用dele命令標(biāo)記了某些郵件,那么會(huì)在退出是刪除它們


    4. JavaMail

    4.1 JavaMail概述

    Java Mail是由SUN公司提供的專門針對(duì)郵件的API,主要Jar包:mail.jar、activation.jar。

    在使用MyEclipse創(chuàng)建web項(xiàng)目時(shí),需要小心!如果只是在web項(xiàng)目中使用java mail是沒有什么問題的,發(fā)布到Tomcat上運(yùn)行一點(diǎn)問題都沒有!
    但是如果是在web項(xiàng)目中寫測(cè)試那就出問題了。

    在MyEclipse中,會(huì)自動(dòng)給web項(xiàng)目導(dǎo)入javax.mail包中的類,但是不全(其實(shí)是只有接口,而沒有接口的實(shí)現(xiàn)類),所以只靠MyEclipse中的類是不能運(yùn)行java mail項(xiàng)目的,但是如果這時(shí)你再去自行導(dǎo)入mail.jar時(shí),就會(huì)出現(xiàn)沖突。

    處理方案:到下面路徑中找到j(luò)avaee.jar文件,把javax.mail刪除!!!

    D:\Program Files\MyEclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321\data\libraryset\EE_5

    4.2 JavaMail中主要類

    java mail中主要類:javax.mail.Session、javax.mail.internet.MimeMessage、javax.mail.Transport。

    Session:表示會(huì)話,即客戶端與郵件服務(wù)器之間的會(huì)話!想獲得會(huì)話需要給出賬戶和密碼,當(dāng)然還要給出服務(wù)器名稱。在郵件服務(wù)中的Session對(duì)象,就相當(dāng)于連接數(shù)據(jù)庫(kù)時(shí)的Connection對(duì)象。

    MimeMessage:表示郵件類,它是Message的子類。它包含郵件的主題(標(biāo)題)、內(nèi)容,收件人地址、發(fā)件人地址,還可以設(shè)置抄送和暗送,甚至還可以設(shè)置附件。

    Transport:用來(lái)發(fā)送郵件。它是發(fā)送器!

    4.3 JavaMail之Hello World

    在使用telnet發(fā)郵件時(shí),還需要自己來(lái)處理Base64編碼的問題,但使用JavaMail就不必理會(huì)這些問題了,都由JavaMail來(lái)處理。

    第一步:獲得Session

    Session session = Session.getInstance(Properties prop, Authenticator auth);

    其中prop需要指定兩個(gè)鍵值,一個(gè)是指定服務(wù)器主機(jī)名,另一個(gè)是指定是否需要認(rèn)證!我們當(dāng)然需要認(rèn)證!

    Properties prop = new Properties(); prop.setProperty(“mail.host”, “smtp.163.com”);//設(shè)置服務(wù)器主機(jī)名 prop.setProperty(“mail.smtp.auth”, “true”);//設(shè)置需要認(rèn)證

    其中Authenticator是一個(gè)接口表示認(rèn)證器,即校驗(yàn)客戶端的身份。我們需要自己來(lái)實(shí)現(xiàn)這個(gè)接口,實(shí)現(xiàn)這個(gè)接口需要使用賬戶和密碼。

    Authenticator auth = new Authenticator() {public PasswordAuthentication getPasswordAuthentication () {new PasswordAuthentication(“itcast_cxf”, “itcast”);//用戶名和密碼} };

    通過上面的準(zhǔn)備,現(xiàn)在可以獲取得Session對(duì)象了:

    Session session = Session.getInstance(prop, auth);

    第二步:創(chuàng)建MimeMessage對(duì)象
    創(chuàng)建MimeMessage需要使用Session對(duì)象來(lái)創(chuàng)建:

    MimeMessage msg = new MimeMessage(session);

    然后需要設(shè)置發(fā)信人地址、收信人地址、主題,以及郵件正文。

    msg.setFrom(new InternetAddress(“itcast_cxf@163.com”));//設(shè)置發(fā)信人 msg.addRecipients(RecipientType.TO, “itcast_cxf@qq.com,itcast_cxf@sina.com”);//設(shè)置多個(gè)收信人 msg.addRecipients(RecipientType.CC, “itcast_cxf@sohu.com,itcast_cxf@126.com”);//設(shè)置多個(gè)抄送 msg.addRecipients(RecipientType.BCC, ”itcast_cxf@hotmail.com”);//設(shè)置暗送 msg.setSubject(“這是一封測(cè)試郵件”);//設(shè)置主題(標(biāo)題) msg.setContent(“當(dāng)然是hello world!”, “text/plain;charset=utf-8”);//設(shè)置正文

    第三步:發(fā)送郵件

    Transport.send(msg);//發(fā)送郵件

    4.4 JavaMail發(fā)送帶有附件的郵件

    一封郵件可以包含正文、附件N個(gè),所以正文與N個(gè)附件都是郵件的一個(gè)部份。

    上面的hello world案例中,只是發(fā)送了帶有正文的郵件!所以在調(diào)用setContent()方法時(shí)直接設(shè)置了正文,如果想發(fā)送帶有附件郵件,那么需要設(shè)置郵件的內(nèi)容為MimeMultiPart。

    MimeMulitpart parts = new MimeMulitpart();//多部件對(duì)象,可以理解為是部件的集合 msg.setContent(parts);//設(shè)置郵件的內(nèi)容為多部件內(nèi)容。

    然后我們需要把正文、N個(gè)附件創(chuàng)建為“主體部件”對(duì)象(MimeBodyPart),添加到MimeMuiltPart中即可。

    MimeBodyPart part1 = new MimeBodyPart();//創(chuàng)建一個(gè)部件 part1.setCotnent(“這是正文部分”, “text/html;charset=utf-8”);//給部件設(shè)置內(nèi)容 parts.addBodyPart(part1);//把部件添加到部件集中。

    下面我們創(chuàng)建一個(gè)附件:

    MimeBodyPart part2 = new MimeBodyPart();//創(chuàng)建一個(gè)部件 part2.attachFile(“F:\\a.jpg”);//設(shè)置附件 part2.setFileName(“hello.jpg”);//設(shè)置附件名稱 parts.addBodyPart(part2);//把附件添加到部件集中

    注意,如果在設(shè)置文件名稱時(shí),文件名稱中包含了中文的話,那么需要使用MimeUitlity類來(lái)給中文編碼:

    part2.setFileName(MimeUitlity.encodeText(“美女.jpg”));

    public class JavaMailDemo {public void sendMail() throws Exception {/** 1. 得到session*/Properties props = new Properties();props.setProperty("mail.host", "smtp.163.com");props.setProperty("mail.smtp.auth", "true");Authenticator auth = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("itcast_cxf", "itcast");}};Session session = Session.getInstance(props, auth);/** 2. 創(chuàng)建MimeMessage*/MimeMessage msg = new MimeMessage(session);msg.setFrom(new InternetAddress("itcast_cxf@163.com"));//設(shè)置發(fā)件人msg.setRecipients(RecipientType.TO, "itcast_cxf@126.com");//設(shè)置收件人msg.setRecipients(RecipientType.CC, "itcast_cxf@sohu.com");//設(shè)置抄送msg.setRecipients(RecipientType.BCC, "itcast_cxf@sina.com");//設(shè)置暗送msg.setSubject("這是來(lái)自ITCAST的測(cè)試郵件");msg.setContent("這就是一封垃圾郵件!", "text/html;charset=utf-8");/** 3. 發(fā)郵件*/Transport.send(msg);}/*** 帶有附件的郵件!!!*/public void sendMail2() throws Exception {/** 1. 得到session*/Properties props = new Properties();props.setProperty("mail.host", "smtp.163.com");props.setProperty("mail.smtp.auth", "true");Authenticator auth = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("itcast_cxf", "itcast");}};Session session = Session.getInstance(props, auth);/** 2. 創(chuàng)建MimeMessage*/MimeMessage msg = new MimeMessage(session);msg.setFrom(new InternetAddress("itcast_cxf@163.com"));//設(shè)置發(fā)件人msg.setRecipients(RecipientType.TO, "itcast_cxf@126.com");//設(shè)置收件人msg.setSubject("這是來(lái)自ITCAST的測(cè)試郵件有附件");/** 當(dāng)發(fā)送包含附件的郵件時(shí),郵件體就為多部件形式!* 1. 創(chuàng)建一個(gè)多部件的部件內(nèi)容!MimeMultipart* MimeMultipart就是一個(gè)集合,用來(lái)裝載多個(gè)主體部件!* 2. 我們需要?jiǎng)?chuàng)建兩個(gè)主體部件,一個(gè)是文本內(nèi)容的,另一個(gè)是附件的。* 主體部件叫MimeBodyPart* 3. 把MimeMultipart設(shè)置給MimeMessage的內(nèi)容!*/MimeMultipart list = new MimeMultipart();//創(chuàng)建多部分內(nèi)容// 創(chuàng)建MimeBodyPartMimeBodyPart part1 = new MimeBodyPart();// 設(shè)置主體部件的內(nèi)容part1.setContent("這是一封包含附件的垃圾郵件", "text/html;charset=utf-8");// 把主體部件添加到集合中list.addBodyPart(part1);// 創(chuàng)建MimeBodyPartMimeBodyPart part2 = new MimeBodyPart();part2.attachFile(new File("F:/f/白冰.jpg"));//設(shè)置附件的內(nèi)容//設(shè)置顯示的文件名稱,其中encodeText用來(lái)處理中文亂碼問題part2.setFileName(MimeUtility.encodeText("大美女.jpg"));list.addBodyPart(part2);msg.setContent(list);//把它設(shè)置給郵件作為郵件的內(nèi)容。/** 3. 發(fā)郵件*/Transport.send(msg); }public void sendMail3() throws Exception {/** 1. 得到session*/Session session = MailUtils.createSession("smtp.163.com", "itcast_cxf", "itcast");/** 2. 創(chuàng)建郵件對(duì)象*/Mail mail = new Mail("itcast_cxf@163.com","itcast_cxf@126.com,itcast_cxf@sina.com","不是垃圾郵件能是什么呢?", "這里是正文");/** 創(chuàng)建兩個(gè)附件對(duì)象*/AttachBean ab1 = new AttachBean(new File("F:/f/白冰.jpg"), "小美女.jpg");AttachBean ab2 = new AttachBean(new File("F:/f/big.jpg"), "我的羽絨服.jpg");// 添加到mail中mail.addAttach(ab1);mail.addAttach(ab2);/** 3. 發(fā)送*/MailUtils.send(session, mail);} }

    5. MailUtils

    public class MailUtils {public static Session createSession(String host, final String username, final String password) {Properties prop = new Properties();prop.setProperty("mail.host", host);// 指定主機(jī)prop.setProperty("mail.smtp.auth", "true");// 指定驗(yàn)證為true// 創(chuàng)建驗(yàn)證器Authenticator auth = new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}};// 獲取session對(duì)象return Session.getInstance(prop, auth);}/*** 發(fā)送指定的郵件* * @param mail*/public static void send(Session session, final Mail mail) throws MessagingException,IOException {MimeMessage msg = new MimeMessage(session);// 創(chuàng)建郵件對(duì)象msg.setFrom(new InternetAddress(mail.getFrom()));// 設(shè)置發(fā)件人msg.addRecipients(RecipientType.TO, mail.getToAddress());// 設(shè)置收件人// 設(shè)置抄送String cc = mail.getCcAddress();if (!cc.isEmpty()) {msg.addRecipients(RecipientType.CC, cc);}// 設(shè)置暗送String bcc = mail.getBccAddress();if (!bcc.isEmpty()) {msg.addRecipients(RecipientType.BCC, bcc);}msg.setSubject(mail.getSubject());// 設(shè)置主題MimeMultipart parts = new MimeMultipart();// 創(chuàng)建部件集對(duì)象MimeBodyPart part = new MimeBodyPart();// 創(chuàng)建一個(gè)部件part.setContent(mail.getContent(), "text/html;charset=utf-8");// 設(shè)置郵件文本內(nèi)容parts.addBodyPart(part);// 把部件添加到部件集中///// 添加附件List<AttachBean> attachBeanList = mail.getAttachs();// 獲取所有附件if (attachBeanList != null) {for (AttachBean attach : attachBeanList) {MimeBodyPart attachPart = new MimeBodyPart();// 創(chuàng)建一個(gè)部件attachPart.attachFile(attach.getFile());// 設(shè)置附件文件attachPart.setFileName(MimeUtility.encodeText(attach.getFileName()));// 設(shè)置附件文件名parts.addBodyPart(attachPart);}}msg.setContent(parts);// 給郵件設(shè)置內(nèi)容Transport.send(msg);// 發(fā)郵件} }

    總結(jié)

    以上是生活随笔為你收集整理的JavaWeb-JavaMail邮件开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。