看了网上大多用的是网易云和qq邮箱,因实际项目中要求把短信推送换成阿里邮箱。
正常情况下都是需要授权码的。但是阿里邮箱不需要用授权码,直接使用账户和密码。
请看以下实际操作:
1.开通POP和MAP
2.引入依赖
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
3.配置application.yml
spring:
# 发送邮件配置
mail:
host: smtp.qiye.aliyun.com
port: 465
username: 自己的阿里邮箱
password: 密码(不是授权码)
4.EmailUtil工具类
/**
* 邮件发送工具
*/
@Component
public class EmailUtil {
@Value("${spring.mail.host}")
private String host;
@Value("${spring.mail.port}")
private String port;
@Value("${spring.mail.username}")
private String username;
@Value("${spring.mail.password}")
private String password;
public void sendEmail(String toEmail, String content) {
try {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
Properties props = System.getProperties();
props.setProperty("mail.smtp.host", host);
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
//设置端口
props.setProperty("mail.smtp.port", port);
//启用调试
props.setProperty("mail.debug", "true");
props.setProperty("mail.smtp.socketFactory.port", port);
props.setProperty("mail.smtp.auth", "true");
//建立邮件会话
Session session = Session.getDefaultInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
//建立邮件对象
MimeMessage message = new MimeMessage(session);
//设置邮件的发件人、收件人、主题
//发件人账号
message.setFrom(new InternetAddress(username));
//收件人账号
message.setRecipients(Message.RecipientType.TO, toEmail);
//邮件标题
message.setSubject("标题名称***");
//内容
Multipart multipart = new MimeMultipart();
BodyPart contentPart = new MimeBodyPart();
//邮件内容
contentPart.setContent(content, "text/html;charset=utf-8");
multipart.addBodyPart(contentPart);
message.setContent(multipart);
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
5.测试
@SpringBootTest
class DataMonitorApplicationTests {
@Autowired
private EmailUtil emailUtil;
@Test
void contextLoads() {
}
@Test
void sendStringEmail() {
emailUtil.sendEmail("xxx.com(邮箱号)", "测试(内容)");
}
}
结果: