文章目录
邮箱相关的概念
邮件收发协议
发送邮件协议:SMTP(简单邮件传输协议)
接收邮件协议:①IMAP(Internet邮件访问协议)②POP3 (邮局协议版本3)
接收邮件协议IMAP和POP有什么区别?
POP协议允许电子邮件客户端下载服务器上的邮件,但是在电子邮件客户端的操作(如:移动邮件、标记已读等),不会反馈到服务器上。
IMAP协议允许电子邮件客户端下载服务器上的邮件,电子邮件客户端的操作都会反馈到服务器上,也就是说,IMAP是“双向”的。
邮件客户端
网页版:使用浏览器登录邮件进行邮件收发
软件版(邮箱可以长时间保持在线状态,随时收发邮件):QQ邮箱,outlook等。
邮件服务器
邮件服务器:提供邮件收发服务的服务器,包括邮件发送服务器和邮件接收服务器。
邮箱服务器的域名:163邮箱的后缀为163.com,QQ的为qq.com,这个就是域名
网易邮箱(163邮箱)发送/接收邮件服务器地址:
- SMTP服务器:
smtp.163.com
- POP3服务器:
pop.163.com
- IMAP服务器:
imap.163.com
QQ邮箱发送/接收邮件服务器地址:
-
SMTP服务器(端口465或587):
smtp.qq.com
-
POP3服务器(端口995):
pop.qq.com
邮件收发简要过程
有的邮箱客户端,可能要我们自己去收信,请求收件服务器得到邮件。
使用Java发送邮件(JavaMail的使用)
1.jar包相关
2.使用案例
这里使用一个找的封装了发送邮件的工具类MailUtils
测试,使用第三方邮件客户端,即写的java程序,以QQ邮箱账号发送邮件,在网易的网页版客户端接收这封邮件。
- 发送邮件工具类
MailUtils
/** * 发送邮件工具类 */
public final class MailUtils {
private MailUtils(){}
/** * 发送邮件 * @param email 收件人的邮箱地址 * @param subject 邮件主题 * @param emailMsg 邮件内容 */
public static void sendMail(String email, String subject, String emailMsg)
throws AddressException, MessagingException {
// 1.[连接发件服务器]创建一个程序与发件人的 发送邮件服务器会话对象 Session
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "SMTP");//邮件发送协议
props.setProperty("mail.host", "smtp.qq.com");//邮件发送服务器的地址(如QQ邮箱的发件服务器地址SMTP服务器: smtp.qq.com)
props.setProperty("mail.smtp.auth", "true");//指定验证为true
// 创建验证器
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
//发件人的用户名(不带后缀的,如QQ邮箱的@qq.com不用写)和授权码(这里一般不使用密码,为避免密码泄露,用授权码代替密码登录第三方邮件客户端)
//授权码:用于登录第三方邮件客户端的专用密码。 第三方邮件客户端:如这个java程序。
return new PasswordAuthentication("QQ邮箱地址不带@qq.com", "开启POP3/SMTP服务得到的授权码");
}
};
Session session = Session.getInstance(props, auth);
// 2.[创建一封邮件]创建一个Message,它相当于是邮件内容
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("创建验证器时你用的用户名@qq.com")); // 设置发送者的邮箱地址
message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者
message.setSubject(subject);//邮件主题
message.setContent(emailMsg, "text/html;charset=utf-8");//设置邮件的内容
// 3.[发送邮件]创建 Transport用于将邮件发送
Transport.send(message);
}
}
- 测试类MailTest
public class MailTest {
@Test
public void test1(){
try {
/** * @param email 收件人的邮箱地址 * @param subject 邮件主题 * @param emailMsg 邮件内容 */
MailUtils.sendMail("网易邮箱地址@163.com","欢迎回来","哈喽");
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行后在网易的网页版客户端接收的邮件:
3.使用案例中相关说明
授权码说明:
网易邮箱获取授权码: