SpringBoot邮件发送通知或邮件群发通知
友情提醒:需要同时发送给多人的时间会长一些,可以给代码做时间优化,也可以使用原生的mail jar包,下面给上依赖,下面两个任选其一就可以
<!-- 邮件发送 -->
<!-- 邮件通知原生 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</dependency>
<!-- 时间会久一点 -->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-mail</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
</dependency>
直接上代码,需要的参数也都很详细的标注出来了,直接postman测试就可以
/**
* @param sendMail 发送人邮箱
* @param authorizationCode 授权码
* @param takeMails 收件人邮箱
* */
@ApiOperation("测试发送邮件")
@GetMapping("/sendMail")
public CommonResultPojo sendMail (@Param("sendMail")String sendMail,@Param("authorizationCode")String authorizationCode,
@Param("takeMail")String[] takeMails) throws Exception {
Properties prop = new Properties();
prop.setProperty("mail.host", "smtp.qq.com"); //todo 设置QQ邮件服务器
prop.setProperty("mail.transport.protocol", "smtp"); //todo 邮件发送协议
prop.setProperty("mail.smtp.auth", "true"); //todo 需要验证用户名密码
//todo QQ邮箱设置SSL加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
//todo 创建定义整个应用程序所需的环境信息的 Session 对象
Session session = Session.getDefaultInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//todo 传入发件人的姓名和授权码
return new PasswordAuthentication(sendMail,authorizationCode);
}
});
//todo 通过session获取transport对象
Transport transport = session.getTransport();
//todo 通过transport对象邮箱用户名和授权码连接邮箱服务器
transport.connect("smtp.qq.com",sendMail,authorizationCode);
//todo 创建邮件,传入session对象
for(String takeMail:takeMails) {
MimeMessage mimeMessage = complexEmail(session, sendMail, takeMail);
//todo 发送邮件
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
}
//todo 关闭连接
transport.close();
return new CommonResultPojo(200,"发送成功",1);
}
//todo 发送邮件方法
public static MimeMessage complexEmail(Session session,@Param("sendMail")String sendMail,
@Param("takeMail") String takeMails) throws MessagingException {
//todo 消息的固定信息
MimeMessage mimeMessage = new MimeMessage(session);
//todo 发件人
mimeMessage.setFrom(new InternetAddress(sendMail));
//todo 收件人
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(takeMails));
//todo 邮件标题
mimeMessage.setSubject("带图片和附件的邮件");
//todo 准备图片数据
MimeBodyPart image = new MimeBodyPart();
DataHandler handler = new DataHandler(new FileDataSource("D:\\hello.jpg"));
image.setDataHandler(handler);
image.setContentID("test.png"); //todo 设置图片id
//todo 准备文本
MimeBodyPart text = new MimeBodyPart();
text.setContent("这是一段文本<img src='cid:test.png'>", "text/html;charset=utf-8");
//todo 附件
MimeBodyPart appendix = new MimeBodyPart();
appendix.setDataHandler(new DataHandler(new FileDataSource("D:\\zzzz.txt")));
appendix.setFileName("test.txt");
//todo 拼装邮件正文
MimeMultipart mimeMultipart = new MimeMultipart();
mimeMultipart.addBodyPart(image);
mimeMultipart.addBodyPart(text);
mimeMultipart.setSubType("related"); //todo 文本和图片内嵌成功
//todo 将拼装好的正文内容设置为主体
MimeBodyPart contentText = new MimeBodyPart();
contentText.setContent(mimeMultipart);
//todo 拼接附件
MimeMultipart allFile = new MimeMultipart();
allFile.addBodyPart(appendix); //todo 附件
allFile.addBodyPart(contentText); //todo 正文
allFile.setSubType("mixed"); //todo 正文和附件都存在邮件中,所有类型设置为mixed
//todo 放到Message消息中
mimeMessage.setContent(allFile);
mimeMessage.saveChanges(); //todo 保存修改
if(mimeMessage !=null){
System.out.println("邮件发送成功!!");
}else {
System.out.println("邮件发送失败!!");
}
return mimeMessage;
}
同时发给多人结果如下:
{
"code": 200,
"message": "发送成功",
"data": 1
}