您的位置 首页 java

javaMailSender发送邮件

javaMailSender发送邮件

javaMailSender发送邮件

应用场景

在一些项目中,可能要用到报警提醒。常见的报警提醒有发送短信和发送邮件,由于发送短信需要对接第三方api且需要付费,这篇文章将介绍如何使用java实现发送邮件,包括发送普通文本邮件、普通html格式的邮件、配置模板的html格式邮件。

技术说明

Jdk8

Springboot 2.2.2.RELEASE

spring-boot-starter-mail

spring-boot-starter-thymeleaf,springboot 2.x版本后不再支持velcity模板

示例代码:

开启邮箱的smtp功能

以QQ邮箱为例:

》登录qq邮箱

》设置

》账户

》开启” POP3 /SMTP服务”

》点击下方的”生成授权码”

》短信验证后即可得到一个授权码,该授权码可以生成多次,多个授权码可以同时使用,更改邮箱密码后之前生成的所有授权码失效。

POP3和IMAP的区别?

如果只是通过java发送邮件,开通POP3服务即可;

POP3允许客户端下载邮件服务器上的邮件,但是在邮件客户端对该邮件的所有操作不会反馈到邮件服务器上。比如,在 foxmail 上你将邮件归档到一个文件夹,在QQ邮箱是不会体现该归档操作的。如果你使用的是IMAP协议,则该归档操作是会反馈到邮箱服务器的,IMAP是双向的。

详细可参考说明:

示例代码

项目结构

Pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="#34; xmlns:xsi="#34;
 xsi:schemaLocation=" #34;>
 <modelVersion>4.0.0</modelVersion>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.2.2.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.firechou.demo</groupId>
 <artifactId>demo-mail</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>demo-mail</name>
 <description>Demo project for Spring Boot</description>

 <properties>
 <java.version>1.8</java.version>
 </properties>

 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter</artifactId>
 </dependency>

 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 <exclusions>
 <exclusion>
 <groupId>org. junit .vintage</groupId>
 <artifactId>junit-vintage-engine</artifactId>
 </exclusion>
 </exclusions>
 </dependency>

 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-mail</artifactId>
 </dependency>

 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-thymeleaf</artifactId>
 </dependency>

 </dependencies>

 <build>
 < plugin s>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build>

</project> 

Application.properties配置文件

spring.mail.host=smtp.qq.com
## 发送方的邮箱
spring.mail. username =xxx@qq.com
## 对于qq邮箱而言,密码指的是发送方的授权码
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

## thymeleaf配置
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/template/
spring.thymeleaf.suffix=.html
spring.thymeleaf.encoding=utf-8
# 收件人,测试
mail.to.username=xxx@qq.com 

测试代码

package com.firechou.demo.demomail;

import org.junit.jupiter.api.Test;
import org.springframework.beans. factory . annotation .Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMail message ;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.HashMap;
import java.util.Map;

@SpringBootTest
class DemoMailApplicationTests {

  @Autowired 
 private JavaMailSender javaMailSender;

 @Value("${spring.mail.username}")
 private String fromUserName;

 @Value("${mail.to.username}")
 private String toUserName;

 @Autowired
 private TemplateEngine templateEngine;

 /**
 * 发送普通文本邮件
 */
 @Test
 void sendByText() {

 SimpleMailMessage message = new SimpleMailMessage();
 message.setFrom(fromUserName);
 message.setTo(toUserName);
 message.setSubject("观影调查");
 message.setText("你觉得庆余年好看吗?");

 javaMailSender.send(message);
 }

 /**
 * 发送html格式邮件
 *
 * @throws MessagingException
 */
 @Test
 void sendByHtml() throws MessagingException {
 MimeMessage message = javaMailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(message, true);

 helper.setFrom(fromUserName);
 helper.setTo(toUserName);
 helper.setSubject("测试标题");

 StringBuffer sb = new StringBuffer();
 sb. append ("<h1>大标题-h1</h1>")
 .append("<p style='color:#F00'>红色字</p>")
 .append("<p style='text-align:right'>右对齐</p>");
 helper.setText(sb.toString(), true);

 javaMailSender.send(message);
 }

 /**
 * 发送模板文件,在resources资源文件夹下配置模板文件
 *
 * @throws MessagingException
 */
 @Test
 void sendByTemplate() throws MessagingException {

 MimeMessage message = javaMailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(message, true);

 helper.setFrom(fromUserName);
 helper.setTo(toUserName);
 helper.setSubject("测试标题");

 HashMap<String, Object> dataMap = new HashMap<>();
 dataMap.put("title", "模板测试");
 dataMap.put("context", "这是内容");
 String text = createTemplate(dataMap, "emailTemplate.html", templateEngine);

 helper.setText(text, true);

 javaMailSender.send(message);

 }

 /**
 * 创建模板字符串
 * @param dataMap
 * @param templateName
 * @param templateEngine
 * @return
 */
 private static String createTemplate(Map<String, Object> dataMap, String templateName, TemplateEngine templateEngine) {

 // context对象用于注入要在模板上渲染的信息
 Context context = new Context();
 context.setVariables(dataMap);
 String emailText = templateEngine.process(templateName, context);
 System.out.println(emailText);

 // 返回模板源代码String类型
 return emailText;
 }

} 

测试结果

javaMailSender发送邮件

javaMailSender发送邮件

文章来源:智云一二三科技

文章标题:javaMailSender发送邮件

文章地址:https://www.zhihuclub.com/193054.shtml

关于作者: 智云科技

热门文章

网站地图