大部分的web應用都須要集成郵件發送功能 java
例如: web
1給新註冊的用戶發一封註冊成功郵件(通常會包含一個激活的鏈接, 目的是爲了驗證郵件的真僞) 服務器
2給網站全部的用戶發送最近的優惠活動 網站
3用戶長時間未登錄網站,發送一封郵件進行提醒 ui
上述的三種狀況,咱們不可能人工地爲每一個用戶發送郵件,這時就須要應用程序具有自動發送郵件的功能 編碼
在 internet 網上發送和接收郵件都必須經過一個專門服務器,處理郵件的服務器咱們稱爲郵件服務器 spa
如今不少門戶網站都擁有本身的郵件服務器,例如:sina、sohu、163等 命令行
電子郵箱是指用戶在郵件服務器上申請的帳戶, code
郵件服務器會爲每一個帳戶分配必定的空間用於存儲發送和接收的郵件 ip
通俗地理解, 郵件服務器就比如生活中的郵局,電子郵箱就比如生活中的信箱
咱們發送一封電子郵件就須要將郵件發送給對方電子郵箱所在的服務器,對方能夠等待服務器將信件送到郵箱或直接去服務器上收取郵件
在互聯網上任何數據的傳輸都須要遵照協議,好比ie與服務器的數據交互遵循的是http協議
郵件在發送過程當中也須要遵照必定的協議
1)用戶發送一封電子郵件須要遵循 SMTP 協議
ehlo 主機名 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
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軟件 完成郵件的發送和接收
1. Mime 協議
2. javamail
Session 與郵件服務器的會話
MimeMessage Mime消息
MimeMultipart Mime消息體
MimeBodyPart Mime消息體個部分數據
Transport 用於發送郵件