亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2024年11月19日 09:30:36   作者:morris131  
本文主要介紹了如何使用JavaMailSender接口和MimeMessageHelper類,在SpringBoot實(shí)現(xiàn)發(fā)送帶有附件,嵌入資源,抄送和密送的復(fù)雜郵件,需要的可以了解下

在Spring Boot中發(fā)送帶有附件、嵌入資源(如圖片)、抄送(Cc)和密送(Bcc)的復(fù)雜郵件,你可以使用JavaMailSender接口和MimeMessageHelper類。

郵件格式

一封電子郵件主要由以下幾個(gè)關(guān)鍵部分組成,這些部分共同構(gòu)成了郵件的整體結(jié)構(gòu)和內(nèi)容:

1.收件人(To)

這是郵件發(fā)送到的電子郵箱地址。確保你輸入的地址是正確的,以避免郵件發(fā)送錯(cuò)誤或丟失。

2.抄送(Cc)(可選)

如果你希望其他人也能收到這封郵件,可以將他們的電子郵箱地址添加到抄送欄。抄送的人可以看到郵件的所有其他收件人。

3.密送(Bcc)(可選)

密送允許你將郵件發(fā)送給其他人,但這些人的郵箱地址不會(huì)顯示在郵件的收件人或抄送列表中。這通常用于發(fā)送敏感信息,同時(shí)保護(hù)收件人的隱私。

4.主題(Subject)

郵件的主題是郵件內(nèi)容的簡(jiǎn)短描述,應(yīng)該準(zhǔn)確反映郵件的要點(diǎn)或目的。一個(gè)清晰的主題有助于收件人快速了解郵件內(nèi)容,并決定是否立即閱讀。

5.正文(Body)

正文是郵件的主要內(nèi)容,包括開頭問(wèn)候、具體信息或請(qǐng)求、行動(dòng)要求以及結(jié)尾感謝等。正文應(yīng)該清晰、簡(jiǎn)潔、有條理,避免使用過(guò)多的行業(yè)術(shù)語(yǔ)或復(fù)雜的句子結(jié)構(gòu)。

6.附件(Attachments)(可選)

如果郵件中包含文件(如文檔、圖片、表格等),你可以將它們作為附件添加到郵件中。確保附件的大小不超過(guò)收件人郵箱的限制,并提醒收件人檢查附件是否存在病毒或惡意軟件。

7.簽名(Signature)

郵件簽名通常位于正文的底部,包括你的全名、職位(如果適用)、公司名稱、聯(lián)系方式(如電話、郵箱等)以及可能的公司logo或社交媒體鏈接。簽名有助于建立你的專業(yè)形象,并方便收件人聯(lián)系你。

8.發(fā)送時(shí)間(Sent Time)

這不是由你手動(dòng)填寫的部分,而是郵件系統(tǒng)自動(dòng)記錄的。它顯示了郵件發(fā)送的確切時(shí)間,有助于收件人了解郵件的時(shí)效性。

9.優(yōu)先級(jí)(Priority)(可選)

一些郵件系統(tǒng)允許你設(shè)置郵件的優(yōu)先級(jí)(如高、中、低)。這有助于收件人根據(jù)郵件的重要性來(lái)安排閱讀順序。但請(qǐng)注意,不要濫用高優(yōu)先級(jí)標(biāo)記,以免降低其效果。

10.閱讀回執(zhí)(Read Receipt)(可選)

閱讀回執(zhí)是一種功能,當(dāng)你發(fā)送郵件時(shí),可以請(qǐng)求收件人在閱讀郵件后發(fā)送一個(gè)確認(rèn)回執(zhí)。這有助于你了解郵件是否已被閱讀,但請(qǐng)注意尊重收件人的隱私和意愿。

復(fù)雜郵件的發(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";
}

抄送的郵箱會(huì)顯示在郵件的抄送列表,但是密送的郵箱不會(huì)顯示在郵件的收件人或抄送列表。

發(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ā)送來(lái)源
    mimeMessageHelper.setFrom("morris131@163.com");
    // 郵件發(fā)送目標(biāo)
    mimeMessageHelper.setTo("1508787838@qq.com");
    // 設(shè)置標(biāo)題
    mimeMessageHelper.setSubject("sendWithHtml");
    // 設(shè)置內(nèi)容,并設(shè)置內(nèi)容 html 格式為 true
    mimeMessageHelper.setText(htmlContent, true);

    javaMailSender.send(mimeMessage);
    return "sendWithHtml";
}

mimeMessageHelper.setText(htmlContent, true);的第二個(gè)參數(shù)必須設(shè)置為true,才會(huì)把第一個(gè)參數(shù)的內(nèi)容當(dāng)成html處理,否則會(huì)當(dāng)成普通文本處理。

注意:郵件html中不能寫javascript內(nèi)容,會(huì)被忽略。

發(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>歡迎來(lái)到 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ā)送來(lái)源
    mimeMessageHelper.setFrom("morris131@163.com");
    // 郵件發(fā)送目標(biāo)
    mimeMessageHelper.setTo("1508787838@qq.com");
    // 設(shè)置標(biāo)題
    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) 對(duì)應(yīng),才能設(shè)置圖片成功,
        mimeMessageHelper.addInline(entry.getKey(), new ClassPathResource(entry.getValue()));
    }

    javaMailSender.send(mimeMessage);
    return "sendWithInlineImageHtml";
}

發(fā)送帶有附件、內(nèi)嵌資源時(shí),需要將MimeMessageHelper構(gòu)造方法的第二個(gè)參數(shù)設(shè)置為true,否則會(huì)拋出如下異常:

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ā)送來(lái)源
    mimeMessageHelper.setFrom("morris131@163.com");
    // 郵件發(fā)送目標(biāo)
    mimeMessageHelper.setTo("1508787838@qq.com");
    // 設(shè)置標(biāo)題
    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ā)送來(lái)源
    messageHelper.setFrom("morris131@163.com");
    // 郵件發(fā)送目標(biāo)
    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)容,第二個(gè)參數(shù)為true表示將發(fā)送內(nèi)容設(shè)置為"text/html"
    messageHelper.setText(content, true);

    javaMailSender.send(mimeMessage);

    return "sendWithFreemarker";
}

html模板的位置:默認(rèn)在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ā)送各種復(fù)雜格式郵件的示例詳解的文章就介紹到這了,更多相關(guān)SpringBoot發(fā)送郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

    MyBatis通過(guò)BATCH批量提交的方法

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

    maven下載依賴失敗問(wèn)題及解決

    這篇文章主要介紹了maven下載依賴失敗問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    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),直譯過(guò)來(lái)就是 面向切面編程,AOP 是一種編程思想,是面向?qū)ο缶幊蹋∣OP)的一種補(bǔ)充
    2023-01-01
  • 深入了解Spring中Bean的作用域和生命周期

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

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

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

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

    Spring源碼完美導(dǎo)入IDEA的過(guò)程

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

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

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

最新評(píng)論