spring boot2.x版本基于QQ邮箱实现邮件发送

Spring Boot 中对于邮件发送,提供了相关的自动化配置类,使得邮件发送变得非常容易,这里使用QQ邮箱实现一下邮件发送的简单demo。

1.准备工作

开启QQ邮箱的POP3/SMTP服务和IMAP/SMTP服务:

登录邮箱,点击设置–>账户:
在这里插入图片描述
往下划,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启:
在这里插入图片描述
获取授权码:
在这里插入图片描述
这里你会获取到一个授权码,注意:这才是你发送邮件的账户的真正密码,不是你平时的QQ邮箱密码!

2.编码实现

1.创建一个spring boot工程:

2.导入maven依赖:

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

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</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>

3.编写配置文件application.properties:

server.port=8090
#mail server host
spring.mail.host=smtp.qq.com
#username
spring.mail.username=2516222794@qq.com
#password 授权码 不是QQ密码
spring.mail.password=xxxxxxxxxx
spring.mail.default-encoding=UTF-8
#send mail
mail.fromMail.addr=2516222794@qq.com

4.编写邮件发送Service接口:

public interface MailService {
	/**
	 * 发送简单纯文字内容信息
	 * 
	 * @param to      邮件接受者
	 * @param subject 邮件主题
	 * @param content 邮件内容
	 */
	void sendSimpleMail(String to, String subject, String content);

	/**
	 * 发送html内容格式的邮件
	 * 
	 * @param to      邮件接受者
	 * @param subject 邮件主题
	 * @param content 邮件内容
	 */
	void sendHtmlMail(String to, String subject, String content);

	/**
	 * 发送带有附件的邮件
	 * 
	 * @param to       邮件接受者
	 * @param subject  邮件主题
	 * @param content  邮件内容
	 * @param filePath 附件路径
	 */

	void sendAttachmentMail(String to, String subject, String content, String filePath);

	/**
	 * 发送带静态资源的邮件
	 * 
	 * @param to      邮件接受者
	 * @param subject 邮件主题
	 * @param content 邮件内容
	 * @param rscPath 资源路径
	 * @param rscId   资源id
	 */
	void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId);
}

5.接口实现:

@Component
public class MailServiceImpl implements MailService {

	private final Logger logger = LoggerFactory.getLogger(this.getClass());

	@Autowired
	private JavaMailSender mailSender;

	@Value("${mail.fromMail.addr}")
	private String from;

	@Override
	public void sendSimpleMail(String to, String subject, String content) {
		SimpleMailMessage message = new SimpleMailMessage();
		message.setFrom(from);
		message.setTo(to);
		message.setSubject(subject);
		message.setText(content);

		try {
			mailSender.send(message);
			logger.info("简单的邮件发送!");
			System.out.println("简单的邮件发送!");
		} catch (MailException e) {
			e.printStackTrace();
			logger.error("发送邮件时异常!", e);
		}

	}

	@Override
	public void sendHtmlMail(String to, String subject, String content) {
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		try {
			// true表示需要创建一个multipart message
			MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
			helper.setFrom(from);
			helper.setTo(to);
			helper.setSubject(subject);
			helper.setText(content, true);

			mailSender.send(mimeMessage);
			logger.info("html邮件发送成功");
			System.out.println("html邮件发送成功");
		} catch (MessagingException e) {
			e.printStackTrace();
			logger.error("发送邮件时异常!", e);
		}
	}

	@Override
	public void sendAttachmentMail(String to, String subject, String content, String filePath) {
		MimeMessage mimeMessage = mailSender.createMimeMessage();

		try {
			MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
			helper.setFrom(from);
			helper.setTo(to);
			helper.setSubject(subject);
			helper.setText(content, true);

			FileSystemResource file = new FileSystemResource(new File(filePath));
			String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
			// 添加多个附件可以使用多条 helper.addAttachment(fileName, file)
			helper.addAttachment(fileName, file);

			mailSender.send(mimeMessage);
			logger.info("带附件的邮件已经发送。");
			System.out.println("带附件的邮件已经发送。");
		} catch (MessagingException e) {
			e.printStackTrace();
			logger.error("发送邮件时异常!", e);
		}
	}

	@Override
	public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId) {
		MimeMessage mimeMessage = mailSender.createMimeMessage();

		try {
			MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
			helper.setFrom(from);
			helper.setTo(to);
			helper.setSubject(subject);
			helper.setText(content, true);
			FileSystemResource res = new FileSystemResource(new File(rscPath));
			helper.addInline(rscId, res);

			mailSender.send(mimeMessage);
			logger.info("嵌入静态资源的邮件已经发送。");
			System.out.println("嵌入静态资源的邮件已经发送。");
		} catch (MessagingException e) {
			e.printStackTrace();
			logger.error("发送嵌入静态资源的邮件时发生异常!", e);
		}
	}
}

