最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Boot集成JavaMailSender發(fā)送郵件功能的實(shí)現(xiàn)

 更新時(shí)間:2022年05月06日 10:19:00   作者:劍圣無(wú)痕  
spring提供了發(fā)送郵件的接口JavaMailSender,通過JavaMailSender可以實(shí)現(xiàn)后端發(fā)送郵件,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot集成JavaMailSender發(fā)送郵件功能的相關(guān)資料,需要的朋友可以參考下

前言

項(xiàng)目中郵件發(fā)送為常用功能之一,例如注冊(cè)成功后需要發(fā)送激活郵件,賬號(hào)的會(huì)員到期提示,每日?qǐng)?bào)表統(tǒng)計(jì)等功能都需要自動(dòng)發(fā)送郵件,本文將講解Spring Boot如何實(shí)現(xiàn)郵件發(fā)送功能。

集成步驟

添加依賴

  <dependency>
	  <groupId>org.springframework.boot</groupId>
	  <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

郵件配置信息

在resource目錄下新增mail.properties內(nèi)容如下:

#企業(yè)郵件配置
mail.host=smtp.exmail.qq.com
#端口
mail.port=587
mail.userName=xxx.com
mail.password=yyy
mail.smtp.timeou=15000
mail.smtp.auth=false
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

加載屬性文件

@Component
@ConfigurationProperties(prefix = "mail")
@PropertySource(value = { "classpath:mail.properties" })
public class MailSenderConfig implements Serializable
{
    private static final long serialVersionUID = -4558468113448742143L;

    /**
     * 主機(jī)
     */
    private String host;

    /**
     * 端口
     */
    private int port;

    /**
     * 用戶名
     */
    private String userName;

    /***
     * 密碼
     */
    private String password;
    
    //省略get、set方法
  }

通過@PropertySource注解加載外部屬性文件,不熟悉的朋友可以查看這篇文章。

郵件配置類

@Configuration
public class MailConfig
{
   @Autowired
   private MailSenderConfig mailSenderConfig;
   
   @Bean
   public JavaMailSenderImpl createMailSender()
   {
       JavaMailSenderImpl javaMailSender =new JavaMailSenderImpl();
       javaMailSender.setDefaultEncoding("UTF-8");
       javaMailSender.setHost(mailSenderConfig.getHost());
       javaMailSender.setPort(mailSenderConfig.getPort());
       javaMailSender.setProtocol(JavaMailSenderImpl.DEFAULT_PROTOCOL);
       javaMailSender.setUsername(mailSenderConfig.getUserName());
       javaMailSender.setPassword(mailSenderConfig.getPassword());
       Properties p = new Properties();
       p.setProperty("mail.smtp.timeout", "25000");
       p.setProperty("mail.smtp.auth", "true");
       p.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
       javaMailSender.setJavaMailProperties(p);
       return javaMailSender;
   }
}

注意:JavaMailSenderImpl是JavaMailSender的實(shí)現(xiàn)。

代碼實(shí)現(xiàn)

發(fā)送簡(jiǎn)單郵件

郵件實(shí)體類

public class Mail implements Serializable
{
    private static final long serialVersionUID = -1001194001681838276L;
    /**
     * 發(fā)送者
     */
    private String from;
    /**
     * 接收者
     */
    private String to;
    private String cc;
    private String bcc;
    /**
     * 主題
     */
    private String subject;
    /**
     * 內(nèi)容
     */
    private String body;
    private String fileName;
    /**
     * 文件路徑
     */
    private String filePath;
   //
  } 

業(yè)務(wù)實(shí)現(xiàn)類

public interface MailService
{
    /**
     * 發(fā)送簡(jiǎn)單郵件
     * @param mail
     */
  void sendSimpleMail(Mail mail);
 }
 
 // 實(shí)現(xiàn)類
 @Component
public class MailServiceImpl implements MailService
{
    private Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
    
    @Autowired
    private JavaMailSenderImpl mailSender;
    
    @Autowired
    private SpringTemplateEngine templateEngine;
    
