Java使用springboot傳送郵件
阿新 • • 發佈:2020-11-24
廢話不說直接上程式碼!!!
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("附件郵件傳送失敗!"); } } }