6.创建测试类:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MailServiceTest {

	@Autowired
	private MailServiceImpl mailService;
}

a.测试简单邮件发送:

	@Test
	public void testSimpleMail() throws Exception {
		mailService.sendSimpleMail("619312514@qq.com", "test simple mail", " hello this is simple mail");
	}

收到邮件:
在这里插入图片描述
b.测试带有html格式邮件发送:

	@Test
	public void testHtmlMail() throws Exception {
		String content = "<html><body><h3 style='color:blue'>hello world ! 这是一封Html邮件!</h3></body></html>";
		mailService.sendHtmlMail("619312514@qq.com", "test simple html mail", content);
	}

收到邮件:
在这里插入图片描述
c.测试带有附件的邮件发送:

	@Test
	public void sendAttachmentsMail() {
		String filePath = "C:\\Users\\DELL\\Desktop\\备注.txt";
		mailService.sendAttachmentMail("619312514@qq.com", "主题:带附件的邮件", "有附件,请查收!", filePath);
	}

收到邮件:
在这里插入图片描述
d.测试带有静态资源(背景图片)的邮件发送:

	@Test
	public void sendInlineResourceMail() {
		String rscId = "1001";
		String content = "<html><body>这是有图片的邮件:<img src=\'cid:" + rscId + "\' /></body></html>";
		String imgPath = "C:\\Users\\DELL\\Desktop\\22.jpg";

		mailService.sendInlineResourceMail("619312514@qq.com", "主题:这是有图片的邮件", content, imgPath, rscId);
	}

收到邮件:
在这里插入图片描述
注意QQ邮箱查看spring boot发送的带背景图片的邮件有点特殊,直接点进去是看不到的!

点击邮箱首页:
在这里插入图片描述
点击未读邮件:
在这里插入图片描述
点全文,即可看到:
在这里插入图片描述
在这里插入图片描述
最后,我们使用Thyemeleaf来创建一个邮件模板,动态填充数据,然后发送邮件:

在resources目录下的templates目录下,创建一个emailTemplate.html

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>emailTemplate</title>
</head>
<body>
	您好,这是验证邮件,请点击下面的链接完成验证,
	<br />
	<a href="#" th:href="@{ https://blog.csdn.net/{uid}(uid=${uid}) }">激活账号</a>
</body>
</html>

测试一下模板邮件的发送:

	@Test
	public void sendTemplateMail() {
		ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
		resolver.setPrefix("/templates/");
		resolver.setSuffix(".html");
		TemplateEngine templateEngine = new TemplateEngine();
		templateEngine.setTemplateResolver(resolver);

		Context context = new Context();
		context.setVariable("uid", "C_AJing");
		String emailContext = templateEngine.process("mailTemplate", context);

		mailService.sendHtmlMail("619312514@qq.com", "主题:这是模板邮件", emailContext);

	}

如果报错,追加maven依赖:

		<dependency>
			<groupId>ognl</groupId>
			<artifactId>ognl</artifactId>
			<version>3.2.12</version>
		</dependency>

收到的邮件:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot可以使用JavaMailSender来发送邮件。下面是使用QQ邮箱发送邮件的步骤: 1. 在QQ邮箱中开启SMTP服务,并生成授权码。 2. 在pom.xml中添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 3. 在application.properties中配置邮箱信息: ```properties spring.mail.host=smtp.qq.com spring.mail.port=587 spring.mail.username=你的QQ邮箱 spring.mail.password=你的授权码 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true ``` 4. 创建一个邮件服务类: ```java @Service public class MailService { @Autowired private JavaMailSender mailSender; public void sendMail(String to, String subject, String content) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("你的QQ邮箱"); message.setTo(to); message.setSubject(subject); message.setText(content); mailSender.send(message); } } ``` 5. 在需要发送邮件的地方调用MailService的sendMail方法即可。 ```java @Autowired private MailService mailService; mailService.sendMail("收件人邮箱", "邮件主题", "邮件内容"); ``` 注意事项: 1. 需要在QQ邮箱中开启SMTP服务,并生成授权码。 2. 如果使用SSL,需要将port改为465,并配置spring.mail.properties.mail.smtp.ssl.enable=true。 3. 邮箱的用户名和密码需要进行加密处理,可以使用spring-boot-starter-security依赖来加密。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值