SpringBoot Email:自己寫一個郵件傳送功能

1。準備工作

使用spring boot傳送郵件,需要做一個準備工作,必須打開發送郵件的服務。這裡以qq為例,到郵箱設定——> 賬戶設定——> 找到pop3/smpt服務,點選開啟,根據提示,傳送簡訊到官方申請開啟,最後會獲得一個授權碼,這是我們下面需要的。

2。配置檔案:application。yml

spring mail: host: smtp。qq。com password: ****** # 剛才申請的授權碼 username: ****** # 你的qq郵箱 protocol: smtp test-connection: true default-encoding: utf-8 properties: mail: smtp: auth: true # 認證 ssl: enable: true # SSL starttls: # TLS需要時 enable: true required: true

3。郵件工具類

@Componentpublic class MailUtil { private static final Logger LOGGER = LoggerFactory。getLogger(MailUtil。class); @Value(“${spring。mail。username}”) public String fromUser; @Autowired private JavaMailSender javaMailSender; /** * 普通郵件傳送 * @param email * @throws Exception */ public void sendEmail(Email email) throws Exception { LOGGER。info(“傳送普通郵件給:{}”,email。getToEmail()); SimpleMailMessage message = new SimpleMailMessage(); message。setFrom(fromUser); message。setTo(email。getToEmail()); message。setSubject(email。getSubject()); message。setText(email。getContent()); javaMailSender。send(message); } /** * 帶圖片傳送 * @param email */ public void sendPicture(Email email) throws Exception { LOGGER。info(“傳送帶圖片郵件給:{}”,email。getToEmail()); MimeMessage message = javaMailSender。createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); //這裡可以自定義發信名稱比如:setFrom(fromUser,‘gq’) helper。setFrom(fromUser); helper。setTo(email。getToEmail()); helper。setSubject(email。getSubject()); helper。setText(“SpringBoot Email:自己寫一個郵件傳送功能”,true); FileSystemResource file = new FileSystemResource(new File(email。getFilePath())); //pic 名稱需與 cid 那裡的名稱對應 helper。addInline(“pic”, file); javaMailSender。send(message); } /** * 傳送html,如 連結 * @param email */ public void sendHtml(Email email) throws Exception { LOGGER。info(“傳送帶圖片郵件給:{}”,email。getToEmail()); MimeMessage message = javaMailSender。createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper。setFrom(fromUser); helper。setTo(email。getToEmail()); helper。setSubject(email。getSubject()); helper。setText(email。getContent(),true); javaMailSender。send(message); } /** * 傳送附件 * @param email * @throws Exception */ public void sendWithAttachments(Email email) throws Exception { LOGGER。info(“傳送帶附件郵件給:{}”,email。getToEmail()); MimeMessage message = javaMailSender。createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true,“UTF-8”); helper。setFrom(fromUser); helper。setTo(email。getToEmail()); helper。setSubject(email。getSubject()); helper。setText(email。getContent()); //FileSystemResource file = new FileSystemResource(new File(email。getFilePath())); File file = new File(email。getFilePath()); String fileName = email。getFilePath()。substring(email。getFilePath()。lastIndexOf(File。separator)); fileName = MimeUtility。encodeWord(fileName,“UTF-8”,“B”); //傳送多個 helper。addAttachment(fileName,file); javaMailSender。send(message); }}

這個工具類的方法只是傳送單一內容,複雜的內容,如 圖片,附件,文字等,大家可以根據單一的自己去補充下,做個練手。

4。測試用例

@Test void contextLoads() throws Exception { /* 傳送純文字 Email email = new Email() 。setToEmail(new String[]{“133******@qq。com”}) 。setSubject(“測試郵件傳送”) 。setContent(“hello,成功的傳送了郵件”); mailUtil。sendEmail(email);*/ /*傳送模板郵件 Email email = new Email() 。setToEmail(new String[]{“133******@qq。com”}) 。setSubject(“測試模板郵件傳送”); Context context = new Context(); context。setVariable(“title”,“模板傳送”); context。setVariable(“content”,“lalala”); String process = templateEngine。process(“emailTpl/emailTpl”, context); email。setContent(process); mailUtil。sendEmail(email);*/ /* Email email = new Email() 。setToEmail(new String[]{“133******@qq。com”}) 。setSubject(“測試郵件傳送圖片”) 。setFilePath(“C:\\Users\\GQ\\Pictures\\Camera Roll\\桌布\\2。jpg”); mailUtil。sendPicture(email);*/ Email email = new Email() 。setToEmail(new String[]{“133******@qq。com”}) 。setSubject(“測試郵件傳送附件”) 。setContent(“你好,歡迎查閱附件”) 。setFilePath(“C:\\Users\\GQ\\Downloads\\9月竣工時間表。xls”); mailUtil。sendWithAttachments(email); }

結果如下圖:

SpringBoot Email:自己寫一個郵件傳送功能

純文字郵件

SpringBoot Email:自己寫一個郵件傳送功能

傳送圖片

SpringBoot Email:自己寫一個郵件傳送功能

附件

5。小結

ok,今天的一個小demo就到這裡了,大家不妨動手試下。不過要注意裡面的細節,比如傳送圖片的cid等等,一不小心就弄錯了。剛剛小編就在傳送附件這裡出錯了,擷取檔名的時候寫成了(0,length)這種。好了,喜歡小編的朋友可以點個關注哦[呲牙][呲牙][呲牙]