一、为什么要学javamail
大部分的web应用都需要集成邮件发送功能
例如:
1给新注册的用户发一封注册成功邮件(一般会包含一个激活的连接, 目的是为了验证邮件的真伪)
2给网站所有的用户发送最近的优惠活动
3用户长时间未登陆网站,发送一封邮件进行提醒
上述的三种情况,我们不可能人工地为每个用户发送邮件,这时就需要应用程序具备自动发送邮件的功能
二、javamail中的基本概念
1. 邮件服务器
在 internet 网上发送和接收邮件都必须通过一个专门服务器,处理邮件的服务器我们称为邮件服务器
现在很多门户网站都拥有自己的邮件服务器,例如:sina、sohu、163等
2. 电子邮箱
电子邮箱是指用户在邮件服务器上申请的账户,
邮件服务器会为每个账户分配一定的空间用于存储发送和接收的邮件
通俗地理解, 邮件服务器就好比生活中的邮局,电子邮箱就好比生活中的信箱
我们发送一封电子邮件就需要将邮件发送给对方电子邮箱所在的服务器,对方可以等待服务器将信件送到邮箱或直接去服务器上收取邮件
3. 传输协议
在互联网上任何数据的传输都需要遵守协议,比如ie与服务器的数据交互遵循的是http协议
邮件在发送过程中也需要遵守一定的协议
1)用户发送一封电子邮件需要遵循 SMTP 协议
ehlo 主机名
auth login //经过base64编码后的用户名和密码
mail from:<[email protected]>
rcpt to:<[email protected]>
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
电子邮箱地址: [email protected]
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:[email protected]
rcpt to:[email protected]
Data
from<[email protected]>
subject<a mail>
xxxxxxxxxxxx
.
RFC822文档有漏洞,可以冒名发送邮件
3) 配置outlook软件 完成邮件的发送和接收
三、写java程序发送mail
1. Mime 协议
2. javamail
Session 与邮件服务器的会话
MimeMessage Mime消息
MimeMultipart Mime消息体
MimeBodyPart Mime消息体个部分数据
Transport 用于发送邮件