使用java發(fā)送郵件

一、簡(jiǎn)述發(fā)送和收取郵件的協(xié)議

SMTP

簡(jiǎn)單郵件傳輸協(xié)議(Simple Mail Transfer Protocol腊状,SMTP)由RFC 821定義。它定義了發(fā)送電子郵件的機(jī)制。在 JavaMail API 環(huán)境中姑宽,您基于 JavaMail 的程序?qū)⒑湍墓净蛞蛱鼐W(wǎng)服務(wù)供應(yīng)商的(Internet Service Provider's,ISP's)SMTP 服務(wù)器通信闺阱。SMTP 服務(wù)器會(huì)中轉(zhuǎn)消息給接收方 SMTP 服務(wù)器以便最終讓用戶經(jīng)由 POP 或 IMAP 獲得炮车。這不是要求 SMTP 服務(wù)器成為開(kāi)放的中繼,盡管 SMTP 服務(wù)器支持身份驗(yàn)證,不過(guò)還是得確保它的配置正確瘦穆。像配置服務(wù)器來(lái)中繼消息或添加刪除郵件賬號(hào)這類任務(wù)的實(shí)現(xiàn)纪隙,JavaMail API 中并不支持僵朗。

POP

POP 代表郵局協(xié)議(Post Office Protocol)叁鉴。目前用的是版本 3,也稱 POP3恩尾,RFC 1939定義了這個(gè)協(xié)議熙兔。POP 是一種機(jī)制悲伶,因特網(wǎng)上大多數(shù)人用它得到郵件。它規(guī)定每個(gè)用戶一個(gè)郵箱的支持住涉。這就是它所能做的麸锉,而這也造成了許多混淆。使用 POP 時(shí)舆声,用戶熟悉的許多性能并不是由 POP 協(xié)議支持的花沉,如查看有幾封新郵件消息這一性能。這些性能內(nèi)建于如 Eudora 或 Microsoft Outlook 之類的程序中纳寂,它們能記住一些事主穗,諸如最近一次收到的郵件,還能計(jì)算出有多少是新的毙芜。所以當(dāng)使用 JavaMail API 時(shí)忽媒,如果您想要這類信息,您就必須自己算腋粥。

IMAP

IMAP 是更高級(jí)的用于接收消息的協(xié)議晦雨。在RFC 2060中被定義,IMAP 代表因特網(wǎng)消息訪問(wèn)協(xié)議(Internet Message Access Protocol)隘冲,目前用的是版本 4闹瞧,也稱 IMAP4。在用到 IMAP 時(shí)展辞,郵件服務(wù)器必需支持這個(gè)協(xié)議奥邮。不能僅僅把使用 POP 的程序用于 IMAP,并指望它支持 IMAP 所有性能罗珍。假設(shè)郵件服務(wù)器支持 IMAP洽腺,基于 JavaMail 的程序可以利用這種情況 — 用戶在服務(wù)器上有多個(gè)文件夾(folder),并且這些文件夾可以被多個(gè)用戶共享覆旱。

因?yàn)橛羞@一更高級(jí)的性能蘸朋,您也許會(huì)認(rèn)為所有用戶都會(huì)使用 IMAP。事實(shí)并不是這樣扣唱。要求服務(wù)器接收新消息藕坯,在用戶請(qǐng)求時(shí)發(fā)送到用戶手中团南,還要在每個(gè)用戶的多個(gè)文件夾中維護(hù)消息。這樣雖然能將消息集中備份炼彪,但隨著用戶長(zhǎng)期的郵件夾越來(lái)越大吐根,到磁盤空間耗盡時(shí),每個(gè)用戶都會(huì)受到損失霹购。使用 POP佑惠,就能卸載郵件服務(wù)器上保存的消息了。

MIME

