java给钉钉邮箱发送邮件

1.开通POP和IMAP

在这里插入图片描述

2.引入pom

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

3.逻辑

String host = "smtp.qiye.aliyun.com";
String port = "465";
String username = "xxxxxx@dingtalk.com"; // 钉钉发送者邮箱
String password = "xxxxxx"; // 发送者邮箱账号
String toEmail = "xxxxx@dingtalk.com"; // 钉钉接收者邮箱
String subject = "邮件标题"try {Properties props = new Properties();props.setProperty("mail.smtp.host", host);props.setProperty("mail.smtp.port", port);props.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");props.setProperty("mail.smtp.socketFactory.fallback", "false");// 启用调试//props.setProperty("mail.debug", "true");props.setProperty("mail.smtp.socketFactory.port", port);props.setProperty("mail.smtp.auth", "true");// 建立邮件会话Session session = Session.getDefaultInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}});// 建立邮件对象MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(username));message.setRecipients(Message.RecipientType.TO, toEmail);message.setSubject(subject);MimeMultipart multipart = new MimeMultipart();BodyPart contentPart = new MimeBodyPart();// 邮件正文contentPart.setContent(content, "text/html;charset=utf-8");multipart.addBodyPart(contentPart);// 附件MimeBodyPart attachmentBodyPart = new MimeBodyPart();// 读取本地文件,如果是前端传过来的MultipartFile文件,需要将MultipartFile转为file,再通过下面的方式:// File file = MultipartFileToFile(multipartFile);// DataSource source = new FileDataSource(file);// attachmentBodyPart.setDataHandler(new DataHandler(source));DataHandler dataHandler = new DataHandler(new FileDataSource("E:\\soft\\test.doc");attachmentBodyPart.setDataHandler(dataHandler);attachmentBodyPart.setFileName("test.doc");multipart.addBodyPart(attachmentBodyPart);// 设置邮件整体内容message.setContent(multipart);Transport.send(message);
} catch (Exception e) {e.printStackTrace();
}

4.直接添加前端传过来的MultipartFile

.....
MimeMultipart multipart = new MimeMultipart();
BodyPart contentPart = new MimeBodyPart();
// 邮件正文
contentPart.setContent(content, "text/html;charset=utf-8");
multipart.addBodyPart(contentPart);
// 附件--这里改下
MimeBodyPart attachmentBodyPart = new MimeBodyPart();
File file = MultipartFileToFile(multipartFile);
DataSource source = new FileDataSource(file);
attachmentBodyPart.setDataHandler(new DataHandler(source));
attachmentBodyPart.setFileName(file.getName());
multipart.addBodyPart(attachmentBodyPart);
// 设置邮件整体内容
message.setContent(multipart);
Transport.send(message);
.....

5.添加多个附件

MimeMultipart multipart = new MimeMultipart();
BodyPart contentPart = new MimeBodyPart();
// 邮件正文
contentPart.setContent(content, "text/html;charset=utf-8");
multipart.addBodyPart(contentPart);
// 附件--这里改下
for (MultipartFile multipartFile : files){MimeBodyPart attachmentBodyPart = new MimeBodyPart();File file = MultipartFileToFile(multipartFile);DataSource source = new FileDataSource(file);//添加附件的内容attachmentBodyPart.setDataHandler(new DataHandler(source));//添加附件的标题attachmentBodyPart.setFileName(file.getName());multipart.addBodyPart(filePart);
}
// 设置邮件整体内容
message.setContent(multipart);
Transport.send(message);

6.给多个邮箱发邮件

String tos = "a1@dingtalk.com,a2@dingtalk.com,a3@dingtalk.com";
String[] toList = to.split(",");
Address[] addresses = new Address[toList.length];
for (int i = 0; i < toList.length; i++) {addresses[i] = new InternetAddress(toList[i]);
}
message.setRecipients(Message.RecipientType.TO, addresses);

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

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

相关文章

五、AIGC大模型_04LLaMA-Factory基础知识与SFT实战

1、LLaMA-Factory 基本介绍 1.1 定义 LLaMA-Factory 是一个开源的大型语言模型&#xff08;LLM&#xff09;微调框架&#xff0c;旨在帮助开发者和研究人员轻松地对预训练语言模型进行定制化训练和优化 1.2 功能特点 支持多种预训练模型 LLaMA Factory 支持超过 100 种主流的…

故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断

故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断 目录 故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断分类效果基本介绍模型描述DBO-BP-Bagging蜣螂算法优化多特征分类预测一、引言1.1、研究背景和意义1.2、研究现状1.3、研究目的与方法 二…

和Claude对战黑白棋!一起开发AI对弈游戏

序言 为了提升自己的多模态处理能力和API调用技巧&#xff0c;我决定挑战一个有趣的项目——开发一款可以与Claude对战的黑白棋游戏&#xff01;这个项目不仅涉及游戏逻辑的实现&#xff0c;还需要调用Claude的API&#xff0c;让AI作为对手进行博弈。通过这个过程&#xff0c;…

R-INLA实现绿地与狐狸寄生虫数据空间建模:含BYM、SPDE模型及PC先验应用可视化...

全文链接&#xff1a;https://tecdat.cn/?p40720 本论文旨在为对空间建模感兴趣的研究人员客户提供使用R-INLA进行空间数据建模的基础教程。通过对区域数据和地统计&#xff08;标记点&#xff09;数据的分析&#xff0c;介绍了如何拟合简单模型、构建和运行更复杂的空间模型&…

ubuntu20.04安装docker

