spring boot 已經對發送郵件作了作封裝,只需引入spring-boot-starter-mail 便可快速的在springboot項目中實現發送郵件的功能。若是想要發送html文本的郵件,利用freemarker做爲模板引擎來實現。下面具體的介紹springboot,freemarker 發送郵件。html
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
這一步很重要,只有當發送方的郵件服務器開啓了smtp服務,發送方纔能將郵件發送出去。java
qq郵箱與網易郵箱的開啓smtp方法:spring
http://www.javashuo.com/article/p-fwksqyiw-gy.html安全
在springboot 項目中修改application.yml 文件,添加發送郵件相關的配置。
1.使用stmp的配置springboot
spring: mail: default-encoding: utf-8 host: smtp.163.com username: xxxxx@163.com password: xxxxxxxxxx # 受權碼 port: 25 protocol: smtp
2.使用安全的smtp的配置(smtps)服務器
spring: mail: default-encoding: utf-8 host: smtp.163.com username: xxxxx@163.com password: xxxxxxxxxx # 受權碼 port: 465 protocol: smtps
@Service @Slf4j public class MailServiceImpl implements MailService { //注入MailSender @Autowired private JavaMailSender mailSender; //發送郵件的模板引擎 @Autowired private FreeMarkerConfigurer configurer; /** * 參數 * @param params 參數 * @param title 郵件標題 * @param templateName 模板的名稱 * @param from 發送者 * @param to 接受者 */ @Override public void sendMessageMail(Object params, String title, String templateName, String from, String to) { try { MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); //發送者 helper.setFrom(from); //發送給誰 helper.setTo(InternetAddress.parse(to)); helper.setSubject( "【" + title + "】");//郵件標題 Map<String, Object> model = new HashMap<>(); model.put("params", params); try { Template template = configurer.getConfiguration().getTemplate(templateName); try { String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model); helper.setText(text, true); mailSender.send(mimeMessage); } catch (TemplateException e) { log.error("[MailServiceImpl]-[sendMessageMail] 異常", e); } } catch (IOException e) { e.printStackTrace(); } } catch (MessagingException e) { e.printStackTrace(); } } }
在resources/templates 下面建立一個 freemarker 文件 mail.ftl。app
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>發送郵件demo</title> </head> <body> <div> <h2>發送郵件demo</h2> <p> <span style="color: #cf1322">${(params.title)!""}</span><span>發送郵件</span><span style="color: #2f54eb">demo</span> </p> </div> </body> </html>
調用發送文件。ide
@Autowired private MailProperties mailProperties; @Test public void mailTest(){ Map<String,Object> map = new HashMap<>(); map.put("title","張三"); mailService.sendMessageMail(map, "郵件測試", "mail.ftl", mailProperties.getUsername(), "123@qq.com"); }
發送結果spring-boot
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1
須要配置阿里雲安全組,開放465 出口權限。測試