本文章來自【知識(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.com和your-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ò)誤,不過這里使用了讀取配置文件中的配置,則不用修改。
只需要使用@Autowired在private 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.7版本的JCE,點(diǎn)擊這里。
- 將下載下來的zip文件中的
local_policy.jar和US_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í)林】