Springboot(三)之邮件发送功能

SpringBoot 邮件发送功能

1.导入依赖
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-mail</artifactId>
	</dependency>
2.配置yml文件
	spring:
	  mail:
	    host: smtp.qq.com    #qq邮箱的免费stmp
	    username:  #你的邮箱名
	    password:  #开启你邮箱的SMTP功能的授权码,不是邮箱密码
	    properties:
	      mail: 
	        smtp:
	          auth: true #需要验证登录名和密码
	        starttls: 
	          enable: true #需要TLS认证 保证发送邮件安全验证
	          required: true
3.java代码部分
(1)发送一封简单的邮件
@Service
public class MailService {
	
	@Autowired
	private JavaMailSender mailSender;
	
	@Value("${spring.mail.username}")  //配置文件中发送方邮箱地址
	private String formMail;
	
	public void sendSimpleMail(String toMail,String subject,String content) {
		SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
		simpleMailMessage.setFrom(formMail);  //发送方邮箱地址
		simpleMailMessage.setTo(toMail);  //接收方的邮箱地址
		simpleMailMessage.setSubject(subject); //主题名称
		simpleMailMessage.setText(content);  //邮件内容
			
		mailSender.send(simpleMailMessage);
	}
}
(2)发送一封html邮件
public void sendHtmlMail(String toMail,String subject,String content) throws MessagingException {
		
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		//利用helper实现功能扩展,true表示需要创建一个multipart message
		MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
		
		mimeMessageHelper.setFrom(formMail);
		mimeMessageHelper.setTo(toMail);
		mimeMessageHelper.setSubject(subject);
		mimeMessageHelper.setText(content,true);
		
		mailSender.send(mimeMessage);
	}
(3)发送一封带图片的邮件

准备的图片实体类

package com.example.demo.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class InlineResource {
	private String cid;
	private String path;
}

发送一封带图片的邮件

public void sendImageMail(String toMail,String subject,String content,List<InlineResource> resources) throws MessagingException, FileNotFoundException {
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		//true表示需要创建一个multipart message
		MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true); 
		mimeMessageHelper.setFrom(formMail);
		mimeMessageHelper.setTo(toMail);
		mimeMessageHelper.setSubject(subject);
		mimeMessageHelper.setText(content,true);
		for (InlineResource inlineResource : resources) {
			FileSystemResource res = new FileSystemResource(new File(inlineResource.getPath()));
			mimeMessageHelper.addInline(inlineResource.getCid(), res);
		}
		mailSender.send(mimeMessage);
	}
(4)发送一封带附件的邮件
public void sendAttachmentsMail(String toMail,String subject,String content,String filePath) throws MessagingException {
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		
		MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
		
		mimeMessageHelper.setFrom(formMail);
		mimeMessageHelper.setTo(toMail);
		mimeMessageHelper.setSubject(subject);
		mimeMessageHelper.setText(content,true);
		FileSystemResource file = new FileSystemResource(new File(filePath));
		String fileName = filePath.substring(filePath.lastIndexOf("\\"));
		mimeMessageHelper.addAttachment(fileName, file);
		mailSender.send(mimeMessage);
	}
4.测试部分
(1)测试发送一封简单的邮件
package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.example.demo.service.MailService;

@SpringBootTest
class TracyStudyApplicationTests {
	
	@Autowired
	private MailService mailService;
	@Test
	void contextLoads() {
		System.out.println("testtest");
	}
	
	@Test
	public void sendSimpleMail() {
		mailService.sendSimpleMail("562010233@qq.com", "这是一个测试邮件", "这是一个测试邮件");
	}
}
(2)测试发送一封html邮件
@Test
	public void sendHtmlMail() throws MessagingException {
		String html = "<!DOCTYPE html>\r\n" + 
				"<html>\r\n" + 
				"<head>\r\n" + 
				"<meta charset=\"UTF-8\">\r\n" + 
				"<title>Insert title here</title>\r\n" + 
				"</head>\r\n" + 
				"<body>\r\n" + 
				"	<font color=\"red\">发送html</font>\r\n" + 
				"</body>\r\n" + 
				"</html>";

		mailService.sendHtmlMail("562010233@qq.com", "这是一个测试邮件", html);
	}
(3)测试发送一封带图片的邮件
@Test
	public void sendImageMail() throws FileNotFoundException, MessagingException {
		String html = "<!DOCTYPE html>\r\n" + 
				"<html>\r\n" + 
				"<head>\r\n" + 
				"<meta charset=\"UTF-8\">\r\n" + 
				"<title>Insert title here</title>\r\n" + 
				"</head>\r\n" + 
				"<body>\r\n" + 
				"	<font color=\"red\">发送html</font>\r\n" + 
				"   <img src=\"cid:image1\"/>"+
				"</body>\r\n" + 
				"</html>";
		List<InlineResource> list = new ArrayList<InlineResource>();
		String path = "C:\\Users\\351af8f23285feaf20c4120679d5d46d_hd.jpg";
	    InlineResource resource = new InlineResource("image1", path);
	    list.add(resource);
		mailService.sendImageMail("562010233@qq.com", "这是一个测试邮件", html, list);
	}
(4)测试发送一封带附件的邮件
@Test
	public void sendAttachmentsMail() throws MessagingException {
		String html= "<!DOCTYPE html>\r\n" + 
				"<html>\r\n" + 
				"<head>\r\n" + 
				"<meta charset=\"UTF-8\">\r\n" + 
				"<title>Insert title here</title>\r\n" + 
				"</head>\r\n" + 
				"<body>\r\n" + 
				"	<font color=\"red\">发送html</font>\r\n" + 
				"</body>\r\n" + 
				"</html>";
		String path = "C:\\Users\\351af8f23285feaf20c4120679d5d46d_hd.jpg";
		mailService.sendAttachmentsMail("562010233@qq.com", "这是一个测试邮件", html, path);
	}
5.bug总结部分

(1)报错:org.springframework.mail.MailAuthenticationException: Authentication failed

解决:发送方邮箱的smtp权限一定要开启;
配置文件中的密码并不是真实的邮箱密码,而是开启smtp权限的授权码

(2)报错:
———图片或者附件发送都变成了bin文件
在这里插入图片描述
——html变成了普通文件
在这里插入图片描述
解决:除了发送简单邮件外,都是使用MimeMessageHelper,进行数据绑定,创建时要设置true,绑定content参数的时候也要设置true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值