日常生活中,我们或多或少的都会用到发送邮件的功能。在spring框架中我们用的是JavaMailSender相关接口来实现发送邮件,springboot对JavaMailSender相关接口做了进一步的封装,今天看看在springboot中如何发送邮件。话不多说,我们看代码。
首先,我们创建一个springboot的项目,并引入相关依赖文件,pom.xml文件如下:
1 <dependencies>
2 <dependency>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter</artifactId>
5 <version>1.5.10.RELEASE</version>
6 </dependency>
7
8 <dependency>
9 <groupId>org.springframework.boot</groupId>
10 <artifactId>spring-boot-starter-mail</artifactId>
11 <version>1.5.10.RELEASE</version>
12 </dependency>
13
14 <dependency>
15 <groupId>org.springframework.boot</groupId>
16 <artifactId>spring-boot-starter-test</artifactId>
17 <scope>test</scope>
18 <version>1.5.10.RELEASE</version>
19 </dependency>
20
21 <dependency>
22 <groupId>junit</groupId>
23 <artifactId>junit</artifactId>
24 <version>4.12</version>
25 <scope>test</scope>
26 </dependency>
27 </dependencies>
其次,我们创建发送邮件的接口,及对应的实现类。发送邮件时有几个必须要的参数如 发件人,收件人,邮件主题,邮件内容,所以代码如下:
1 public interface MailService {
2
3 void sendEmail(String to, String content, String subject);
4
5 }
1 @Service
2 public class MailServiceImpl implements MailService {
3
4 private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
5
6 @Autowired
7 private JavaMailSender javaMailSender;
8
9 private String from = "you email address";//xxxx@qq.com
10
11 public void sendEmail(String to, String content, String subject) {
12 SimpleMailMessage message = new SimpleMailMessage();
13 message.setText(content);
14 message.setFrom(from);
15 message.setSubject(subject);
16 message.setTo(to);
17 logger.info("邮件开始发送。。。");
18 javaMailSender.send(message);
19 logger.info("邮件已发送。。。");
20 }
21
22 }
然后,发送邮件时我们需要使用的邮件服务器,账号,此处我们使用腾讯邮件服务,需要将邮件服务的信息配置出来,以便在发送邮件时使用,application.properties中的配置代码如下:
spring.mail.host=smtp.qq.com
#账号
spring.mail.username=xxxx@qq.com
#密码 qq邮箱使用第三方客户端发送邮件时,需要将密码改为授权码
spring.mail.password=xxxxxxxxxxxxxx
#ssl
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
至此,我们邮件服务的配置信息及发邮件的方法都已经写好了,我们写个测试方法发送邮件,代码如下:
1 @SpringBootTest
2 @RunWith(SpringRunner.class)
3 public class MailServiceTest {
4
5 @Autowired
6 private MailServiceImpl mailService;
7
8 @Test
9 public void sendeEmail(){
10 String to = "xxxxxxxxxxx";//收件人邮箱地址
11 String content = "this is for test send mail";
12 String subject = "test send email";
13 mailService.sendEmail(to, content, subject);
14 }
15
16 }
控制台输出信息:
接收邮件中也收到了邮件:
有时候纯文本的邮件满足不了我们的需要,我们可能需要对文本内容需要添加一些样式,所以接下来看看怎么发送一个包含html的的邮件,在接口文件和实现类中添加相应的方法,如下:
接口 1 void
实现方法
1 public void sendHtmlEmail(String to, String content, String subject) {
2 MimeMessage message = javaMailSender.createMimeMessage();
3 try {
4 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
5 messageHelper.setFrom(from);
6 messageHelper.setTo(to);
7 messageHelper.setSubject(subject);
8 messageHelper.setText(content, true);//指定html内容
9 javaMailSender.send(message);
10 logger.info("发送邮件成功。。。");
11 } catch (MessagingException e) {
12 e.printStackTrace();
13 logger.info("发送邮件发生异常。。。");
14 }
15
16 }
下来我们测试发送包含html内容的邮件,为了能看出html效果,加入样式内容来显示效果,测试代码如下:
1 @Test
2 public void sendHtmlEmail(){
3 String to = "xxxxxxxxxxx";//收件人邮箱地址
4 String subject = "test send html email";
5 String content = "<html><body><h3 style='color:red'>this is for test send html mail</hr></body></html>";
6 mailService.sendHtmlEmail(to, content, subject);
7 }
执行测试方法,收到邮件内容
,可以看到html起作用了。
有些时候,我们发送邮件时还会发送附件,接口和实现方法代码如下:
1 void
实现方法
1 public void sendAttachmentEmail(String to, String content, String subject, String filePath) {
2 MimeMessage message = javaMailSender.createMimeMessage();
3 try {
4 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
5 messageHelper.setFrom(from);
6 messageHelper.setTo(to);
7 messageHelper.setSubject(subject);
8 messageHelper.setText(content);
9
10 //添加附件
11 FileSystemResource file = new FileSystemResource(new File(filePath));
12 String fileName = filePath.substring(filePath.lastIndexOf(File.separator)+1);
13 messageHelper.addAttachment(fileName, file);
14 logger.info("开始发送带附件邮件。。。");
15 javaMailSender.send(message);
16 logger.info("发送带附件邮件成功。。。");
17 } catch (MessagingException e) {
18 e.printStackTrace();
19 logger.info("发送带附件邮件发生异常。。。");
20 }
21 }
测试方法
1 @Test
2 public void sendAttachmentEmail(){
3 String to = "xxxxxxxxxxxxxxx";//收件人邮箱地址
4 String subject = "test send attachment email";
5 String content = "this is for test send attachment mail";
6 String filePath = "C:\\Users\\admin\\Desktop\\序列号.txt";
7 mailService.sendAttachmentEmail(to, content, subject, filePath);
8 }
收到邮件后可以看到,是有附件的