MIME 代表多用途因特網(wǎng)郵件擴(kuò)展標(biāo)準(zhǔn)(Multipurpose Internet Mail Extensions)齐疙。它不是郵件傳輸協(xié)議。但對(duì)傳輸內(nèi)容的消息旭咽、附件及其它的內(nèi)容定義了格式贞奋。這里有很多不同的有效文檔:RFC 822RFC 2045穷绵、RFC 2046RFC 2047轿塔。作為一個(gè) JavaMail API 的用戶,您通常不必對(duì)這些格式操心仲墨。無(wú)論如何勾缭,一定存在這些格式而且程序會(huì)用到它。


二目养、實(shí)現(xiàn)發(fā)郵件的功能

這里講到的是使用 JavaMail 功能俩由、操作,發(fā)送郵件癌蚁。

JavaMail 中用于發(fā)送郵件的類有 Session 類和 Transport 類幻梯,當(dāng)然也少不了 Message 類。它們之間的進(jìn)行工作的關(guān)系和步驟如下:

各個(gè)類的關(guān)系與操作流程:

1努释、創(chuàng)建一個(gè) Properties 對(duì)象碘梢,該類在 java.util 包中,以鍵-值對(duì)的形式設(shè)置郵件發(fā)送中需要用到的傳輸協(xié)議伐蒂,如 SMTP 協(xié)議等煞躬;一般的 smtp 服務(wù)器都需要用戶身份認(rèn)證,所以這也要設(shè)置為 true 逸邦,以便向 smtp 服務(wù)器提交用戶名恩沛、密碼等信息;

2昭雌、先使用 Session 類中靜態(tài)的 getInstance() 或getDefaultInstance() 獲得自身對(duì)象复唤,此時(shí)調(diào)用這兩個(gè)方法應(yīng)該傳入上面創(chuàng)建的 Properties 對(duì)象;

3烛卧、再用 Session 對(duì)象調(diào)用 getTransport() 方法獲得 Transport 抽象類的具體實(shí)現(xiàn)子類對(duì)象佛纫,如 MimeTransport 類妓局;

4、將 Sesson 對(duì)象作為參數(shù)創(chuàng)建 MimeMessage 對(duì)象呈宇,即一封郵件好爬,前面的文章已經(jīng)有所講述;

5甥啄、使用 MimeTransport 對(duì)象調(diào)用相關(guān)方法將 MimeMessage 對(duì)象發(fā)送出去存炮。

由于前面的文章已經(jīng)寫(xiě)了創(chuàng)建各類郵件的代碼,所以在這里就直接拿來(lái)用而不再編寫(xiě)了蜈漓,創(chuàng)建郵件的代碼放在本文的最后面穆桂。我們使用到了上篇文章中的 WithAttachmentMessage 類作為一封郵件,稍稍修改一下 from 和 to 就可以從不同的郵箱發(fā)送給不同的郵箱了融虽。

以下為郵件發(fā)送的工具類

(以163網(wǎng)易郵箱為例享完,當(dāng)然qq郵箱、新浪等也是可以的)

package com.qianfeng.common.email;

import java.util.Properties;

import javax.mail.Message;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

