使用SpringBoot发邮件

SpringBoot中已有发邮件的工具包,只需要引用即可使用

1,pom引用

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

2,在配置文件中配置邮件服务器信息。这里需要一个可用的邮件服务器。

spring.mail.default-encoding=utf-8
spring.mail.host=mail.xxxx.com
[email protected]
spring.mail.password=password

3,编写发邮件service,调用JavaMailSender.send()即可,支持简单文本邮件、富文本邮件、html邮件

 Service代码如下

 1 import org.springframework.beans.factory.annotation.Autowired;
 2 import org.springframework.beans.factory.annotation.Value;
 3 import org.springframework.core.io.FileSystemResource;
 4 import org.springframework.mail.MailException;
 5 import org.springframework.mail.SimpleMailMessage;
 6 import org.springframework.mail.javamail.JavaMailSender;
 7 import org.springframework.mail.javamail.MimeMessageHelper;
 8 import org.springframework.stereotype.Service;
 9 
10 import javax.mail.MessagingException;
11 import javax.mail.internet.MimeMessage;
12 import java.io.File;
13 
14 @Service
15 public class EmailService {
16     @Autowired
17     private JavaMailSender mailSender;
18 
19     @Value("${spring.mail.username}")
20     private String from;
21 
22     /**
23      * 发送简单文本邮件
24      * @param content 邮件正文
25      * @param subject 邮件主题
26      * @param to 邮件接收地址
27      * */
28     public void sendSimpleMail(String to, String subject, String content) throws MailException {
29         System.out.println("-----from:" + from);
30         System.out.println("-----to:" + to);
31         System.out.println("-----subject:" + subject);
32         System.out.println("-----content:" + content);
33 
34         SimpleMailMessage message = new SimpleMailMessage();
35         message.setFrom(from);
36         message.setTo(to);
37         message.setSubject(subject);
38         message.setText(content);
39         mailSender.send(message);
40     }
41 
42     /**
43      * 发送富文本邮件
44      * @param content 邮件正文
45      * @param rscId 设置在header头中的文件ID 
46      * @param rscPath 图片路径
47      * @param subject 邮件主题
48      * @param to 邮件接收地址
49      * */
50     public void sendRichTextMail(String to, String subject, String content, String rscPath, String rscId) throws MessagingException {
51         //MimeMessageHelper支持发送复杂邮件模板,支持文本、附件、HTML、图片等。
52         //如果需要发送多张图片,可以改变传参方式,使用集合添加多个<img src='cid:rscId'>和helper.addInline(rscId, res);即可实现
53 
54         MimeMessage message = mailSender.createMimeMessage();
55         MimeMessageHelper helper = new MimeMessageHelper(message, true);
56         helper.setFrom(from);
57         helper.setTo(to);
58         helper.setSubject(subject);
59         helper.setText(content, true);
60         File file = new File(rscPath);
61         FileSystemResource res = new FileSystemResource(file);
62         helper.addInline(rscId, res);
63 
64         mailSender.send(message);
65 
66     }
67 
68     /**
69      * 发送HTML邮件
70      * @param to 邮件接收地址
71      * @param subject 邮件主题
72      * @param content 邮件正文
73      * */
74     public void sendHtmlMail(String to, String subject, String content) throws MessagingException {
75         MimeMessage message = mailSender.createMimeMessage();
76         //true 表⽰示需要创建⼀一个 multipart message
77         MimeMessageHelper helper = new MimeMessageHelper(message, true);
78         helper.setFrom(from);
79         helper.setTo(to);
80         helper.setSubject(subject);
81         helper.setText(content, true);
82         mailSender.send(message);
83     }
84 }
View Code

controller测试代码

 1 import com.hyp.emailtest.service.EmailService;
 2 import org.springframework.beans.factory.annotation.Autowired;
 3 import org.springframework.mail.MailException;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 import org.springframework.web.bind.annotation.RestController;
 7 
 8 import javax.mail.MessagingException;
 9 
10 @RestController
11 @RequestMapping("Mail")
12 public class EmailController {
13 
14     @Autowired
15     private EmailService emailService;
16    
17     //发送简单文本邮件
18     @RequestMapping(value = "send", method = RequestMethod.GET)
19     public void Send() {
20         String To = "[email protected]";
21         String Subject = "Java发邮件测试";
22         String Content = "这是一封来自JavaMailSender自动发送的测试邮件";
23         try {
24             emailService.sendSimpleMail(To, Subject, Content);
25             System.out.println("发送成功");
26         } catch (MailException ex) {
27             System.out.println("发送失败");
28             System.out.println(ex.toString());
29         }
30     }
31 
32     //发送富文本邮件
33     @RequestMapping(value = "sendImg", method = RequestMethod.GET)
34     public void SendWithImg() {
35         String to = "[email protected]";
36         String subject = "Java发邮件测试";
37         String rscId = "img1";
38         String content = "<html><body><img width='250px' src=\'cid:" + rscId + "\'></body></html>";
39         //图片路径,这里要写绝对路径
40         String imgPath = "E:\\11.jpg";
41         try {
42             emailService.sendRichTextMail(to, subject, content, imgPath, rscId);
43             System.out.println("发送成功");
44         } catch (MessagingException ex) {
45             System.out.println("发送失败");
46             System.out.println(ex.toString());
47         }
48     }
49 
50     //发送HTML邮件
51     @RequestMapping(value = "sendHtml", method = RequestMethod.GET)
52     public void SendWithHtml() {
53         String to = "[email protected]";
54         String subject = "Java发邮件测试";
55         String content = "<html><head></head><body><h3>这是html邮件。。。</h3></body></html>";
56         try {
57             emailService.sendHtmlMail(to, subject, content);
58             System.out.println("发送成功");
59         } catch (MessagingException ex) {
60             System.out.println("发送失败");
61             System.out.println(ex.toString());
62         }
63     }
64 }
View Code

在controller中要注意的是,需要把EmailService注入,不能实例化,否则在Service类中@Value()注解会找不到spring.mail.username的值,

原因请参考:https://stackoverflow.com/questions/39047333/spring-boot-value-properties

猜你喜欢

转载自www.cnblogs.com/huyueping/p/12092128.html
今日推荐