3台主机&#xff0c;2台都能正确安装&#xff0c;第三台怎么都安装不成功&#xff1b; 3台主机都是一样的配置和系统&#xff1b; 后来看来是其外网的ip不一样&#xff0c;导致第三台主机可能被Qiang&#xff0c;不过错误只是提示签名不正确&#xff0c;在设置签名时好像没有…

【Android】用 chrome://inspect/#devices 调试H5页面

通常做Android开发的过程中&#xff0c;不可避免的需要遇到去与H5交互&#xff0c;甚至有时候需要去调试H5的信息。 这里分享一下Android工程里如何调试H5页面信息&#xff1a; 直接在浏览器地址栏输入 &#xff1a; chrome://inspect/#devices 直接连接手机usb,打开开发者模式…

AI多模态梳理与应用思考|从单文本到多视觉的生成式AI的AGI关键路径

摘要&#xff1a; 生成式AI正从“文本独舞”迈向“多感官交响”&#xff0c;多模态将成为通向AGI的核心路径。更深度的多模态模型有望像ChatGPT颠覆文字交互一样&#xff0c;重塑物理世界的智能化体验。 一、多模态的必然性&#xff1a;从单一到融合 生成式AI的起点是文本生成…

精美登录注册UI,登录页面设计模板

精美登录注册UI,登录页面设计模板 引言 在网页设计中,按钮是用户交互的重要元素之一。一个炫酷的按钮特效不仅能提升用户体验,还能为网页增添独特的视觉吸引力。今天,我们将通过CSS和JavaScript来实现一个“精美登录注册UI,登录页面设计模板”。该素材呈现了数据符号排版…

kotlin 知识点一 变量和函数

在Kotlin中定义变量的方式和Java 区别很大&#xff0c;在Java 中如果想要定义一个变 量&#xff0c;需要在变量前面声明这个变量的类型&#xff0c;比如说int a表示a是一个整型变量&#xff0c;String b表 示b是一个字符串变量。而Kotlin中定义一个变量&#xff0c;只允许在变量…

海洋 CMS V9SQL注入漏洞

目录 禁用information_schema解决方法 方法一&#xff1a;替换法 sys performance_schema ​编辑 方法二&#xff1a;无列名注入 利用lxml模块进行布尔盲注 XPATH XPATH介绍: XPATH语法: 布尔盲注 标准代码&#xff1a; 运行结果&#xff1a; ​编辑 时间盲注 标准代…

springcloud nacos 整合seata解决分布式事务

文章目录 nacos安装Mysql5.7安装及表初始化seata server安装下载并解压seata安装包在conf文件夹修改file.conf文件向本地数据库导入seata需要的表修改registry.conf文件将seata配置信息添加到nacos配置中心启动seata server springcloud整合seata测试流程正常下单流程扣减库存失…

Linux搜索查找类指令

1、find指令 基本语法&#xff1a;find [搜索范围] [选项] 功能&#xff1a;将从指定目录向下递归地遍历其各个子目录&#xff0c;将满足条件的文件或目录显示在终端。 常用选项&#xff1a; 操作 命令示例 说明 查找指定路径下的所有文件 find /path/to/dir 查找指定目…

uniapp 网络请求封装(uni.request 与 uView-Plus)

一、背景 在开发项目中&#xff0c;需要经常与后端服务器进行交互&#xff1b;为了提高开发效率和代码维护性&#xff0c;以及降低重复性代码&#xff0c;便对网络请求进行封装统一管理。 二、创建环境文件 2.1、根目录新建utils文件夹&#xff0c;utils文件夹内新建env.js文…

ReentrantLock 用法与源码剖析笔记

&#x1f4d2; ReentrantLock 用法与源码剖析笔记 &#x1f680; 一、ReentrantLock 核心特性 &#x1f504; 可重入性&#xff1a;同一线程可重复获取锁&#xff08;最大递归次数为 Integer.MAX_VALUE&#xff09;&#x1f527; 公平性&#xff1a;支持公平锁&#xff08;按等…

【蓝桥杯单片机】客观题

一、第十三届省赛&#xff08;一&#xff09; 二、第十三届省赛&#xff08;二&#xff09;

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 &#xff1a;“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令 命令解释 SHOW DATABASES&#xff1b; 展示所有的数据库 CREATE DATABASE 数据…

deepseek清华大学第二版 如何获取 DeepSeek如何赋能职场应用 PDF文档 电子档(附下载)

deepseek清华大学第二版 DeepSeek如何赋能职场 pdf文件完整版下载 https://pan.baidu.com/s/1aQcNS8UleMldcoH0Jc6C6A?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/3ee62050a2ac

【Linux Oracle】time命令+oracle exp压缩

Linux && Oracle相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 1.说明 Linux中的time命令&#xff1a;主要用于测量命令的执行时间&#xff0c;并显示该命令在执行过程中所使用的系统资源情况&#xff0c;如CPU时间、内存和…

游戏引擎学习第123天

仓库:https://gitee.com/mrxiao_com/2d_game_3 黑板&#xff1a;线程同步/通信 目标是从零开始编写一个完整的游戏。我们不使用引擎&#xff0c;也不依赖任何库&#xff0c;完全自己编写游戏所需的所有代码。我们做这个节目不仅是为了教育目的&#xff0c;同时也是因为编程本…

MCP协议

原理讲解 基础概念 Introduction - Model Context Protocol MCP Host&#xff1a;想要通过 MCP 访问数据的程序&#xff0c;例如 Claude Desktop、IDE 或 AI 工具MCP Clients&#xff1a;与服务器保持 1:1 连接的协议客户端MCP Servers&#xff1a;轻量级程序&#xff0c;每个…