Java工具类:批量发送邮件(带附件)

不好用请移至评论区揍我
原创代码,请勿转载,谢谢!

一、介绍

  1. 用于给用户发送特定的邮件内容,支持附件、批量发送
  2. 邮箱账号必须要开启 SMTP 服务(具体见下文教程)
  3. 本文邮箱设置示例以”网易邮箱“为例,其他如qq邮箱或企业邮箱均可,只要在设置中对应开启SMTP及授权码等操作即可使用
  4. 完整代码见文末

二、邮箱设置

开启 SMTP 服务
​​

设置授权码


三、完整代码

maven

<dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.4.7</version>
</dependency>

java

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Properties;/*** @Author 954* @create 2024/1/27 13:46*/
public class EmailUtil {// 发送者别名private static final String SENDER_NAME = "XXX" ;// 发送邮箱地址private static final String SENDER_ADDRESS = "XXX@163.com" ;// 发送邮箱的授权码private static final String SENDER_PWD = "XXX" ;// 密送的邮箱地址private static final String PRIVATE_ADDRESS = "XXX@163.com" ;/*** 发送邮件的环境对象*/private static final Session EMAIL_SESSION = getEmailSession();/*** 批量发送电子邮件* @param emailAddressList  邮箱地址* @param content           邮件内容* @param title             邮件标题* @param fileList          附件* @throws Exception*/public synchronized void sendEmail(List<String> emailAddressList, String title, String content, List<File> fileList) throws Exception {MimeMessage mimeMessage = getMimeMessage(emailAddressList, title, content);if (!CollectionUtils.isEmpty(fileList)){// 处理附件Multipart multipart = getMultipart(fileList);mimeMessage.setContent(multipart);//  添加邮件内容BodyPart contentPart = new MimeBodyPart();contentPart.setContent(content, "text/html;charset=UTF-8");// 将multipart对象放入message中multipart.addBodyPart(contentPart);}Transport.send(mimeMessage);}private MimeMessage getMimeMessage(List<String> emailAddressList, String title, String content) throws Exception {// 创建邮件消息MimeMessage message = new MimeMessage(EMAIL_SESSION);// 设置发件人message.setFrom(new InternetAddress(SENDER_ADDRESS, SENDER_NAME));// 设置收件人InternetAddress[] address = new InternetAddress[emailAddressList.size()] ;for (int i = 0; i < emailAddressList.size(); i++){address[i] = new InternetAddress(emailAddressList.get(i)) ;}message.setRecipients(Message.RecipientType.TO, address);// 设置密送message.setRecipient(Message.RecipientType.BCC, new InternetAddress(PRIVATE_ADDRESS));// 设置邮件标题message.setSubject(title, "UTF-8");// 设置邮件的内容体message.setContent(content, "text/html;charset=UTF-8");// 设置发送时间message.setSentDate(new Date());return message;}private Multipart getMultipart(List<File> fileList) {if (CollectionUtils.isEmpty(fileList)) return null;Multipart multipart = new MimeMultipart();// 添加附件的内容fileList.stream().parallel().forEach(file -> {try {BodyPart attachmentBodyPart = new MimeBodyPart();DataSource source = new FileDataSource(file);attachmentBodyPart.setDataHandler(new DataHandler(source));// MimeUtility.encodeWord可以避免文件名乱码attachmentBodyPart.setFileName(MimeUtility.encodeWord(file.getName()));multipart.addBodyPart(attachmentBodyPart);} catch (Exception e) {e.printStackTrace();}});return multipart ;}private static Session getEmailSession(){// 配置发送邮件的环境属性Properties props = new Properties();//设置用户的认证方式props.setProperty("mail.smtp.auth", "true");//设置传输协议props.setProperty("mail.transport.protocol", "smtp");//设置发件人的SMTP服务器地址props.setProperty("mail.smtp.host", "smtp.163.com");// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码return new PasswordAuthentication(SENDER_ADDRESS, SENDER_PWD);}};return Session.getInstance(props, authenticator);}public static void main(String[] args) throws Exception {sendEmail(Arrays.asList("XXX@qq.com", "XXX@163.com"), "我是标题", "我是内容", null);}}

​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/610930.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务学习(黑马)

学习黑马的微服务课程的笔记 导学 微服务架构 认识微服务 SpringCloud spring.io/projects/spring-cloud/ 服务拆分和远程调用 根据订单id查询订单功能 存在的问题 硬编码 eureka注册中心 搭建eureka 服务注册 在order-service中完成服务拉取 Ribbon负载均衡 Nacos注册中心…

ELK-Kibana 部署

目录 一、在 node1 节点上操作 1.1.安装 Kibana 1.2.设置 Kibana 的主配置文件 1.3.启动 Kibana 服务 1.4.验证 Kibana 1.5.将 Apache 服务器的日志&#xff08;访问的、错误的&#xff09;添加到 ES 并通过 Kibana 显示 1.6. 浏览器访问 二、部署FilebeatELK&…

使用 Axios 处理 AxiosError 的三种常见方法

在使用 Axios 时处理 AxiosError 有几种常见的方法: 使用 try-catch 语句捕获异常: try {const response await axios.get(/api/data);// 处理响应数据 } catch (error) {if (error.response) {// 请求成功但状态码不在 2xx 范围console.log(error.response.data);console.l…

学习JavaEE的日子 Day33 File类,IO流

Day33 1.File类 File是文件和目录路径名的抽象表示 File类的对象可以表示文件&#xff1a;C:\Users\Desktop\hhy.txt File类的对象可以表示目录路径名&#xff1a;C:\Users\Desktop File只关注文件本身的信息&#xff08;文件名、是否可读、是否可写…&#xff09;&#xff0c…

【前缀积】Leetcode 除自身以外数组的乘积

题目解析 238. 除自身以外数组的乘积 算法讲解 我们可以使用两个空间保存当前位置的左边积和右边积&#xff0c;需要注意的地方初始的dp表需要初始化为1&#xff0c;如果是0则无法得到结果&#xff0c;因为此处是乘法 class Solution { public:vector<int> productEx…

LLM 推理优化探微 (4) :模型性能瓶颈分类及优化策略

编者按&#xff1a; 在人工智能浪潮袭卷全球的大背景下&#xff0c;进一步提升人工智能模型性能&#xff0c;满足更多应用需求已经刻不容缓。如何优化模型延迟和吞吐量&#xff0c;成为了业界亟待解决的重要问题。 我们今天为大家带来的这篇文章&#xff0c;其观点为&#xff1…

【考研数学】零基础全年保底计划+资料分享

数二90现在真的不提啊够用了&#xff01;零基础或者基础差的&#xff0c;听我的&#xff0c;大胆一点&#xff0c;咱们定120的目标&#xff01; 不要因为自己基础不好什么的没自信...现在意识到问题是来得及解决的 本人属于基础很差相当于是零基础的23考研党&#xff0c;经过…

-bash: wget: command not found

1、-bash: wget: command not found 如下图 2、解决办法 yum -y install wget

牛客NC413 两个升序数组的中位数【hard 数组,模拟 Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/b3b59248e61f499482eaba636305474b 思路 直接模拟2个数组有顺序放到一个数组中help中如果help长度为奇数&#xff0c;返回中间的数如果help长度为偶数&#xff0c;返回中间2个数的和除以2参考答案java import j…

Web程序设计-实验01 HTML与CSS基础

【实验主题】 影视详情页设计 【实验任务】 1、浏览并分析多个影视详情页面&#xff08;详见参考资源&#xff0c;建议自行搜索更多影视网站&#xff09;的主要元素构成和版面设计&#xff0c;借鉴并构思预期效果。 2、新建 index.html文件&#xff0c;合理运用HTML标记编写…

opc ua 环境构建(记录一)

1、准备 Siemens Simatic WinCC v7.5 二、配置 SIMATIC NET与S7-200 SMART 集成以太网口OPC 通信(TIA平台) 硬件: ①S7-200 SMART ②PC 机 ( 集成以太网卡) 软件: ① STEP 7-Micro/WIN SMART V2.1 ② STEP 7 Professional(TIA Portal V13 SP1 Upd 9) ③ SIMATIC NET …

TG-12F使用SDK对接阿里生活物联网平台

文章目录 前言一、注意二、准备1. 安装Ubuntu&#xff08;版本20.04 X64&#xff09;程序运行时库。按顺序逐条执行命令&#xff1a;2. 安装Ubuntu&#xff08;版本20.04 X64&#xff09;依赖软件包。按照顺序逐条执行命令&#xff1a;3. 安装Python依赖包。按照顺序逐条执行命…