1. 程式人生 > 實用技巧 >Java使用springboot傳送郵件

Java使用springboot傳送郵件

廢話不說直接上程式碼!!!

pom檔案:

<dependencies>

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

        <dependency>
            <groupId>org.springframework.boot</
groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 引入郵件的starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</
artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</
groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>

MailService:

package com.xieh.mail.service;


import javafx.util.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import freemarker.template.Configuration;
import javax.mail.internet.MimeMessage;


import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author 謝輝
 * @Classname MailService
 * @Description TODO
 * @Date 2020/11/24 10:08
 */
@Component
public class MailService {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String sender;

    /**
     * 用來發送模版郵件
     */
    @Autowired
    private TemplateEngine templateEngine;

    //傳送郵件的模板引擎
    @Autowired
    private FreeMarkerConfigurer configurer;


    /**
     * 傳送簡單的郵件
     * @param receiver 接收者
     * @param subject 主題
     * @param context 內容
     */
    public void sendSimpleMail(String receiver,String subject, String context){
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setFrom(sender);
        mailMessage.setTo(receiver);
        mailMessage.setSubject(subject);
        mailMessage.setText(context);
        try {
            mailSender.send(mailMessage);
            logger.info("簡單郵件傳送成功!接收者是:" + receiver);
        }catch (Exception e){
            e.printStackTrace();
            logger.error("簡單郵件傳送失敗!");
        }
    }


    /**
     * 傳送html的郵件
     * @param receiver 接收者
     * @param subject 主題
     * @param context 內容
     */
    public void sendHtmlMail(String receiver,String subject, String context){
        MimeMessage mimeMailMessage = mailSender.createMimeMessage();
        try{
            MimeMessageHelper helper = new MimeMessageHelper(mimeMailMessage,true,"UTF-8");
            helper.setFrom(sender);
            helper.setTo(receiver);
            helper.setSubject(subject);
            helper.setText(context,true);
            mailSender.send(mimeMailMessage);
            logger.info("html郵件傳送成功!接收者是:" + receiver);
        }catch (Exception e){
            e.printStackTrace();
            logger.error("html郵件傳送失敗!");
        }
    }


    /**
     * 使用Freemarker模板傳送郵件
     * @param receiver 接收者
     * @param subject 主題
     * @param params 引數
     */
    public void sendFreemarkerTemplateMail(String receiver, String subject, Map<String, Object> params){
        MimeMessage mimeMailMessage = mailSender.createMimeMessage();
        try{
            MimeMessageHelper helper = new MimeMessageHelper(mimeMailMessage,true,"UTF-8");
            helper.setFrom(sender);
            helper.setTo(receiver);
            helper.setSubject(subject);
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
            //設定編碼
            configuration.setDefaultEncoding("utf-8");
            //ftl模板檔案
            configuration.setClassForTemplateLoading(this.getClass(), "/static/");

            String html = FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate("mail.ftl"), params);
            helper.setText(html, true);//重點,預設為false,顯示原始html程式碼,無效果
            mailSender.send(mimeMailMessage);
            logger.info("Freemarker郵件傳送成功!接收者是:" + receiver);
        }catch (Exception e){
            e.printStackTrace();
            logger.error("Freemarker郵件傳送失敗!");
        }

    }

    /**
     * 使用Thymeleaf模板傳送郵件
     * @param receiver 接收者
     * @param subject 主題
     * @param params 引數
     */
    public void  sendThymeleafTemplateMail(String receiver, String subject, Map<String, Object> params){
        MimeMessage mimeMailMessage = mailSender.createMimeMessage();
        //建立郵件正文
        Context context = new Context();
        if(params != null){
           Set<Map.Entry<String, Object>> entrySet = params.entrySet();
           for (Map.Entry<String, Object> entry : entrySet){
               context.setVariable(entry.getKey(),entry.getValue());
           }
        }
        try{
            MimeMessageHelper helper = new MimeMessageHelper(mimeMailMessage,true,"UTF-8");
           /* context.setVariable("user", "1111");
            context.setVariable("web", "tttt");
            context.setVariable("company", "我是一個公司");
            context.setVariable("product","我是一個產品");*/
            helper.setFrom(sender);
            helper.setTo(receiver);
            helper.setSubject(subject);

            // 這裡是去找(resources的)templates目錄下的mail目錄下的mail.html檔案
            //  String emailContent = templateEngine.process("/mail/mail",context); //指定模板路徑

            // 這裡是去找(resources的)templates目錄下的emailTemplate.html檔案
            String emailContent = templateEngine.process("emailTemplate", context);
            helper.setText(emailContent,true);
            mailSender.send(mimeMailMessage);
            logger.info("Thymeleaf郵件傳送成功!接收者是:" + receiver);
        }catch (Exception e){
            e.printStackTrace();
            logger.error("Thymeleaf郵件傳送失敗!");
        }
    }


    /**
     * 傳送帶附件的郵件
     * @param receiver 接收者
     * @param subject 主題
     * @param context 內容
     * @param attachments 附件
     */
    public void sendAttachmentsMail(String receiver, String subject, String context, List<Pair<String, File>> attachments) {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = null;
        try {
            helper = new MimeMessageHelper(message, true,"UTF-8");
            helper.setFrom(sender);
            helper.setTo(receiver);
            helper.setSubject(subject);
            helper.setText(context, true);
            if(attachments != null){
                for(Pair<String,File> attachment:attachments){
                    FileSystemResource file = new FileSystemResource(attachment.getValue());
                    helper.addAttachment(attachment.getKey(), file);
                }
            }
            mailSender.send(message);
            logger.info("附件郵件傳送成功!接收者是:" + receiver);
        } catch (Exception e) {
            e.printStackTrace();
            logger.info("附件郵件傳送失敗!");
        }
    }




}

原始碼地址:https://gitee.com/xieh-gitee/SpringBootEMail

效果圖: