本文參考spring官網email接口文檔所寫。
spring-email官方網址:https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/integration.html#mail
1:添加相關依賴
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>2.1.6.RELEASE</version> </dependency>
2:先建一個郵箱收件人model
package com.dev.model.email; import java.io.Serializable; /** * Created on 2019-08-02 16:16. * * @author zgq7 */ public class EmailModel implements Serializable { /** * 收件人姓名 **/ private String recieverName; /** * 收件人郵箱地址 **/ private String recieverEmailAddress; /** * 郵件主題 **/ private String emailTheme; /** * 郵件內容 **/ private String emailContent; public String getRecieverName() { return recieverName; } public void setRecieverName(String recieverName) { this.recieverName = recieverName; } public String getRecieverEmailAddress() { return recieverEmailAddress; } public void setRecieverEmailAddress(String recieverEmailAddress) { this.recieverEmailAddress = recieverEmailAddress; } public String getEmailTheme() { return emailTheme; } public void setEmailTheme(String emailTheme) { this.emailTheme = emailTheme; } public String getEmailContent() { return emailContent; } public void setEmailContent(String emailContent) { this.emailContent = emailContent; } }
3:編寫一個郵箱工具類
package com.dev.utils.email; import com.dev.model.email.EmailModel; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.MailException; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessagePreparator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * Created on 2019-08-02 16:06. * * @author zgq7 */ public class MailSendUtils { private static final Logger logger = LoggerFactory.getLogger(MailSendUtils.class); /** * 發送者地址 **/ private static String posterAdress = "xxx@qq.com"; /** * 發送者姓名 **/ private static final String posterName = "xxx"; @Autowired private JavaMailSender javaMailSender; @Autowired private JavaMailSenderImpl javaMailSenderImpl; /** * 文本發送 **/ public void sendEmailAsText(final EmailModel emailModel) { MimeMessagePreparator mimeMessagePreparator = mimeMessage -> { mimeMessage.setFrom(posterAdress); mimeMessage.setRecipients(Message.RecipientType.TO, emailModel.getRecieverEmailAddress()); mimeMessage.setText("<html><body>" + "hello:" + emailModel.getRecieverName() + "<br>" + "msg:" + emailModel.getEmailContent() + "<br>" + "from :" + posterName + "</body></html>"); }; try { this.javaMailSender.send(mimeMessagePreparator); logger.info("郵箱已返送至[{}]郵箱!", emailModel.getRecieverName()); } catch (MailException e) { logger.error("郵箱異常:{}", e); } } /** * html 網頁發送 * 該方法為同步方法 **/ public void sendEmailAsSysExceptionHtml(final EmailModel emailModel) { MimeMessage mimeMessage = javaMailSenderImpl.createMimeMessage(); MimeMessageHelper mimeMessageHelper; try { mimeMessageHelper = new MimeMessageHelper(mimeMessage, true); mimeMessageHelper.setFrom(posterAdress); mimeMessageHelper.setTo(emailModel.getRecieverEmailAddress()); mimeMessageHelper.setText("<!DOCTYPE html>\n" + "<html>\n" + "\t<head>\n" + "\t\t<meta charset=\"UTF-8\">\n" + "\t\t<title></title>\n" + "\t</head>\n" + "\t<style>\n" + "\t\tbody,\n" + "\t\ttable,\n" + "\t\ttbody,\n" + "\t\ttr {\n" + "\t\t\tbackground-color: aquamarine;\n" + "\t\t\tbackground-size: 100%;\n" + "\t\t}\n" + "\t</style>\n" + "\n" + "\t<body>\n" + "\t\t<table border=\"solid 2 px\" align=\"center\" style=\"text-align: center;\">\n" + "\t\t\t<tbody>\n" + "\t\t\t\t<tr>\n" + "\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">時間</td>\n" + "\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\">" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "</td>\n" + "\t\t\t\t</tr>\n" + "\t\t\t\t<tr>\n" + "\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">信息</td>\n" + "\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\">" + "測試" + "</td>\n" + "\t\t\t\t</tr>\n" + "\t\t\t\t<tr>\n" + "\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">堆棧</td>\n" + "\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\" style=\"text-align: left;\">" + emailModel.getEmailContent() + "</td>\n" + "\t\t\t\t</tr>\n" + "\t\t\t</tbody>\n" + "\t\t</table>\n" + "\t</body>\n" + "\n" + "</html>" , true); this.javaMailSender.send(mimeMessage); logger.info("郵箱已返送至[{}]郵箱!", emailModel.getRecieverName()); } catch (MessagingException e) { e.printStackTrace(); } catch (MailException e) { logger.error("郵箱異常:{}", e); } } }
notice3.1:可自行設置文本發送api、html發送api、圖片發送api等。我的工具包中只寫了文本發送和html發送兩種格式的api。
4:在IOC中注冊EmailUtils的bean
package com.dev.config; import com.dev.utils.email.MailSendUtils;
/** * Created by zgq7 on 2019/6/6. * 注冊一些bean進入ioc * */ @Configuration public class BeanRegistryCenterConfig {
/** * 郵箱工具類 bean 注冊 **/ @Bean public MailSendUtils mailSendUtils() { return new MailSendUtils(); } }
5:在Application.xml中添加一下信息
spring.mail.host=smtp.qq.com spring.mail.port=587 spring.mail.username=你的qq@qq.com spring.mail.password=xxxxx spring.mail.protocol=smtp spring.mail.default-encoding=UTF-8
notice1:spring.mail.usernam,是你的qq郵箱地址
notice2:spring.mail.password,不要用真正的qq郵箱密碼,而是qq郵箱第三方服務授權碼
下面是獲取qq郵箱第三方服務授權碼的操步驟:
5.1:登錄qq郵箱,進入首頁,點擊設置按鈕
5.2:點擊賬戶設置
並拉到最下面點擊我圈中的開啟按鈕
然后會彈出一個小框提示你發信息,發就行了,發送之后點擊驗證會收到授權碼
除了spring.mail.username、spring.mail.password 兩項要換成自己的 ,其他的和我一樣就行;
6:進行郵件發送測試
6.1:文本發送測試
/** * Java Mail 文本發送 **/ @Test public void EmaiTest() { EmailModel emailModel = new EmailModel(); emailModel.setEmailTheme("測試"); emailModel.setRecieverName("測試"); emailModel.setEmailContent("測試"); emailModel.setRecieverEmailAddress("xxx@qq.com"); mailSendUtils.sendEmailAsText(emailModel); }
發送成功后:
目標郵箱收到的郵件:
6.2:html發送測試
/** * Java Mail 網頁發送 **/ @Test public void EmailTest2() throws MessagingException, InterruptedException { EmailModel emailModel = new EmailModel(); emailModel.setEmailTheme("測試"); emailModel.setRecieverName("測試"); emailModel.setEmailContent("測試"); emailModel.setRecieverEmailAddress("xxx@qq.com"); mailSendUtils.sendEmailAsSysExceptionHtml(emailModel); }
目標郵箱收到的郵件:
這個展示效果可以自己設置。
7:注意點:發送郵件者的郵箱地址為qq郵箱,否則會QQ郵箱認證報錯。而接收者郵箱可以為其他的郵箱,如企業郵箱、網易郵箱等。
看過的點個贊好不好啊。