数年前,邮件的发送是经过人为的运输,从发件人---当地邮局---收件地邮局---收件人,付出的人力物力是非常大的。随着时代的进步,科技的发展,如今我们的生活中出现更高级发送邮件的方式,最常用的就是从(邮箱--邮箱),当然中间会经过多个邮箱服务器的转载,称为电子邮箱。此篇文章的内容就是简单的通过java程序发送邮件。
1.首先我们先了解邮件的协议
POP3
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
SMTP
SMTP 的全称是 “ Simple Mail Transfer Protocoli,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议族,它帮助每台计算机在发送或中转信件时找到下一 个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可登录 SMTP 服务器,这就使得那些垃圾邮件散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
IMAP
IMAP全称是Internet Mail Access Protocol, 即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之间不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端 软件登录邮箱,看到的邮件以及状态都是
一致的。
IMAP和POP3有什么区别?
POP3协议介许电子邮件客户端下载服务器上的邮件,但是在客户端的操作 (如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的。
IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
当我们了解了邮件协议后,接下来准备发送一个简单的邮件
到qq邮箱的设置的账户里面开启 POP3/SMTP 和 IMAP/SMTP 服务

生成授权码

得到授权码

依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
5.邮件工具类,准备STMP登录的信息 (以qq邮箱为例)
//发邮件工具类
public class MainUtils {
// 发件人邮箱地址
private static final String USER = "fjq229@foxmail.com";
// 授权码
private static final String PASSWORD ="pnwqmnbbkhqcdfje";
/**
* @param addressee 收件人
* @param text 内容
* @param title 标题
* @return
*/
public static boolean sendMail(String addressee,String text,String title){
try {
//创建Properties集合
final Properties pros = new Properties();
pros.put("mail.smtp.auth","true"); // 用户认证
pros.put("mail.smtp.host","smtp.qq.com"); // 主机名 这里是qq邮箱 如果是163 就把qq改为163
// 发件人的账号
pros.put("mail.user",USER);
// 发件人的授权码
pros.put("mail.password",PASSWORD);
// 构建授权码信息 用于进行SMTP身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//用户名 密码(授权码)
String userName = pros.getProperty("mail.user");
String password = pros.getProperty("mail.password");
return new PasswordAuthentication(userName,password);
}
};
// 创建邮件会话
Session session = Session.getInstance(pros, authenticator);
// 创建邮件信息
MimeMessage message = new MimeMessage(session);
// 创建发件人
String name = pros.getProperty("mail.user");
InternetAddress address = new InternetAddress(name);
message.setFrom(address);
// 设置收件人
InternetAddress ToAddressee = new InternetAddress(addressee);
message.setRecipient(Message.RecipientType.TO,ToAddressee);
// 设置邮件标题
message.setSubject(title);
// 设置邮件内容
message.setContent(text,"text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
MainUtils.sendMail("3181404297@qq.com","吴斌这是你入职offer,欢迎入职xxx公司","offer");
System.out.println("send success");
}
}