    public void sendSimpleMail(Mail mail)
    {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(mail.getFrom());
        message.setTo(mail.getTo());
        message.setSubject(mail.getSubject());
        message.setText(mail.getBody());
        mailSender.send(message);
        logger.info("發(fā)送完畢");
    }
 }

測(cè)試類

@RestController
@RequestMapping("mail")
public class MailController
{
    @Autowired
    private MailService mailService;
    
    @Async
    @GetMapping("sendSimplEmail")
    public String sendSimplEmail() 
    {
        Mail mail = new Mail();
        mail.setFrom("xx@qq.com);
        mail.setTo("yyy@qq.com");
        mail.setSubject("測(cè)試郵件");
        mail.setBody("這是一封測(cè)試郵件");
        mailService.sendSimpleMail(mail);
        
        return "發(fā)送成功";
    }

注意:郵件功能需要異步發(fā)送,所以采用的@Async注解來實(shí)現(xiàn)。

至此簡(jiǎn)單的郵件發(fā)送功能已經(jīng)完成。

擴(kuò)展功能

發(fā)送Html內(nèi)容的郵件

發(fā)送簡(jiǎn)單的郵件,有時(shí)候無(wú)法滿足業(yè)務(wù)的需求,我們需要至此發(fā)送帶HTMl內(nèi)容格式的郵件。

業(yè)務(wù)實(shí)現(xiàn)類

 public void sendHtmlMail(Mail mail)
    {
        MimeMessage message =mailSender.createMimeMessage();
        MimeMessageHelper messageHelper=null;
        try
        {
            // 設(shè)置編碼utf-8
            messageHelper = new MimeMessageHelper(message, true, "UTF-8");
            messageHelper.setFrom(mail.getFrom());
            messageHelper.setTo(mail.getTo());
            messageHelper.setSubject(mail.getSubject());
            //轉(zhuǎn)換html
            messageHelper.setText(mail.getBody(),true);
            mailSender.send(message);
        }
        catch (MessagingException e)
        {
            logger.error("發(fā)送郵件失敗");
            throw new RuntimeException("發(fā)送郵件失敗",e);
        }
        logger.info("發(fā)送完畢");
    }

注意事項(xiàng): 1.采用html格式的郵件需要注意內(nèi)容的格式,采用UTF-8格式否則中文會(huì)出現(xiàn)亂碼。 2.設(shè)置郵件內(nèi)容時(shí),需要將設(shè)置為true,否則html內(nèi)容會(huì)原本輸出。

測(cè)試類

   @Async
    @GetMapping("sendHtmlEmail")
    public String sendHtmlEmail() 
    {
        Mail mail = new Mail();
        mail.setFrom("xx@qq.com);
        mail.setTo("yyy@qq.com");
        mail.setSubject("測(cè)試html格式郵件");
        String content = "<html>\n" +
                "<body>\n" +
                "<h3>hello! 這是測(cè)試html內(nèi)容郵件!</h3>\n" +
                "</body>\n" +
                "</html>";
        
        mail.setBody(content);
        mailService.sendHtmlMail(mail);
        
        return "發(fā)送成功";
    }

發(fā)送帶附件郵件

業(yè)務(wù)實(shí)現(xiàn)類

   public void sendAttachmentsMail(Mail mail)
    {
        MimeMessage message =mailSender.createMimeMessage();
        MimeMessageHelper messageHelper=null;
        try
        {
            // 設(shè)置編碼utf-8
            messageHelper = new MimeMessageHelper(message, true, "UTF-8");
            messageHelper.setFrom(mail.getFrom());
            messageHelper.setTo(mail.getTo());
            messageHelper.setSubject(mail.getSubject());
            //轉(zhuǎn)換html
            messageHelper.setText(mail.getBody(),true);
            
            // 附件
            FileSystemResource resourse = new FileSystemResource(new File(mail.getFilePath()));
            // 附件名稱和路徑
            messageHelper.addAttachment(mail.getFileName(), resourse);
            mailSender.send(message);
        }
        catch (MessagingException e)
        {
            logger.error("發(fā)送郵件失敗");
            throw new RuntimeException("發(fā)送郵件失敗",e);
        }
        logger.info("發(fā)送完畢");
    }

測(cè)試類

    @Async
    @GetMapping("sendAttachmentsMail")
    public String sendAttachmentsMail() 
    {
        Mail mail = new Mail();
        mail.setFrom("xx@qq.com);
        mail.setTo("yyy@qq.com");
        mail.setSubject("測(cè)試附件郵件");
        mail.setBody("測(cè)試附件郵件,有附件請(qǐng)下載");
        mail.setFilePath("E:\\cfg\\test.png");
        mail.setFileName("test.png");
        mailService.sendAttachmentsMail(mail);
        return "發(fā)送成功";
    }

注意:設(shè)置附件的路徑和附件的名稱。

發(fā)送模板郵件

有些特殊需要,我們需要采用固定的郵件模板發(fā)送郵件。

郵件的模板可以采用thymeleaf和freemark來實(shí)現(xiàn),本文將采用thymeleaf來實(shí)現(xiàn)郵件模板發(fā)送。

添加依賴

<!-- thymeleaf 模板 -->
	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-thymeleaf</artifactId>
	</dependency>
	
	<dependency>
	    <groupId>ognl</groupId>
	    <artifactId>ognl</artifactId>
	    <version>3.2.14</version>
	</dependency>

模板內(nèi)容

模板路徑:src/main/resources/templates/emailTemplate.html

模板內(nèi)容:

<!DOCTYPE html>
<html lang="en"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>mail</title>
</head>
<body>

<table align="center" cellpadding="0" cellspacing="0" width="600px" style="margin-bottom:20px">
    <tr>
        <td>
            <table align="center" border="0" cellpadding="0" cellspacing="0" width="600"
                   style="border-collapse: collapse;">

                <tr>
                    <td bgcolor="#ffffff">
                        <h3>郵件模板</h3>

                        <table border="0" cellpadding="0" cellspacing="0" width="100%">
                            <tr>
                                <td colspan="2" style="padding: 0 0 3px 0">
                                         公司名稱:<span th:text="${emailParam.companyName}"></span>
                                </td>
                            </tr>
                            <tr>
                                <td style="padding: 12px 0 3px 0">
                                    地址:<span th:text="${emailParam.address}"></span>
                                </td>
                            </tr>
                            <tr>
                                <td style="padding: 12px 0 3px">
                                    聯(lián)系人:<span th:text="${emailParam.phone}"></span>
                                </td>
                            </tr>

                        </table>
                    </td>
                </tr>
            </table>
        </td>
    </tr>

</table>
</body>
</html>

業(yè)務(wù)實(shí)現(xiàn)類

 public void sendTemplateMail(Mail mail)
    {
        Context context = new Context();
        Map<String, Object> emailParam = new HashMap<>();
        emailParam.put("companyName", "公司名稱");
        emailParam.put("address", "公司地址");
        emailParam.put("phone", "聯(lián)系電話");
        context.setVariable("emailParam", emailParam);
        //模板合成html內(nèi)容
        String emailTemplate = templateEngine.process("emailTemplate", context);
        mail.setBody(emailTemplate);
        sendHtmlMail(mail);
    }

測(cè)試示例

    @Async
    @GetMapping("sendTemplateEmail")
    public String sendTemplateEmail() 
    {
        Mail mail = new Mail();
        mail.setFrom("xx@qq.com);
        mail.setTo("yyy@qq.com");
        mail.setSubject("測(cè)試模板郵件");
        mailService.sendTemplateMail(mail);
        return "發(fā)送成功";
    }

總結(jié)

本文講解的是Spring Boot集成JavaMailSender發(fā)送郵件,郵件內(nèi)容格式有種,需要結(jié)合業(yè)務(wù)的來選擇對(duì)應(yīng)的實(shí)現(xiàn)方式。

到此這篇關(guān)于Spring Boot集成JavaMailSender發(fā)送郵件功能的文章就介紹到這了,更多相關(guān)SpringBoot JavaMailSender發(fā)郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一篇文章教你使用枚舉來實(shí)現(xiàn)java單例模式

    一篇文章教你使用枚舉來實(shí)現(xiàn)java單例模式

    本篇文章主要介紹了Java實(shí)現(xiàn)單例的3種普遍的模式,餓漢式、懶漢式、枚舉式。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-07-07
  • 創(chuàng)建Maven項(xiàng)目和Spring IOC實(shí)例過程解析

    創(chuàng)建Maven項(xiàng)目和Spring IOC實(shí)例過程解析

    這篇文章主要介紹了創(chuàng)建Maven項(xiàng)目和Spring IOC實(shí)例過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java中字符串與日期轉(zhuǎn)換常見方法總結(jié)

    Java中字符串與日期轉(zhuǎn)換常見方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java中字符串與日期轉(zhuǎn)換常見方法的相關(guān)資料,在Java編程中經(jīng)常需要將字符串表示的日期轉(zhuǎn)換為日期對(duì)象進(jìn)行處理,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Java中注解的常見用法總結(jié)

    Java中注解的常見用法總結(jié)

    注解(Annotation),也叫元數(shù)據(jù),是JDK1.5及以后版本引入的一個(gè)特性,本文主要為大家介紹了注解的常見用法,需要的小伙伴可以參考一下
    2023-07-07
  • 使用JPA自定義VO類型轉(zhuǎn)換(EntityUtils工具類)

    使用JPA自定義VO類型轉(zhuǎn)換(EntityUtils工具類)

    這篇文章主要介紹了使用JPA自定義VO類型轉(zhuǎn)換(EntityUtils工具類),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot導(dǎo)出PDF的四種實(shí)現(xiàn)方法詳解

    SpringBoot導(dǎo)出PDF的四種實(shí)現(xiàn)方法詳解

    在Spring?Boot應(yīng)用程序中實(shí)現(xiàn)PDF導(dǎo)出功能,可以選擇多種庫(kù)和技術(shù)棧,本文為大家整理了四種常見的方法,感興趣的小伙伴可以參考一下
    2025-02-02
  • Java實(shí)例講解枚舉enum的實(shí)現(xiàn)

    Java實(shí)例講解枚舉enum的實(shí)現(xiàn)

    枚舉法的本質(zhì)就是從所有候選答案中去搜索正確的解,枚舉算法簡(jiǎn)單粗暴,他暴力的枚舉所有可能,盡可能地嘗試所有的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java擦除和轉(zhuǎn)換實(shí)例分析

    Java擦除和轉(zhuǎn)換實(shí)例分析

    這篇文章主要介紹了Java擦除和轉(zhuǎn)換,結(jié)合實(shí)例形式分析了java擦除和轉(zhuǎn)換概念、功能及相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • 如何在Java中判斷兩個(gè)Long類型是否相等

    如何在Java中判斷兩個(gè)Long類型是否相等

    這篇文章主要介紹了如何在Java中判斷兩個(gè)Long類型是否相等,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的?參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 如何解決springboot讀取配置文件的中文亂碼問題

    如何解決springboot讀取配置文件的中文亂碼問題

    本篇文章主要介紹了如何解決springboot讀取配置文件的中文亂碼問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看
    2018-05-05

最新評(píng)論

葫芦岛市| 吴堡县| 平远县| 和顺县| 虞城县| 大新县| 平塘县| 德江县| 柘城县| 砀山县| 化德县| 琼结县| 志丹县| 利川市| 齐河县| 缙云县| 宿州市| 固原市| 元阳县| 治县。| 德惠市| 墨竹工卡县| 敖汉旗| 罗平县| 遂宁市| 扎鲁特旗| 绥江县| 阜宁县| 尼勒克县| 新化县| 涞源县| 抚州市| 咸宁市| 桐梓县| 根河市| 汝州市| 南陵县| 读书| 湖北省| 克什克腾旗| 尉犁县|