• 邮件(一):Springboot+thymeleaf的发邮件部分


    1 邮件配置部分

    qq邮箱授权码获取

    java 邮件属性配置

    (1)写在代码中(任选其一,建议2)

    JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
    javaMailSender.setHost("smtp.qq.com");
    javaMailSender.setPort(25);
    javaMailSender.setUsername("1464245418@qq.com");
    javaMailSender.setPassword("yourAuthorizationCode");
    Properties properties = new Properties();
    properties.setProperty("mail.host", "smtp.qq.com");
    properties.setProperty("mail.transport.protocol", "smtp");
    properties.setProperty("mail.smtp.auth", "true");
    properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    properties.setProperty("mail.smtp.port", "25");
    properties.setProperty("mail.smtp.socketFactory.port", "25");
    
    javaMailSender.setJavaMailProperties(properties);
    

    (2)写在.properties文件中

    spring.mail.host=smtp.qq.com
    spring.mail.port=25
    spring.mail.username=1464245418@qq.com
    spring.mail.password=yourAuthorizationCode
    

    2 邮件简单发送

    主要使用JavaMail包,邮件内容使用thymeleaf

    <dependencies>
      <!--SpringBoot 起步依赖-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
      </dependency>
      <!--JavaMail-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
      </dependency>
      <!--thymeleaf模板-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
    </dependencies>
    

    发送邮件

    @Resource
    private TemplateEngine templateEngine;
    @Resource
    private JavaMailSenderImpl javaMailSender;
    
     /**
       * @description 仅发送简单邮件.
       * @author liuhongchen
     */  
    public void sendSimpleMail() {
      // 创建MIMEMessage对象
      MimeMessage message = javaMailSender.createMimeMessage();
      try {
          //true表示需要创建一个multipart message
          MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
          String nick;
          try {
            nick = MimeUtility.encodeText("测试邮件");
          } catch (UnsupportedEncodingException e) {
            MailService.log.error("邮件nickName有问题:" + e.getMessage());
            throw new ServiceException(MessageCode.SYSTEM_ERROR);
          }
    
          // 邮件发送信息(from,to,cc)
          helper.setFrom(new InternetAddress(nick + "<1464245418@qq.com>"));
          helper.setTo(new String[]{"1464245418@qq.com"});
          helper.setCc(new String[]{"1464245418@qq.com"});
          helper.setSubject("这是邮件的主题");
    
          // 注入邮件内容模板
          helper.setText("<h1>This is actual message</h1>", "text/html", true);
    
          try {
            javaMailSender.setPassword("记得填密码");
            javaMailSender.setUsername("1464245418@qq.com");
            javaMailSender.send(message);
            MailService.log.info("html邮件发送成功");
          } catch (Exception e) {
            MailService.log.error("邮件发送有问题:" + e.getMessage());
          }
    
        } catch (Exception e) {
          MailService.log.error("发送html邮件时发生异常!", e);
        }
    }
    

    3 邮件带附件、内嵌图片(使用thymeleaf)

    发送邮件代码

    /**
      * 发送带附件和内嵌图片的邮件.
      * 
      * @param templateName   thymeleaf模板名
      * @param mailAccount    邮箱账号密码
      * @param contextVars    邮件内容变量
      * @param inlineImgMap   内嵌图片Map
      * @param attachmentList 附件List
      * @return void
      * @author liuhongchen
      * @date 2020/8/21 10:36 上午
      */
    @Async
    public void sendSimpleMail(String templateName, Map<String, Object> contextVars,
        Map<String, String> inlineImgMap, Map<String, DataSource> attachmentList) {
      // 解决:放置附件名过长被截断,从而产生乱码问题
      System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
    
      MimeMessage message = javaMailSender.createMimeMessage();
    
      try {
        //true表示需要创建一个multipart message
        MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
        String nick;
        try {
          nick = MimeUtility.encodeText("烛龙监控平台");
        } catch (UnsupportedEncodingException e) {
          MailService.log.error("邮件nickName有问题:" + e.getMessage());
          throw new ServiceException(MessageCode.SYSTEM_ERROR);
        }
    
        // 邮件发送信息(from,to,cc)
        helper.setFrom(new InternetAddress(nick + "<1464245418@qq.com>"));
        helper.setTo(new String[]{"1464245418@qq.com"});
        helper.setCc(new String[]{"1464245418@qq.com"});
        helper.setSubject("这是邮件的主题");
    
        // 注入邮件模板(注入变量和邮件模板内容)
        Context context = new Context();
        context.setVariables(contextVars);
        String emailContext = templateEngine.process(templateName, context);
        helper.setText(emailContext, true);
    
        // 附件
        if (attachmentList != null) {
          for (Entry<String, DataSource> fileEntry : attachmentList.entrySet()) {
            helper.addAttachment(fileEntry.getKey(), fileEntry.getValue());
          }
        }
        // 插入内嵌资源
        if (inlineImgMap != null) {
          for (Entry<String, String> imgEntry : inlineImgMap.entrySet()) {
            helper.addInline(imgEntry.getKey(), new File(imgEntry.getValue()));
          }
        }
    
        try {
          javaMailSender.setPassword("记得填密码");
          javaMailSender.setUsername("1464245418@qq.com");
          javaMailSender.send(message);
          MailService.log.info("html邮件发送成功");
        } catch (Exception e) {
          MailService.log.error("邮件发送有问题:" + e.getMessage());
        }
    
      } catch (Exception e) {
        MailService.log.error("发送html邮件时发生异常!", e);
      }
    }
    

    thymeleaf模板

    <!DOCTYPE html>
    <html lang="zh-Hans" xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/html">
    <head>
    <meta charset="UTF-8"/>
    </head>
    <body>
        <table th:if="${sendType eq 'preview'}">
              <tr>
                <td align="center"><img th:src="${previewAndroidTimeTop}" width="900"  /></td>
              </tr>
              <tr >
                <td align="center"><img th:src="${previewIosTimeTop}" width="900"  /></td>
              </tr>
            </table>
    </body>
    </html>
    
    1. 其中的变量sendType在contextVar中设置
    Map<String, Object> contextVars = new HashMap<>(16);
    contextVars.put("sendType", "preview");
    
    1. 图片可以直接放置图片链接,但是会出现一个问题,邮件会出于保护隐私不显示图片,此时需要手动点击”下载图片“,才会显示。
      使用cid的好处就是可以避免这一操作,但需要使用图片的绝对位置,后续需要删除该图片
    Map<String, String> inlineImgMap = new HashMap<>(16);
    inlineImgMap.put("androidTimeTop", "/Users/liuhongchen/code/androidTimeTop.png"));
    inlineImgMap.put("iosTimeTop", "/Users/liuhongchen/code/iosTimeTop.png"));
    
  • 相关阅读:
    Leetcode Plus One
    Leetcode Swap Nodes in Pairs
    Leetcode Remove Nth Node From End of List
    leetcode Remove Duplicates from Sorted Array
    leetcode Remove Element
    leetcode Container With Most Water
    leetcode String to Integer (atoi)
    leetcode Palindrome Number
    leetcode Roman to Integer
    leetcode ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/hiluna/p/13534986.html
Copyright © 2020-2023  润新知