欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot發(fā)送各種復雜格式郵件的示例詳解

 更新時間:2024年11月19日 09:30:36   作者:morris131  
本文主要介紹了如何使用JavaMailSender接口和MimeMessageHelper類,在SpringBoot實現(xiàn)發(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)文章

  • java自定義類加載器如何實現(xiàn)類隔離

    java自定義類加載器如何實現(xiàn)類隔離

    這篇文章主要介紹了java自定義類加載器如何實現(xiàn)類隔離問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Spring?Cloud?Hystrix原理與注意事項小結(jié)

    Spring?Cloud?Hystrix原理與注意事項小結(jié)

    本文介紹了Hystrix的基本概念、工作原理以及其在實際開發(fā)中的應(yīng)用方式,通過對Hystrix的深入學習,開發(fā)者可以在分布式系統(tǒng)中實現(xiàn)精細的錯誤處理機制,并能夠及時響應(yīng)系統(tǒng)中的異常,避免服務(wù)的連鎖崩潰,感興趣的朋友一起看看吧
    2025-03-03
  • MyBatis通過BATCH批量提交的方法

    MyBatis通過BATCH批量提交的方法

    今天小編就為大家分享一篇關(guān)于MyBatis通過BATCH批量提交的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • maven下載依賴失敗問題及解決

    maven下載依賴失敗問題及解決

    這篇文章主要介紹了maven下載依賴失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • J2SE 1.5版本的新特性一覽

    J2SE 1.5版本的新特性一覽

    J2SE 1.5版本的新特性一覽...
    2006-12-12
  • Spring AOP源碼深入分析

    Spring AOP源碼深入分析

    這篇文章主要介紹了Spring AOP源碼,AOP(Aspect Orient Programming),直譯過來就是 面向切面編程,AOP 是一種編程思想,是面向?qū)ο缶幊蹋∣OP)的一種補充
    2023-01-01
  • 深入了解Spring中Bean的作用域和生命周期

    深入了解Spring中Bean的作用域和生命周期

    這篇文章主要介紹了深入了解Spring中Bean的作用域和生命周期,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 一文帶你學會規(guī)則引擎Drools的應(yīng)用

    一文帶你學會規(guī)則引擎Drools的應(yīng)用

    Drools?就是一個開源的業(yè)務(wù)規(guī)則引擎,可以很容易地與?spring?boot?應(yīng)用程序集成,這篇文章就來和大家詳細聊聊Drools的具體應(yīng)用,需要的可以參考一下
    2023-03-03
  • Spring源碼完美導入IDEA的過程

    Spring源碼完美導入IDEA的過程

    正值春節(jié)假期,小伙伴私信我idea導入spring源碼的過程,今天抽空給大家整理一篇教程幫助大家學習Spring源碼完美導入IDEA的詳細過程,感興趣的朋友一起看看吧
    2022-02-02
  • springboot如何查找配置文件路徑的順序和其優(yōu)先級別

    springboot如何查找配置文件路徑的順序和其優(yōu)先級別

    此文是在工作中遇到的關(guān)于springboot配置文件的問題,在網(wǎng)上查閱資料和自己測試之后記錄的,以便日后查閱。希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論