springboot实现发送邮件,gmail邮件,包括发送附件还有正文,以及注意覆盖问题

复盘下前个把月前写的个关于邮件激活的接口,踩了些坑,就当记录下

前言

`需求:发送邮件审核,点击邮件链接之后,审核数据通过或不通过

1 使用步骤

1.导入pom依赖

代码如下(示例):

  <!--集成邮箱--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.7.0</version></dependency>

2:一些个gmail邮件要打开的配置


3.模版的修改补充。

注意点:如何既要发送附件还有正文第一个MimeBodyPart放附件,另外一个重新new一个MimeBodyPart()放正文;,然后的话才不会覆盖,
代码如下(示例)重要部分有注释:

 package com.example.util;import com.sun.mail.util.MailSSLSocketFactory;
import org.springframework.web.multipart.MultipartFile;import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.File;
import java.util.Properties;public class sendEmailUtil {public R sendEmail(MultipartFile multipartFile, Integer userid) {try {//用的是hotmail.com 可自己激活测试 后续可能有邮件类型更改 摸版差不多String host = "outlook.office365.com";//Ip address of your system smtp-mail.outlook.comString user = "";//email address you configured in hmail serverString pwd = "";//password of email addressProperties props = new Properties();props.put("mail.smtp.host", host);props.put("mail.smtp.port", "587");props.put("mail.smtp.auth", "true");props.put("mail.smtp.starttls.enable", "true");props.put("mail.smtp.ssl.enable", "false");MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);props.put("mail.smtp.ssl.checkserveridentity", "false");props.put("mail.smtp.ssl.socketFactory", sf);MyAuthenticator authenticator = null;authenticator = new MyAuthenticator(user, pwd);Session ses = Session.getInstance(props, authenticator);ses.setDebug(true);MimeMessage message = new MimeMessage(ses);message.setFrom(new InternetAddress(user));String[] to = new String[1];to[0] = ""; //后续修改为目标邮件InternetAddress[] sendTo = new InternetAddress[1];for (int j = 0; j < 1; j++) {sendTo[j] = new InternetAddress(to[j]);}message.setRecipients(Message.RecipientType.TO, sendTo);Multipart multipart = new MimeMultipart();//添加附件部分File file = null;String originalFilename = multipartFile.getOriginalFilename();String[] filename = originalFilename.split("\\.");file= File.createTempFile(filename[0],  "."+filename[1]  );multipartFile.transferTo(file);DataSource source = new FileDataSource((file));BodyPart messageBodyPart = new MimeBodyPart();messageBodyPart.setDataHandler(new DataHandler(source));messageBodyPart.setFileName(file.getName()+".");multipart.addBodyPart(messageBodyPart); //添加excel表文件(multipartFile)文件//重点! 如果既要发附件又要发正文则再new 一个MimeBodyPart();不然会覆盖!!messageBodyPart = new MimeBodyPart();messageBodyPart.setText("点击链接之后审核通过或失败:"+"<a href=\""+"\"");//创建多重消息multipart.addBodyPart(messageBodyPart);message.setContent(multipart);message.setSubject("数据激活审核邮件:,excel表在附件,激活链接在正文");//标题Transport.send(message, message.getAllRecipients());System.out.println("done");} catch (Exception e) {System.out.println(e.toString());}return R.ok().message("发送成功-需等待1-2分钟-审核通过数据将会导入数据库");}}

需要补充一个MyAuthenticator类

public class MyAuthenticator extends Authenticator {String userName = null;String password = null;public MyAuthenticator() {}public MyAuthenticator(String username, String password) {this.userName = username;this.password = password;}@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName, password);}
}

总结

大概这么多,有什么问题互相讨论

想要探讨一个问题:
1:单条数据激活可以通过把主键id拼接在激活链接url上,写个接口激活,那么如果需要激活大批量的数据,你会怎么实现呢?

springboot实战,实现发送邮件,gmail邮件,包括发送附件还有正文,以及注意覆盖问题相关推荐

  1. python 发送邮件 普通邮件 HTML 发送带附件 群发邮件

    我是一个测试工程师,在做自动化时,会写一些自己用的好的工具,目前有一些现成的工具,自己用着,不是大材小用,就是不符合实际需求,这次整理一个发送邮件的脚本. 文章目录 1. smtplib 与 emai ...

  2. springboot实战pdf_Java程序员中秋节福利发送:Spring boot+Redis实战文档「PDF」

    中秋节越来越近了,平日里,各大公司拼员工拼技术拼实力:到了节日,则要拼奖金.拼福利.拼假期,还要拼创意.今天,小编为大家也准备了一份中秋节礼物,让我们一起来看看礼物是啥吧! Spring boot文档 ...

  3. 使用springboot发送QQ邮件,可以发送附件

    使用springboot发送QQ邮件 1.在application.properties中写入以下配置信息 #文件上传的配置信息 #总大小 spring.servlet.multipart.max-r ...

  4. vfp 右键发送邮件_邮件批量发送的方法教程

    实际工作中经常会遇到批量发邮件的需求,比如发送工资条.节日祝福.定期汇报工作成果.日报.周报.月报等,当然如果发送的邮件不是很多的话完全可以手工发送,一旦遇到批量发送的场景,手工一份一份的发送就会变得 ...

  5. 【SpringBoot实战系列】RabbitMQ实现消息发送并实现邮箱发送异常监控报警实战

    大家好,我是工藤学编程

  6. 玩转 SpringBoot 2 之发送邮件篇

    前言 通过本文你将了解到SpringBoot 2 中发送邮件使用教程,具体详细内容如下: 发送普通的邮件 发送html格式邮件 发送html 中带图片的邮件 发送带附件的邮件 阅读前需要你必须了解如何 ...

  7. java 发邮件授权码_javamail - androidmail 发送邮件 各种邮件授权方式

    当你用到邮箱这方面的功能,可以参考该篇文章.已经在实际应用使用中. 适应qq邮箱(国内大部分邮箱跟qq相似,如163),hotmail(outlook),国外邮箱gmail等配置,已经能通过代码发送成 ...

  8. Bug邮件发送附件失败 笔误附件名字多了一个空格

    邮件发送显示服务器内部错误 定位至邮件的发送附件部分 原来是文件的名字多了一个空格

  9. mail 命令发送附件

     因为需要经常备份网站的数据,所以了解并学习了下linux下如何通过shell来发送邮件,这里以CentOS为例,使用mail命令来进行外部邮件的发送.mail命令的语法如下: Usage: mail ...

最新文章

  1. EM不同气候条件下土壤稀有与丰富微生物类群的分化策略
  2. HTML5(WebSockets)的脆弱性?
  3. 以股票RSI指标为例,学习Python发送邮件功能(含RSI指标确定卖点策略)
  4. HDLC 和 PPP封装简介
  5. [发布] 多选控件和时钟控件
  6. 字符串排序java_利用Java程序将字符串进行排序与拼接
  7. php制作简单的用户登陆,如何用php代码实现简单的用户登陆以及登陆验证功能
  8. There are multiple modules with names that only differ in ca
  9. 解决Yii2邮件发送问题(结果返回成功,但接收不到邮件)
  10. c语言去除图像斑点,武汉理工-图像检测与处理技术-实验报告.doc
  11. 枚举算法称硬币C语言,【算法系列之枚举】称硬币
  12. HTML5 API详解(9):大家都知道的 localStorage 本地存储
  13. python连接数据库oracle_python连接oracle数据库
  14. php循环 跳转语句,golang循环跳转语句
  15. C# WPF 利用NPOI读写Excel文件
  16. get s 数组c语言,(完整版)C语言题库数组.pdf
  17. MFC界面开发帮助文档:BCG可视化设计器使用指南
  18. Python数据处理039:数据分析之csv文件
  19. wps如何只让他显示3级标题_wps怎么把标题显示出来
  20. echarts柱状图实现正负值不同颜色在上方显示数值

热门文章

  1. GPT-3的50种玩法告诉你,它很酷,但是没有通过图灵测试
  2. 晨控CK-GW06-E03与TwinCAT软件配置指南
  3. 怎么在漫画中去表现速度线?
  4. java对象为什么要重写equals方法
  5. Spring MVC 406
  6. 基础算法学习大纲(附加yxc大佬算法模板)
  7. 通过GPU服务器运行Carla
  8. 计算机专业大专能进什么国企,大专学历可以考哪些国企?
  9. HYSBZ - 2959 长跑(动态树+并查集)
  10. hdu1728 (直撞bfs)