简单邮件就是里面只包含了文字
很多概念性的东西都是来自下面的一篇文章里:
https://my.oschina.net/itblog/blog/298379
SMTP & POP3:
SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
先了解一下几个类:
发送邮件之前需要创建一个Session对象 (会话对象)
Session是一个很容易被误解的类,这归咎于混淆视听的类名。千万不要以为这里的Session像HttpSession一样代表真实的交互会话,但创建Session对象时,并没有对应的物理连接,它只不过是一对配置信息的集合。Session的主要作用包括两个方面:
1)接收各种配置属性信息:通过Properties对象设置的属性信息;
2)初始化JavaMail环境:根据JavaMail的配置文件,初始化JavaMail环境,以便通过Session对象创建其他重要类的实例。(比如 Transport Message)
保存各种配置信息的 Properties(属性对象)
由于JavaMail需要和邮件服务器进行通信,这就要求程序提供许多诸如服务器地址、端口、用户名、密码等信息,
//我使用的是QQ邮箱
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp"); //协议
props.setProperty("mail.smtp.host", "smtp.qq.com"); // 服务器地址
props.setProperty("mail.smtp.port", "465"); //端口
props.setProperty("mail.smtp", "true"); //验证
//如果是163邮箱的话 上面的就已经可以了 但是qq邮箱还需要进行SSL验证
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", "465");
连接对象 Transport
//创建连接对象
Transport transport = session.getTransport();
//创建连接 其中密码以 “授权码”的形式体现 设置 账户 POP3/SMTP服务
transport.connect("[email protected]", "jyfmavkhxjpfebic"); //账户名 密码
//发送邮件
transport.sendMessage(msg, msg.getAllRecipients()); // 邮件 , 邮件的所有接收者
//关闭连接
transport.close();
上面的授权码:
发一个短信之后点击【我已发送】 就会出来一个授权码
邮件 Message (消息对象)
一旦获得 Session 对象,就可以继续创建要发送的消息。这由 Message 类来完成。因为 Message 是个抽象类,您必需用一个子类,多数情况下为 javax.mail.internet.MimeMessage。MimeMessage 是个能理解 MIME 类型和头的电子邮件消息,正如不同 RFC 中所定义的。虽然在某些头部域非 ASCII 字符也能被译码,但 Message 头只能被限制为用 US-ASCII 字符。
要创建一个 Message,请将 Session 对象传递给 MimeMessage 构造器:
/* session send recipent 都是自定义的*/
//创建Message对象
MimeMessage msg = new MimeMessage(session);
//邮件里面包含的内容
Address address1 = new InternetAddress(send, "发件人", "UTF-8");
Address address2 = new InternetAddress(recipient, "收件人", "UTF-8");
msg.setFrom(address1); // 发送人
msg.setSubject("邮件的标题", "UTF-8");
// .TO:普通收件人 CC 抄件人 BBC密送人
msg.setRecipient(MimeMessage.RecipientType.TO, address2); // 收件人
msg.setContent("邮件的主体", "text/html;charset=utf-8");
// 不能直接写UTF_8 邮件的主体在显示的时候是以HTML格式显示的
// 所以用的字符集也应该是html所支持的格式写法
下面的测试代码:
先要导入 javax.mail.jar 包
package com.testjavamail;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
public class TestMail {
public static void main(String[] args) throws Exception{
Properties props = createProperty();
Session session = Session.getInstance(props);// Session类的构造器私有
//创建邮件
MimeMessage msg = createMimeMessage(session, "[email protected]", "[email protected]");
// 发送邮件 首先 创建连接对象
Transport transport = session.getTransport();
//创建连接 其中密码以 “授权码”的形式体现 设置 账户 POP3/SMTP服务
transport.connect("[email protected]", "(自己的授权码)");
//发送邮件
transport.sendMessage(msg, msg.getAllRecipients());
//关闭连接
transport.close();
}
public static MimeMessage createMimeMessage(Session session, String send, String recipient) throws Exception{
MimeMessage msg = new MimeMessage(session);
//邮件里面包含的内容
Address address1 = new InternetAddress(send, "发件人", "UTF-8");
Address address2 = new InternetAddress(recipient, "收件人", "UTF-8");
msg.setFrom(address1);
msg.setSubject("邮件的标题", "UTF-8");
msg.setRecipient(MimeMessage.RecipientType.TO, address2);
msg.setContent("邮件的主体", "text/html;charset=utf-8");
msg.setSentDate(new Date()); //设置发送时间
msg.saveChanges(); // 保存邮件
return msg;
}
public static Properties createProperty(){
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp"); //协议
props.setProperty("mail.smtp.host", "smtp.qq.com"); //地址
props.setProperty("mail.smtp.port", "465"); //端口
props.setProperty("mail.smtp", "true"); //验证
//如果是163邮箱的话 上面的就已经可以了 但是qq邮箱还需要进行SSL验证
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", "465");
return props;
}
}