一、简介
SpringEmail的具体核心是MailSender套接字。 MailSender的实现可以向短信服务器发送电子邮件,邮件服务器可以实现发送电子邮件的功能。
Spring附带了一个MailSender实现JavaMailSenderImpl,它使用JavaMailAPI来发送Email。 在Spring或SpringBoot应用程序发送Email之前,我们必须将JavaMailSenderImpl组装为Spring应用程序上下文的bean。
回到底部
二、配置
1.pom.xml
org.springframework.boot spring-boot-starter-mail
2. 应用程序.yml
如果你想学习Java工程,高性能和分布式,简单易懂。 微服务、Spring、MyBatis、Netty源码分析的同学可以加我的Java中级交流:854630135。群里有阿里大牛的现场讲解技术,Java小互联网技术的视频免费分享给大家。
spring: mail: host: smtp.163.com port: 25 username: 159****2662@163.com password: ***********
host属性默认为JavaMail会话的主机; port端口默认为标准SMTP端口25; 如果邮件服务器需要认证,还需要设置用户名和密码。
这里我使用的是163短信服务器,需要在163邮箱中启用客户端授权密码,否则会报550认证错误。
3.EmailConfig.java
在这里,我们将 JavaMailSenderImpl 组装为 Spring 应用程序上下文的 Bean。 同时需要注意的是163网站源码,这里使用了@ConfigurationProperties注解,要求属性有setter方法,并在启动类中使用@EnableConfigurationProperties注解才能生效。
@Configuration @ConfigurationProperties(prefix = "spring.mail") public class EmailConfig { private String host; private Integer port; private String username; private String password; @Bean public MailSender javaMailSender() { JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); javaMailSender.setHost(host); javaMailSender.setPort(port); javaMailSender.setUsername(username); javaMailSender.setPassword(password); return javaMailSender; } public void setHost(String host) { this.host = host; } public void setPort(Integer port) { this.port = port; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } }
如果你想学习Java工程,高性能和分布式,简单易懂。 微服务、Spring、MyBatis、Netty源码分析的同学可以加我的Java中级交流:854630135。群里有阿里大牛的现场讲解技术,Java小互联网技术的视频免费分享给大家。
回到底部
3.发送
使用javaMailSender,发送短信是一件简单的事情。 我们只需要将javaMailSender的bean注入到自己的实现类中,然后使用JavaMailAPI来发送Email即可。
1. 短信发送
public void sendSimpleEmail() { // 构造Email消息 SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("159****2662@163.com"); message.setTo("****@qianxx.com"); message.setSubject("邮件主题"); message.setText("邮件内容"); javaMailSender.send(message); }
纯文本Email就是构造SimpleMailMessage实例,该对象可以非常方便地发送Email消息。
2. 附件短信发送
Spring 的电子邮件功能不仅限于纯文本电子邮件。 我们还可以添加附件。 如果要发送一封带有附件的电子邮件,关键方法是创建多部分类型的消息——电子邮件由多个部分组成,其中一个部分是电子邮件正文,其他部分是附件。 为了发送多部分类型的电子邮件,您需要创建一条 MIME(多用途互联网邮件扩展)消息。
public void mimeEmail() throws MessagingException { // MimeMessage 本身的 API 有些笨重,我们可以使用 MimeMessageHelper MimeMessage mimeMessage = javaMailSender.createMimeMessage(); // 第二个参数是 true ,表明这个消息是 multipart类型的/ MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true); mimeMessageHelper.setFrom("159****2662@163.com"); mimeMessageHelper.setTo("****@qianxx.com"); mimeMessageHelper.setSubject("附件邮件主题"); mimeMessageHelper.setText("附件邮件内容"); //添加附件,第一个参数表示添加到 Email 中附件的名称,第二个参数是图片资源 mimeMessageHelper.addAttachment("boot.png", new ClassPathResource("public/images/boot.png")); javaMailSender.send(mimeMessage); }
如果你想学习Java工程,高性能和分布式,简单易懂。 微服务、Spring、MyBatis、Netty源码分析的同学可以加我的Java中级交流:854630135。群里有阿里大牛的现场讲解技术,Java小互联网技术的视频免费分享给大家。
3.富文本消息发送
Spring的Email功能不仅可以添加附件,甚至可以使用HTML来美化邮件正文的内容。 发送富文本Email和发送简单文本Email没有太大区别,关键是将setText()方法的消息文本设置为HTML,并将第二个参数设置为true,表示这是HTML富文本。
public void htmlEmail() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true); mimeMessageHelper.setFrom("159****2662@163.com"); mimeMessageHelper.setTo("****@qianxx.com"); mimeMessageHelper.setSubject("富文本邮件主题"); String html = "Hello,SpringBoot
"; mimeMessageHelper.setText(html, true); // 设置内嵌元素 cid,第一个参数表示内联图片的标识符,第二个参数标识资源引用 mimeMessageHelper.addInline("boot", new ClassPathResource("public/images/boot.png")); javaMailSender.send(mimeMessage); }
回到底部
四、使用Thymeleaf模板
HTML 标签的字符串连接是一件棘手的事情。 因为很难在头脑中解析 HTML 标签并想象它渲染后的样子。 而将 HTML 与 Java 代码混合会使这个问题变得更加复杂。
因此,Spring给出的解决方案是:使用模板生成HTML文本,并且有多种模板解决方案可供选择,包括ApacheVelocity和Thymeleaf。 这里我们只介绍Thymeleaf模板的用法(假设读者已经熟悉Thymeleaf模板并知道如何在SpringBoot中使用它们)。
1.Thymeleaf模板—email.html
Craig Walls says...
Hello Boot!
2. 邮件发送
@RunWith(SpringRunner.class) @SpringBootTest public class ThymeleafApplicationTests { @Autowired private JavaMailSender javaMailSender; @Autowired private SpringTemplateEngine templateEngine; @Test public void contextLoads() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true); mimeMessageHelper.setFrom("159****2662@163.com"); mimeMessageHelper.setTo("****@qianxx.com"); mimeMessageHelper.setSubject("ThymeLeaf 模板邮件"); // 利用 Thymeleaf 模板构建 html 文本 Context ctx = new Context(); ctx.setVariable("title", "Craig Walls"); ctx.setVariable("content", "Hello Boot!"); String emailText = templateEngine.process("email/email", ctx); mimeMessageHelper.setText(emailText, true); // 设置内嵌元素 cid,第一个参数表示内联图片的标识符,第二个参数标识资源引用 mimeMessageHelper.addInline("boot", new ClassPathResource("/static/img/boot.png")); javaMailSender.send(mimeMessage); } }
如果你想学习Java工程163网站源码,高性能和分布式,简单易懂。 微服务、Spring、MyBatis、Netty源码分析的同学可以加我的Java中级交流:854630135。群里有阿里大牛的现场讲解技术,Java小互联网技术的视频免费分享给大家。