SpringBoot-JavaMailSender接口實戰

相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender接口實現郵件發送,在Spring Boot的Starter模塊中也為此提供了自動化配置 。
下面通過實例來講解如何在Spring Boot中使用JavaMailSender發送郵件 。
什么是SMTP?SMTP全稱為Simple Mail Transfer Protocol(簡單郵件傳輸協議),它是一組用于從源地址到目的地址傳輸郵件的規范,通過它來控制郵件的中轉方式 。SMTP認證要求必須提供賬號和密碼才能登陸服務器 , 其設計目的在于避免用戶受到垃圾郵件的侵擾 。
什么是POP3?POP3全稱為Post Office Protocol 3(郵局協議),POP3支持客戶端遠程管理服務器端的郵件 。POP3常用于“離線”郵件處理 , 即允許客戶端下載服務器郵件 , 然后服務器上的郵件將會被刪除 。目前很多POP3的郵件服務器只提供下載郵件功能,服務器本身并不刪除郵件,這種屬于改進版的POP3協議 。
傳輸協議SMTP協議發送郵件:我們通常把處理用戶smtp請求(郵件發送請求)的服務器稱之為SMTP服務器(郵件發送服務器) 。
POP3協議接收郵件:我們通常把處理用戶pop3請求(郵件接收請求)的服務器稱之為POP3服務器(郵件接收服務器) 。
進階知識

  • 什么是JavaMailSenderJavaMailSenderImpl?
JavaMailSender和JavaMailSenderImpl 是Spring官方提供的集成郵件服務的接口和實現類,以簡單高效的設計著稱,目前是Java后端發送郵件和集成郵件服務的主流工具 。
  • 如何通過JavaMailSenderImpl發送郵件?‘
非常簡單,直接在業務類注入JavaMailSenderImpl并調用send方法發送郵件 。其中簡單郵件可以通過SimpleMailMessage來發送郵件,而復雜的郵件(例如添加附件)可以借助MimeMessageHelper來構建MimeMessage發送郵件 。
e,g:
@Autowiredprivate JavaMailSenderImpl mailSender;public void sendMail() throws MessagingException {//簡單郵件SimpleMailMessage simpleMailMessage = new SimpleMailMessage();simpleMailMessage.setFrom("admin@163.com");simpleMailMessage.setTo("socks@qq.com");simpleMailMessage.setSubject("Happy New Year");simpleMailMessage.setText("新年快樂!");mailSender.send(simpleMailMessage);//復雜郵件MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);messageHelper.setFrom("admin@163.com");messageHelper.setTo("socks@qq.com");messageHelper.setSubject("Happy New Year");messageHelper.setText("新年快樂!");messageHelper.addInline("doge.gif", new File("xx/xx/doge.gif"));messageHelper.addAttachment("work.docx", new File("xx/xx/work.docx"));mailSender.send(mimeMessage);}
  • 為什么JavaMailSenderImpl 能夠開箱即用 ?
    所謂開箱即用其實就是基于官方內置的自動配置,翻看源碼可知曉郵件自動配置類(MailSenderPropertiesConfiguration) 為上下文提供了郵件服務實例(JavaMailSenderImpl) 。具體源碼如下:
@Configuration@ConditionalOnProperty(prefix = "spring.mail", name = "host")class MailSenderPropertiesConfiguration {private final MailProperties properties;MailSenderPropertiesConfiguration(MailProperties properties) {this.properties = properties;}@Bean@ConditionalOnMissingBeanpublic JavaMailSenderImpl mailSender() {JavaMailSenderImpl sender = new JavaMailSenderImpl();applyProperties(sender);return sender; }其中MailProperties是關于郵件服務器的配置信息,具體源碼如下:
【SpringBoot-JavaMailSender接口實戰】@ConfigurationProperties(prefix = "spring.mail")public class MailProperties {private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;private String host;private Integer port;private String username;private String password;private String protocol = "smtp";private Charset defaultEncoding = DEFAULT_CHARSET;private Map<String, String> properties = new HashMap<>();}實現1.開啟郵件服務這里以QQ郵箱為例 。
首先登錄QQ郵箱>>>登錄成功后找到設置>>>然后找到郵箱設置>>>點擊賬戶>>>找到POP3|SMTP服務>>>點擊開啟(開啟需要驗證 , 驗證成功后會有一串授權碼用于發送郵件使用)>>>驗證成功
SpringBoot-JavaMailSender接口實戰

文章插圖
  • 第二步
    SpringBoot-JavaMailSender接口實戰

    文章插圖
  • 編寫發送郵件方法編寫郵件業務類MailService.
    主要通過MailService工具類就可以滿足發送java郵件的需要 。當我們進行好 yml 配置后,SpringBoot會幫助我們自動配置 JavaMailSender 我們通過這個java類就可以實現操作java來發送郵件 。

    推薦閱讀