大部分的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 用于发送邮件