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

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

 更新時(shí)間:2022年05月06日 10:19:00   作者:劍圣無痕  
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í)候無法滿足業(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)文章

  • 基于Mybatis-Plus的CRUD的實(shí)現(xiàn)

    基于Mybatis-Plus的CRUD的實(shí)現(xiàn)

    這篇文章主要介紹了基于Mybatis-Plus的CRUD的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java線程池復(fù)用線程的秘密你知道嗎

    Java線程池復(fù)用線程的秘密你知道嗎

    這篇文章主要為大家詳細(xì)介紹了Java線程池復(fù)用線程的秘密,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望您能夠多多關(guān)注

    2022-03-03
  • Spring?Boot?條件注解詳情

    Spring?Boot?條件注解詳情

    這篇文章主要介紹了Spring?Boot?條件注解詳情,SpringBoot條件注解@Conditional,可用于根據(jù)某個(gè)特定的條件來判斷是否需要?jiǎng)?chuàng)建某個(gè)特定的Bean,下文更多相關(guān)介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Java中String類常用方法詳細(xì)匯總

    Java中String類常用方法詳細(xì)匯總

    Java中String類在所有項(xiàng)目開發(fā)里面一定會(huì)用到,因此String類提供了一系列的功能操作方法,下面這篇文章主要給大家介紹了關(guān)于Java中String類常用方法的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • java中對(duì)象和Map互相轉(zhuǎn)換的幾種常見方式舉例

    java中對(duì)象和Map互相轉(zhuǎn)換的幾種常見方式舉例

    Map在日常開發(fā)應(yīng)用中的頻率很高,最常用的實(shí)現(xiàn)類是HashMap和有序的TreeMap,下面這篇文章主要給大家介紹了關(guān)于java中對(duì)象和Map互相轉(zhuǎn)換的幾種常見方式舉例,需要的朋友可以參考下
    2024-01-01
  • java基礎(chǔ)之標(biāo)簽、按鈕和按鈕事件簡(jiǎn)介

    java基礎(chǔ)之標(biāo)簽、按鈕和按鈕事件簡(jiǎn)介

    本文給大家?guī)淼氖莏ava圖形界面的基礎(chǔ)知識(shí),簡(jiǎn)單介紹了標(biāo)簽、按鈕和按鈕事件,十分的詳細(xì),有需要的小伙伴可以參考下。
    2015-06-06
  • mybatis plus or and 的合并寫法實(shí)例

    mybatis plus or and 的合并寫法實(shí)例

    這篇文章主要介紹了mybatis plus or and 的合并寫法實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot 錯(cuò)誤處理機(jī)制與自定義錯(cuò)誤處理實(shí)現(xiàn)詳解

    SpringBoot 錯(cuò)誤處理機(jī)制與自定義錯(cuò)誤處理實(shí)現(xiàn)詳解

    這篇文章主要介紹了SpringBoot 錯(cuò)誤處理機(jī)制與自定義錯(cuò)誤處理實(shí)現(xiàn)詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java基礎(chǔ):流Stream詳解

    Java基礎(chǔ):流Stream詳解

    Stream流是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列。這篇文章主要介紹了Java8新特性Stream流的相關(guān)資料,需要的朋友參考下吧
    2021-09-09
  • java的引用類型的詳細(xì)介紹

    java的引用類型的詳細(xì)介紹

    在java中提供了4個(gè)級(jí)別的引用:強(qiáng)引用、軟引用、弱引用、虛引用。其中強(qiáng)引用FinalReference是default個(gè)飾符來修飾,其它3個(gè)級(jí)別均為public修飾
    2013-10-10

最新評(píng)論