admin管理员组文章数量:1663669
本文参考spring官网email接口文档所写。
spring-email官方网址:https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/integration.html#mail
1:添加相关依赖
<!-- https://mvnrepository/artifact/org.springframework.boot/spring-boot-starter-mail -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
2:先建一个邮箱收件人model
package com.dev.model.email; import java.io.Serializable; /** * Created on 2019-08-02 16:16. * * @author zgq7 */ public class EmailModel implements Serializable { /** * 收件人姓名 **/ private String recieverName; /** * 收件人邮箱地址 **/ private String recieverEmailAddress; /** * 邮件主题 **/ private String emailTheme; /** * 邮件内容 **/ private String emailContent; public String getRecieverName() { return recieverName; } public void setRecieverName(String recieverName) { this.recieverName = recieverName; } public String getRecieverEmailAddress() { return recieverEmailAddress; } public void setRecieverEmailAddress(String recieverEmailAddress) { this.recieverEmailAddress = recieverEmailAddress; } public String getEmailTheme() { return emailTheme; } public void setEmailTheme(String emailTheme) { this.emailTheme = emailTheme; } public String getEmailContent() { return emailContent; } public void setEmailContent(String emailContent) { this.emailContent = emailContent; } }
3:编写一个邮箱工具类
package com.dev.utils.email; import com.dev.model.email.EmailModel; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.MailException; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessagePreparator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * Created on 2019-08-02 16:06. * * @author zgq7 */ public class MailSendUtils { private static final Logger logger = LoggerFactory.getLogger(MailSendUtils.class); /** * 发送者地址 **/ private static String posterAdress = "xxx@qq"; /** * 发送者姓名 **/ private static final String posterName = "xxx"; @Autowired private JavaMailSender javaMailSender; @Autowired private JavaMailSenderImpl javaMailSenderImpl; /** * 文本发送 **/ public void sendEmailAsText(final EmailModel emailModel) { MimeMessagePreparator mimeMessagePreparator = mimeMessage -> { mimeMessage.setFrom(posterAdress); mimeMessage.setRecipients(Message.RecipientType.TO, emailModel.getRecieverEmailAddress()); mimeMessage.setText("<html><body>" + "hello:" + emailModel.getRecieverName() + "<br>" + "msg:" + emailModel.getEmailContent() + "<br>" + "from :" + posterName + "</body></html>"); }; try { this.javaMailSender.send(mimeMessagePreparator); logger.info("邮箱已返送至[{}]邮箱!", emailModel.getRecieverName()); } catch (MailException e) { logger.error("邮箱异常:{}", e); } } /** * html 网页发送 * 该方法为同步方法 **/ public void sendEmailAsSysExceptionHtml(final EmailModel emailModel) { MimeMessage mimeMessage = javaMailSenderImpl.createMimeMessage(); MimeMessageHelper mimeMessageHelper; try { mimeMessageHelper = new MimeMessageHelper(mimeMessage, true); mimeMessageHelper.setFrom(posterAdress); mimeMessageHelper.setTo(emailModel.getRecieverEmailAddress()); mimeMessageHelper.setText("<!DOCTYPE html>\n" + "<html>\n" + "\t<head>\n" + "\t\t<meta charset=\"UTF-8\">\n" + "\t\t<title></title>\n" + "\t</head>\n" + "\t<style>\n" + "\t\tbody,\n" + "\t\ttable,\n" + "\t\ttbody,\n" + "\t\ttr {\n" + "\t\t\tbackground-color: aquamarine;\n" + "\t\t\tbackground-size: 100%;\n" + "\t\t}\n" + "\t</style>\n" + "\n" + "\t<body>\n" + "\t\t<table border=\"solid 2 px\" align=\"center\" style=\"text-align: center;\">\n" + "\t\t\t<tbody>\n" + "\t\t\t\t<tr>\n" + "\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">时间</td>\n" + "\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\">" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "</td>\n" + "\t\t\t\t</tr>\n" + "\t\t\t\t<tr>\n" + "\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">信息</td>\n" + "\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\">" + "测试" + "</td>\n" + "\t\t\t\t</tr>\n" + "\t\t\t\t<tr>\n" + "\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">堆栈</td>\n" + "\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\" style=\"text-align: left;\">" + emailModel.getEmailContent() + "</td>\n" + "\t\t\t\t</tr>\n" + "\t\t\t</tbody>\n" + "\t\t</table>\n" + "\t</body>\n" + "\n" + "</html>" , true); this.javaMailSender.send(mimeMessage); logger.info("邮箱已返送至[{}]邮箱!", emailModel.getRecieverName()); } catch (MessagingException e) { e.printStackTrace(); } catch (MailException e) { logger.error("邮箱异常:{}", e); } } }
notice3.1:可自行设置文本发送api、html发送api、图片发送api等。我的工具包中只写了文本发送和html发送两种格式的api。
4:在IOC中注册EmailUtils的bean
package com.dev.config; import com.dev.utils.email.MailSendUtils;
/** * Created by zgq7 on 2019/6/6. * 注册一些bean进入ioc * */ @Configuration public class BeanRegistryCenterConfig {
/** * 邮箱工具类 bean 注册 **/ @Bean public MailSendUtils mailSendUtils() { return new MailSendUtils(); } }
5:在Application.xml中添加一下信息
spring.mail.host=smtp.qq spring.mail.port=587 spring.mail.username=你的qq@qq spring.mail.password=xxxxx spring.mail.protocol=smtp spring.mail.default-encoding=UTF-8
notice1:spring.mail.usernam,是你的qq邮箱地址
notice2:spring.mail.password,不要用真正的qq邮箱密码,而是qq邮箱第三方服务授权码
下面是获取qq邮箱第三方服务授权码的操步骤:
5.1:登录qq邮箱,进入首页,点击设置按钮
5.2:点击账户设置
并拉到最下面点击我圈中的开启按钮
然后会弹出一个小框提示你发信息,发就行了,发送之后点击验证会收到授权码
除了spring.mail.username、spring.mail.password 两项要换成自己的 ,其他的和我一样就行;
6:进行邮件发送测试
6.1:文本发送测试
/** * Java Mail 文本发送 **/ @Test public void EmaiTest() { EmailModel emailModel = new EmailModel(); emailModel.setEmailTheme("测试"); emailModel.setRecieverName("测试"); emailModel.setEmailContent("测试"); emailModel.setRecieverEmailAddress("xxx@qq"); mailSendUtils.sendEmailAsText(emailModel); }
发送成功后:
目标邮箱收到的邮件:
6.2:html发送测试
/** * Java Mail 网页发送 **/ @Test public void EmailTest2() throws MessagingException, InterruptedException { EmailModel emailModel = new EmailModel(); emailModel.setEmailTheme("测试"); emailModel.setRecieverName("测试"); emailModel.setEmailContent("测试"); emailModel.setRecieverEmailAddress("xxx@qq"); mailSendUtils.sendEmailAsSysExceptionHtml(emailModel); }
目标邮箱收到的邮件:
这个展示效果可以自己设置。
7:注意点:发送邮件者的邮箱地址为qq邮箱,否则会QQ邮箱认证报错。而接收者邮箱可以为其他的邮箱,如企业邮箱、网易邮箱等。
看过的点个赞好不好啊。
转载于:https://wwwblogs/zgq7/p/11314895.html
版权声明:本文标题:springboot2.x整合JavaMail以qq邮箱发送邮件 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1730001539a1218845.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论