springboot实战,实现发送邮件,gmail邮件,包括发送附件还有正文,以及注意覆盖问题
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邮件,包括发送附件还有正文,以及注意覆盖问题相关推荐
- python 发送邮件 普通邮件 HTML 发送带附件 群发邮件
我是一个测试工程师,在做自动化时,会写一些自己用的好的工具,目前有一些现成的工具,自己用着,不是大材小用,就是不符合实际需求,这次整理一个发送邮件的脚本. 文章目录 1. smtplib 与 emai ...
- springboot实战pdf_Java程序员中秋节福利发送:Spring boot+Redis实战文档「PDF」
中秋节越来越近了,平日里,各大公司拼员工拼技术拼实力:到了节日,则要拼奖金.拼福利.拼假期,还要拼创意.今天,小编为大家也准备了一份中秋节礼物,让我们一起来看看礼物是啥吧! Spring boot文档 ...
- 使用springboot发送QQ邮件,可以发送附件
使用springboot发送QQ邮件 1.在application.properties中写入以下配置信息 #文件上传的配置信息 #总大小 spring.servlet.multipart.max-r ...
- vfp 右键发送邮件_邮件批量发送的方法教程
实际工作中经常会遇到批量发邮件的需求,比如发送工资条.节日祝福.定期汇报工作成果.日报.周报.月报等,当然如果发送的邮件不是很多的话完全可以手工发送,一旦遇到批量发送的场景,手工一份一份的发送就会变得 ...
- 【SpringBoot实战系列】RabbitMQ实现消息发送并实现邮箱发送异常监控报警实战
大家好,我是工藤学编程
- 玩转 SpringBoot 2 之发送邮件篇
前言 通过本文你将了解到SpringBoot 2 中发送邮件使用教程,具体详细内容如下: 发送普通的邮件 发送html格式邮件 发送html 中带图片的邮件 发送带附件的邮件 阅读前需要你必须了解如何 ...
- java 发邮件授权码_javamail - androidmail 发送邮件 各种邮件授权方式
当你用到邮箱这方面的功能,可以参考该篇文章.已经在实际应用使用中. 适应qq邮箱(国内大部分邮箱跟qq相似,如163),hotmail(outlook),国外邮箱gmail等配置,已经能通过代码发送成 ...
- Bug邮件发送附件失败 笔误附件名字多了一个空格
邮件发送显示服务器内部错误 定位至邮件的发送附件部分 原来是文件的名字多了一个空格
- mail 命令发送附件
因为需要经常备份网站的数据,所以了解并学习了下linux下如何通过shell来发送邮件,这里以CentOS为例,使用mail命令来进行外部邮件的发送.mail命令的语法如下: Usage: mail ...
最新文章
- EM不同气候条件下土壤稀有与丰富微生物类群的分化策略
- HTML5(WebSockets)的脆弱性?
- 以股票RSI指标为例,学习Python发送邮件功能(含RSI指标确定卖点策略)
- HDLC 和 PPP封装简介
- [发布] 多选控件和时钟控件
- 字符串排序java_利用Java程序将字符串进行排序与拼接
- php制作简单的用户登陆,如何用php代码实现简单的用户登陆以及登陆验证功能
- There are multiple modules with names that only differ in ca
- 解决Yii2邮件发送问题(结果返回成功,但接收不到邮件)
- c语言去除图像斑点,武汉理工-图像检测与处理技术-实验报告.doc
- 枚举算法称硬币C语言,【算法系列之枚举】称硬币
- HTML5 API详解(9):大家都知道的 localStorage 本地存储
- python连接数据库oracle_python连接oracle数据库
- php循环 跳转语句,golang循环跳转语句
- C# WPF 利用NPOI读写Excel文件
- get s 数组c语言,(完整版)C语言题库数组.pdf
- MFC界面开发帮助文档:BCG可视化设计器使用指南
- Python数据处理039:数据分析之csv文件
- wps如何只让他显示3级标题_wps怎么把标题显示出来
- echarts柱状图实现正负值不同颜色在上方显示数值