备注信息如下:
- 获取邮箱授权码,QQ邮箱获取授权码获取方式
- 获取 javax.mail-1.6.2.jar方式如下
2.1、百度网盘下载
链接:https://pan.baidu.com/s/1Bfhvk67JWAXHow01dJAN9A 提取码:mmos
2.2、通过自身所拥有的Maven项目下载
<!-- 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>
1、此方式参数不可以放在项目.properties配置文件中通过@PostConstruct方式获取,会导致邮件发送失败,若是有大佬知道怎么处理可以在下方留言告知,或者发送邮件至1181155871@qq.com,不胜感谢!!!
/**
* @param targetMailAddress 目标邮箱
* @param title 邮件标题
* @param content 邮件内容(html)
* @Description 发送邮件
*/
private void sendEmail(String targetMailAddress, String title, String content) throws Exception {
//0.1 确定连接位置
Properties props = new Properties();
//获取邮箱smtp服务器的地址,
props.setProperty("mail.host", srcMailHost);
//是否进行权限验证。
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.store.protocol", "imap");
Authenticator authenticator = new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
//邮箱名称(srcUsername) : xxx@qq.com取xxx //授权码(srcPassword)
return new PasswordAuthentication(srcUsername, srcPassword);
}
};
//1 获得连接
/**
* props:包含配置信息的对象,Properties类型
* 配置邮箱服务器地址、配置是否进行权限验证(帐号密码验证)等
*
* authenticator:确定权限(帐号和密码)
*
* 所以就要在上面构建这两个对象。
*/
Session session = Session.getDefaultInstance(props, authenticator);
Store store = session.getStore();
store.connect(srcUsername, srcPassword);
//2 创建消息
Message message = new MimeMessage(session);
// 2.1 发件人 xxx@163.com 我们自己的邮箱地址,就是名称
message.setFrom(new InternetAddress(srcMailAddress));
/**
* 2.2 收件人
* 第一个参数:
* RecipientType.TO 代表收件人
* RecipientType.CC 抄送
* RecipientType.BCC 暗送
* 比如A要给B发邮件,但是A觉得有必要给要让C也看看其内容,就在给B发邮件时,
* 将邮件内容抄送给C,那么C也能看到其内容了,但是B也能知道A给C抄送过该封邮件
* 而如果是暗送(密送)给C的话,那么B就不知道A给C发送过该封邮件。
* 第二个参数
* 收件人的地址,或者是一个Address[],用来装抄送或者暗送人的名单。或者用来群发。可以是相同邮箱服务器的,也可以是不同的
* 这里我们发送给我们的qq邮箱
*/
//接收邮件地址(targetMailAddress):xxxxxx126.com
message.setRecipient(RecipientType.TO, new InternetAddress(targetMailAddress));
// 2.3 主题(标题)
message.setSubject(title);
// 2.4 正文
message.setContent(content, "text/html;charset=UTF-8");
//3发送消息
Transport.send(message);
}
2、此方法Demo可行,未进行读取配置信息发送邮件测试
/**
* 使用授权码发送邮件
*
* @param receiveMail 收件人电子邮箱
* @param subject 邮件标题
* @param mailContent 邮件内容
* @throws Exception
*/
public void sendMail(String receiveMail, String subject, String mailContent) throws Exception {
// 发件人电子邮箱
String sendMail = "xxxxxx@qq.com";
String authorizationCode = "授权码";
// 指定发送邮件的主机为 smtp.qq.com
String host = "smtp.qq.com"; //QQ 邮件服务器
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
}
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
// 获取默认session对象
Session session = Session.getDefaultInstance(properties, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(sendMail, authorizationCode); //发件人邮件用户名、授权码
}
});
try {
// 创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(sendMail));
// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO, new InternetAddress(receiveMail));
// Set Subject: 邮件的标题
message.setSubject(subject);
// 设置消息体
message.setText(mailContent);
// 发送消息
Transport.send(message);
System.out.println("==========通过授权码发送邮件成功==========");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}