Springboot 之 JavaMailSender發(fā)送電子郵件

本文章來自【知識(shí)林】

在很多網(wǎng)站系統(tǒng)應(yīng)用中,電子郵件的發(fā)送應(yīng)該非常常見,如:驗(yàn)證碼發(fā)送、密碼找回郵件發(fā)送、事件通知郵件發(fā)送等。

下面簡單介紹一下在Springboot的開發(fā)中如何使用JavaMailSender發(fā)送電子郵件。

引入Maven依賴包

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

使用163郵箱發(fā)送郵件

  • 配置文件
#JavaMailSender 郵件發(fā)送的配置
#spring.mail.host=smtp.exmail.qq.com
spring.mail.host=smtp.163.com
spring.mail.username=username@163.com
spring.mail.password=your-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

注意:這里需要將username@163.comyour-password修改成自己的163的郵箱地址和對(duì)應(yīng)密碼

  • 簡潔郵件發(fā)送
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("163")
public class My163MailTest {

    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.username}")
    private String username;

    @Test
    public void testSendSimple() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(username);
        message.setTo("393156105@qq.com");
        message.setSubject("標(biāo)題:測試標(biāo)題");
        message.setText("測試內(nèi)容部份");
        javaMailSender.send(message);
    }
}

注意:setFrom處必須填寫自己的郵箱地址,否則會(huì)報(bào)553錯(cuò)誤,不過這里使用了讀取配置文件中的配置,則不用修改。

只需要使用@Autowiredprivate JavaMailSender javaMailSender;上即可通過依賴注入的方式創(chuàng)建出JavaMailSender的對(duì)象。

使用QQ郵箱發(fā)送郵件

可能使用QQ郵箱發(fā)送郵件的情況比較多(大家都在用),下面就個(gè)人理解做下簡單描述。

  • 配置文件
#JavaMailSender 郵件發(fā)送的配置
spring.mail.host=smtp.qq.com
spring.mail.username=393156105@qq.com
spring.mail.password=tdckceislhfibhbbb
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

注意:spring.mail.password處的值是需要在郵箱設(shè)置里面生成的授權(quán)碼,這個(gè)不是真實(shí)的密碼。

  • 發(fā)送簡潔郵件
@Autowired
private JavaMailSender javaMailSender;

@Value("${spring.mail.username}")
private String username;

@Test
public void testSendSimple() {
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(username);
    message.setTo("393156105@qq.com");
    message.setSubject("標(biāo)題:測試標(biāo)題");
    message.setText("測試內(nèi)容部份");
    javaMailSender.send(message);
}

注意:這個(gè)例子跟使用163來發(fā)送的郵件是一樣的效果,但是在使用QQ來發(fā)送郵件是可能會(huì)報(bào)handshake_failure相關(guān)的錯(cuò)誤,這是由于認(rèn)證失敗導(dǎo)致的,解決辦法:

  1. 下載1.7版本的JCE,點(diǎn)擊這里。
  2. 將下載下來的zip文件中的local_policy.jarUS_export_policy.jar復(fù)制到JDK安裝目錄下的\jre\lib\security目錄中,原本是存在這兩個(gè)文件的,這里需要替換下。
  • 發(fā)送HTML格式的郵件
@Test
public void testSendHtml() {
    MimeMessage message = null;
    try {
        message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(username);
        helper.setTo("398986099@qq.com");
        helper.setSubject("標(biāo)題:發(fā)送Html內(nèi)容");

        StringBuffer sb = new StringBuffer();
        sb.append("<h1>大標(biāo)題-h1</h1>")
          .append("<p style='color:#F00'>紅色字</p>")
          .append("<p style='text-align:right'>右對(duì)齊</p>");
        helper.setText(sb.toString(), true);
    } catch (MessagingException e) {
        e.printStackTrace();
    }

    javaMailSender.send(message);
}

注意:這里創(chuàng)建的是MimeMessageHelper,且在調(diào)用setText時(shí)需要在第二個(gè)參數(shù)傳入true,這樣才會(huì)使用HTML格式發(fā)送郵件

  • 設(shè)置收件方顯示的名稱
@Test
public void testSendByName() {
    MimeMessage message = null;
    try {
        message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(new InternetAddress(username, "知識(shí)林", "UTF-8"));
        helper.setTo("2396133790@qq.com");
        helper.setSubject("標(biāo)題:發(fā)送Html內(nèi)容");

        StringBuffer sb = new StringBuffer();
        sb.append("<h1>大標(biāo)題-h1</h1>")
                .append("<p style='color:#F00'>紅色字</p>")
                .append("<p style='text-align:right'>右對(duì)齊</p>");
        helper.setText(sb.toString(), true);
    } catch (Exception e) {
        e.printStackTrace();
    }

    javaMailSender.send(message);
}

注意:與上一個(gè)例子基本一樣,只是將helper.setFrom(username);修改成helper.setFrom(new InternetAddress(username, "知識(shí)林", "UTF-8"));,這樣收件方顯示的名稱就是知識(shí)林(前提是收件方?jīng)]有存發(fā)件方郵件)。

示例代碼:https://github.com/zsl131/spring-boot-test/tree/master/study12

本文章來自【知識(shí)林】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容