SpringBoot發(fā)送各種復雜格式郵件的示例詳解
在Spring Boot中發(fā)送帶有附件、嵌入資源(如圖片)、抄送(Cc)和密送(Bcc)的復雜郵件,你可以使用JavaMailSender接口和MimeMessageHelper類。
郵件格式
一封電子郵件主要由以下幾個關(guān)鍵部分組成,這些部分共同構(gòu)成了郵件的整體結(jié)構(gòu)和內(nèi)容:
1.收件人(To)
這是郵件發(fā)送到的電子郵箱地址。確保你輸入的地址是正確的,以避免郵件發(fā)送錯誤或丟失。
2.抄送(Cc)(可選)
如果你希望其他人也能收到這封郵件,可以將他們的電子郵箱地址添加到抄送欄。抄送的人可以看到郵件的所有其他收件人。
3.密送(Bcc)(可選)
密送允許你將郵件發(fā)送給其他人,但這些人的郵箱地址不會顯示在郵件的收件人或抄送列表中。這通常用于發(fā)送敏感信息,同時保護收件人的隱私。
4.主題(Subject)
郵件的主題是郵件內(nèi)容的簡短描述,應(yīng)該準確反映郵件的要點或目的。一個清晰的主題有助于收件人快速了解郵件內(nèi)容,并決定是否立即閱讀。
5.正文(Body)
正文是郵件的主要內(nèi)容,包括開頭問候、具體信息或請求、行動要求以及結(jié)尾感謝等。正文應(yīng)該清晰、簡潔、有條理,避免使用過多的行業(yè)術(shù)語或復雜的句子結(jié)構(gòu)。
6.附件(Attachments)(可選)
如果郵件中包含文件(如文檔、圖片、表格等),你可以將它們作為附件添加到郵件中。確保附件的大小不超過收件人郵箱的限制,并提醒收件人檢查附件是否存在病毒或惡意軟件。
7.簽名(Signature)
郵件簽名通常位于正文的底部,包括你的全名、職位(如果適用)、公司名稱、聯(lián)系方式(如電話、郵箱等)以及可能的公司logo或社交媒體鏈接。簽名有助于建立你的專業(yè)形象,并方便收件人聯(lián)系你。
8.發(fā)送時間(Sent Time)
這不是由你手動填寫的部分,而是郵件系統(tǒng)自動記錄的。它顯示了郵件發(fā)送的確切時間,有助于收件人了解郵件的時效性。
9.優(yōu)先級(Priority)(可選)
一些郵件系統(tǒng)允許你設(shè)置郵件的優(yōu)先級(如高、中、低)。這有助于收件人根據(jù)郵件的重要性來安排閱讀順序。但請注意,不要濫用高優(yōu)先級標記,以免降低其效果。
10.閱讀回執(zhí)(Read Receipt)(可選)
閱讀回執(zhí)是一種功能,當你發(fā)送郵件時,可以請求收件人在閱讀郵件后發(fā)送一個確認回執(zhí)。這有助于你了解郵件是否已被閱讀,但請注意尊重收件人的隱私和意愿。
復雜郵件的發(fā)送
發(fā)送帶抄送和密送的郵件
/** * 發(fā)送帶抄送和密送的郵件 * * @return "sendWithCcAndBcc" */ @GetMapping("/sendWithCcAndBcc") public String sendWithCcAndBcc() { SimpleMailMessage message = new SimpleMailMessage(); message.setTo("1508787838@qq.com"); message.setCc("374785621@qq.com"); // 抄送 message.setBcc("2426497890@qq.com"); // 密送 message.setSubject("sendWithCcAndBcc"); message.setText("sendWithCcAndBcc Text"); message.setFrom("morris131@163.com"); javaMailSender.send(message); return "sendWithCcAndBcc"; }
抄送的郵箱會顯示在郵件的抄送列表,但是密送的郵箱不會顯示在郵件的收件人或抄送列表。
發(fā)送帶html格式的郵件
/** * 發(fā)送帶html格式的郵件 * * @return "sendWithHtml" */ @GetMapping("/sendWithHtml") public String sendWithHtml() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage); String htmlContent = "<html><body><h1>sendWithHtml test</h1></body></html>"; // 郵件發(fā)送來源 mimeMessageHelper.setFrom("morris131@163.com"); // 郵件發(fā)送目標 mimeMessageHelper.setTo("1508787838@qq.com"); // 設(shè)置標題 mimeMessageHelper.setSubject("sendWithHtml"); // 設(shè)置內(nèi)容,并設(shè)置內(nèi)容 html 格式為 true mimeMessageHelper.setText(htmlContent, true); javaMailSender.send(mimeMessage); return "sendWithHtml"; }
mimeMessageHelper.setText(htmlContent, true);
的第二個參數(shù)必須設(shè)置為true,才會把第一個參數(shù)的內(nèi)容當成html處理,否則會當成普通文本處理。
注意:郵件html中不能寫javascript內(nèi)容,會被忽略。
發(fā)送帶內(nèi)嵌圖片的html格式郵件
/** * 發(fā)送帶內(nèi)嵌圖片的html格式郵件 * * @return "sendWithInlineImageHtml" */ @GetMapping("/sendWithInlineImageHtml") public String sendWithInlineImageHtml() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); String htmlContent = "<html><body>" + "<h1>歡迎來到 Spring boot 的世界</h1>" + "<image width='200' height='300' src='cid:java'>圖片1 </image>" +//cid:是約定好的固定格式,只需要修改后面的變量 "<image width='200' height='300' src='cid:springboot'>圖片2 </image>" + "</body></html>"; // 數(shù)組中的cid要和上面html中image中的cid一致,否則圖片將設(shè)置失敗 Map<String, String> map = new HashMap<>(); map.put("java", "images/java.png"); map.put("springboot", "images/springboot.jpg"); // multipart參數(shù)要設(shè)置為true,代表要支持附件 MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, StandardCharsets.UTF_8.name()); // 郵件發(fā)送來源 mimeMessageHelper.setFrom("morris131@163.com"); // 郵件發(fā)送目標 mimeMessageHelper.setTo("1508787838@qq.com"); // 設(shè)置標題 mimeMessageHelper.setSubject("sendWithImageHtml"); // 設(shè)置內(nèi)容,并設(shè)置內(nèi)容 html 格式為 true mimeMessageHelper.setText(htmlContent, true); // 設(shè)置 html 中內(nèi)聯(lián)的圖片 for (Map.Entry<String, String> entry : map.entrySet()) { // addInline() 方法 cid 需要 html 中的 cid (Content ID) 對應(yīng),才能設(shè)置圖片成功, mimeMessageHelper.addInline(entry.getKey(), new ClassPathResource(entry.getValue())); } javaMailSender.send(mimeMessage); return "sendWithInlineImageHtml"; }
發(fā)送帶有附件、內(nèi)嵌資源時,需要將MimeMessageHelper構(gòu)造方法的第二個參數(shù)設(shè)置為true,否則會拋出如下異常:
java.lang.IllegalStateException: Not in multipart mode - create an appropriate MimeMessageHelper via a constructor that takes a 'multipart' flag if you need to set alternative texts or add inline elements or attachments. at org.springframework.mail.javamail.MimeMessageHelper.getMimeMultipart(MimeMessageHelper.java:414) ~[spring-context-support-5.3.19.jar:5.3.19]
發(fā)送帶附件的郵件
/** * 發(fā)送帶附件的郵件 * * @return "sendWithEnclosure" */ @GetMapping("/sendWithEnclosure") public String sendWithEnclosure() throws MessagingException { Map<String, String> map = new HashMap<>(); map.put("test1", "files/test1.txt"); map.put("test2", "files/test2.7z"); MimeMessage mimeMessage = javaMailSender.createMimeMessage(); // multipart參數(shù)要設(shè)置為true,代表要支持附件 MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, StandardCharsets.UTF_8.name()); // 郵件發(fā)送來源 mimeMessageHelper.setFrom("morris131@163.com"); // 郵件發(fā)送目標 mimeMessageHelper.setTo("1508787838@qq.com"); // 設(shè)置標題 mimeMessageHelper.setSubject("sendWithWithEnclosure"); // 設(shè)置內(nèi)容 mimeMessageHelper.setText("sendWithWithEnclosure Text"); // 添加附件 for (Map.Entry<String, String> entry : map.entrySet()) { mimeMessageHelper.addAttachment(entry.getKey(), new ClassPathResource(entry.getValue())); } javaMailSender.send(mimeMessage); return "sendWithEnclosure"; }
發(fā)送Freemarker模板郵件
maven中引入包:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
gradle中引入:
implementation 'org.springframework.boot:spring-boot-starter-freemarker:2.6.7'
// org.springframework.web.servlet.view.freemarker; @Resource private FreeMarkerConfigurer freeMarkerConfigurer; /** * 發(fā)送Freemarker模板郵件 * * @return "sendWithFreemarker" */ @GetMapping("/sendWithFreemarker") public String sendWithFreemarker() throws MessagingException, IOException, TemplateException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); // 郵件發(fā)送來源 messageHelper.setFrom("morris131@163.com"); // 郵件發(fā)送目標 messageHelper.setTo("1508787838@qq.com"); // 設(shè)置郵件主題 messageHelper.setSubject("sendWithFreemarker"); // 獲取模板 Template template = freeMarkerConfigurer.getConfiguration().getTemplate("email.ftl", "UTF-8"); HashMap<String, Object> map = new HashMap<>(); map.put("userName", "Morris131"); map.put("age", 18); // 填充數(shù)據(jù)并把模板轉(zhuǎn)為字符串 String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map); // 設(shè)置郵件內(nèi)容,第二個參數(shù)為true表示將發(fā)送內(nèi)容設(shè)置為"text/html" messageHelper.setText(content, true); javaMailSender.send(mimeMessage); return "sendWithFreemarker"; }
html模板的位置:默認在resource/templates/目錄下,模板文件名為email.ftl
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Hello Email</title> </head> <body> <p>用戶:${userName}</p> <p>年齡:${age}</p> </body> </html>
到此這篇關(guān)于SpringBoot發(fā)送各種復雜格式郵件的示例詳解的文章就介紹到這了,更多相關(guān)SpringBoot發(fā)送郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Cloud?Hystrix原理與注意事項小結(jié)
本文介紹了Hystrix的基本概念、工作原理以及其在實際開發(fā)中的應(yīng)用方式,通過對Hystrix的深入學習,開發(fā)者可以在分布式系統(tǒng)中實現(xiàn)精細的錯誤處理機制,并能夠及時響應(yīng)系統(tǒng)中的異常,避免服務(wù)的連鎖崩潰,感興趣的朋友一起看看吧2025-03-03一文帶你學會規(guī)則引擎Drools的應(yīng)用
Drools?就是一個開源的業(yè)務(wù)規(guī)則引擎,可以很容易地與?spring?boot?應(yīng)用程序集成,這篇文章就來和大家詳細聊聊Drools的具體應(yīng)用,需要的可以參考一下2023-03-03springboot如何查找配置文件路徑的順序和其優(yōu)先級別
此文是在工作中遇到的關(guān)于springboot配置文件的問題,在網(wǎng)上查閱資料和自己測試之后記錄的,以便日后查閱。希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08