20-javamail
一、為什么要學javamail
大部分的web應用都需要集成郵件發送功能
例如:
1給新注冊的用戶發一封注冊成功郵件(一般會包含一個激活的連接, 目的是為了驗證郵件的真偽)
2給網站所有的用戶發送最近的優惠活動
3用戶長時間未登陸網站,發送一封郵件進行提醒
?
上述的三種情況,我們不可能人工地為每個用戶發送郵件,這時就需要應用程序具備自動發送郵件的功能
?
二、javamail中的基本概念
1. 郵件服務器
??? 在 internet 網上發送和接收郵件都必須通過一個專門服務器,處理郵件的服務器我們稱為郵件服務器
??? 現在很多門戶網站都擁有自己的郵件服務器,例如:sina、sohu、163等
?
2. 電子郵箱
??? 電子郵箱是指用戶在郵件服務器上申請的賬戶,
??? 郵件服務器會為每個賬戶分配一定的空間用于存儲發送和接收的郵件
?
通俗地理解, 郵件服務器就好比生活中的郵局,電子郵箱就好比生活中的信箱
我們發送一封電子郵件就需要將郵件發送給對方電子郵箱所在的服務器,對方可以等待服務器將信件送到郵箱或直接去服務器上收取郵件
?
3. 傳輸協議
??? 在互聯網上任何數據的傳輸都需要遵守協議,比如ie與服務器的數據交互遵循的是http協議
??? 郵件在發送過程中也需要遵守一定的協議
??? 1)用戶發送一封電子郵件需要遵循 SMTP 協議
?????? ehlo 主機名?
?????? auth login //經過base64編碼后的用戶名和密碼
?????? mail from:<aaa@itcast.cn>
?????? rcpt to:<bbb@itcast.cn>
?????? Data?? .號代表郵件內容的結束
?????? quit
?
??? 2)用戶接收一封電子郵件需要遵循 POP3 協議
?????? user<SP>username<CRLF>
?????? pass<SP>password<CRLF>?
?????? stat<CRLF> 返回郵箱的統計信息
?????? list<SP>[msg#]<CRLF>返回某一封郵件的統計信息
?????? retr<SP>msg#<CRLF>? 最重要的一個命令? 接收指定編號的郵件
?????? quit<CRLF>
???
??? 3)郵件服務器也會根據功能的不同分為接收郵件的服務器和發送郵件的服務器
?????? 發送郵件的服務器我們習慣稱為SMTP 服務器 默認監聽25端口
?????? 接收郵件的服務器我們習慣稱為 POP3 服務器 默認監聽110端口
?
??? 4) 新浪的一個電子郵箱給搜狐的一個電子郵箱發送郵件的過程如下圖所示
??? 資料
??? 新浪服務器?? POP3服務器: pop3.sina.com,SMTP服務器: smtp.sina.com
????? 搜狐服務器??? pop3.sohu.com smtp.sohu.com
??? ?
?
?
?
4. 實驗:
1) 安裝一臺易郵服務器,新建兩個郵件賬號
??? 注冊的賬號是 zhangsan
??? 電子郵箱地址: zhangsan@itcast.cn
2) 在dos命令行手動輸入命令完成發送郵件(smtp)和接收郵件(pop3)
??? 提示: 用戶名和密碼需要使用base64編碼
??? String username = "aaa";
??? String password = "123456";
??? BASE64Encoder encoder = new BASE64Encoder();
??? System.out.println(encoder.encode(userName.getBytes()));
??? System.out.println(encoder.encode(password.getBytes()));
3) 通過RFC822文檔實現發送一封簡單郵件
??? 該文檔規定了如何寫一封簡單郵件
??? 文檔中規定郵件分為郵件頭和郵件體兩部分,兩部分需要使用一個空行來分隔,郵件以一個’.’結束
??? 郵件頭
??? from?? 指定發件人
??? to???? 指定收件人
??? subject??? 指定主題
??? cc\bcc 指定抄送和密抄
?
??? 郵件體
??? xxxxx
??? 例:
??? ehlo
??? auth login
??? YWFh
?? MTIzNDU2
?? mail from:aaa@itcast.cn
?? rcpt to:bbb@itcast.cn
?? Data
??? from<aaa@itcast.cn>
??? to<bbb@itcast.cn>
??? subject<a mail>
???
??? xxxxxxxxxxxx
??? .
?
??? RFC822文檔有漏洞,可以冒名發送郵件
?
3) 配置outlook軟件 完成郵件的發送和接收
?
?
三、寫java程序發送mail
1. Mime 協議
?
2. javamail
??? Session 與郵件服務器的會話
??? MimeMessage?? Mime消息
??? MimeMultipart???? Mime消息體
??? MimeBodyPart ???? Mime消息體個部分數據
??? Transport?????? 用于發送郵件
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的20-javamail的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图形放大和缩小的知识点在火箭中的应用?
- 下一篇: 巴铁接收新款哈立德坦克