public class SendEmail {

public static void sendEmailToUser(String sendAddress,String title,String content) throws Exception{

Properties properties = new Properties();

//設(shè)置服務(wù)器地址

properties.setProperty("mail.host", "smtp.163.com");

//設(shè)置郵件傳輸協(xié)議

properties.setProperty("mail.transport.protocol", "smtp");

//設(shè)置是否需要認(rèn)證服務(wù)器的用戶名和密碼

properties.setProperty("mail.smtp.auth", "true");

//創(chuàng)建一個(gè)Session對(duì)象

Session session = Session.getInstance(properties);

//得到發(fā)送郵件的對(duì)象 transport

Transport transport = session.getTransport();

//連接服務(wù)器

//參數(shù)1和參數(shù)2 是需要個(gè)人去163網(wǎng)易郵箱中去獲取的授權(quán)碼

transport.connect("smtp.163.com", " 參數(shù)1", "參數(shù)2 ");

//創(chuàng)建message對(duì)象

Message message = createSimpleEmail(session,sendAddress,title,content);

//發(fā)送郵件

transport.sendMessage(message, message.getAllRecipients());

transport.close();

}

private static Message createSimpleEmail(Session session, String sendAddress, String title, String content) throws Exception {

MimeMessage message = new MimeMessage(session);

//設(shè)置發(fā)件人

message.setFrom(new InternetAddress("xxx@163.com")); //參數(shù)為個(gè)人的郵箱名字

//設(shè)置郵件的接收人

message.setRecipient(Message.RecipientType.TO, new InternetAddress(sendAddress));

//設(shè)置郵件標(biāo)題

message.setSubject(title);

//設(shè)置郵件內(nèi)容

message.setContent(content, "text/html;charset=utf-8");

return message;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末有额,一起剝皮案震驚了整個(gè)濱河市般又,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巍佑,老刑警劉巖茴迁,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異萤衰,居然都是意外死亡堕义,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門腻菇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胳螟,“玉大人,你說(shuō)我怎么就攤上這事筹吐√撬剩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵丘薛,是天一觀的道長(zhǎng)嘉竟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)洋侨,這世上最難降的妖魔是什么舍扰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮希坚,結(jié)果婚禮上边苹,老公的妹妹穿的比我還像新娘。我一直安慰自己裁僧,他們只是感情好个束,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布慕购。 她就那樣靜靜地躺著,像睡著了一般茬底。 火紅的嫁衣襯著肌膚如雪沪悲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天阱表,我揣著相機(jī)與錄音殿如,去河邊找鬼。 笑死最爬,一個(gè)胖子當(dāng)著我的面吹牛涉馁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爱致,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谨胞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蒜鸡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤牢裳,失蹤者是張志新(化名)和其女友劉穎逢防,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒲讯,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忘朝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了判帮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片局嘁。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晦墙,靈堂內(nèi)的尸體忽然破棺而出悦昵,到底是詐尸還是另有隱情,我是刑警寧澤晌畅,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布但指,位于F島的核電站,受9級(jí)特大地震影響抗楔,放射性物質(zhì)發(fā)生泄漏棋凳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一连躏、第九天 我趴在偏房一處隱蔽的房頂上張望剩岳。 院中可真熱鬧,春花似錦入热、人聲如沸拍棕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)莫湘。三九已至尤蒿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幅垮,已是汗流浹背腰池。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留忙芒,地道東北人示弓。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像呵萨,于是被迫代替她去往敵國(guó)和親奏属。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 本文包括:1潮峦、名詞解釋2囱皿、郵件收發(fā)過(guò)程3、JavaMail 知識(shí)概要4忱嘹、發(fā)送一封符合 MIME 協(xié)議的 JavaM...
    廖少少閱讀 4,027評(píng)論 2 13
  • Java Mail 簡(jiǎn)介 常見(jiàn)的郵件協(xié)議包括:SMTP(Simple Mail Transfer Protocol...
    Josaber閱讀 3,277評(píng)論 1 9
  • 電子郵件的應(yīng)用非常廣泛嘱腥,例如在某網(wǎng)站注冊(cè)了一個(gè)賬戶,自動(dòng)發(fā)送一封歡迎郵件拘悦,通過(guò)郵件找回密碼齿兔,自動(dòng)批量發(fā)送活動(dòng)信息等...
    誰(shuí)在烽煙彼岸閱讀 437評(píng)論 0 1
  • 背景 近期需要實(shí)現(xiàn)一個(gè)郵件客戶端的項(xiàng)目,類似Foxmail础米,outlook客戶端分苇。但項(xiàng)目只做消息轉(zhuǎn)發(fā),不需要完整實(shí)...
    BigBug77閱讀 4,279評(píng)論 0 4
  • 概述 郵件相關(guān)的標(biāo)準(zhǔn) 廠商所提供的 JavaMail 服務(wù)程序可以有選擇地實(shí)現(xiàn)某些郵件協(xié)議屁桑,常見(jiàn)的郵件協(xié)議包括: ...
    靜默虛空閱讀 2,155評(píng)論 -1 4