当前位置: 首页 > news >正文

java 发送邮件

前期准备

pom文件中引入 JavaMail API 和 JavaBean Activation FrameWork,得到两个jar包:mail.jar 和 activation.jar

发送简单邮件(只有邮件正文,普通文本)

package com.zbttest.email;import com.sun.mail.util.MailSSLSocketFactory;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;public class Test {public static void main(String[] args) throws Exception {new Test().sendMessage();}public void sendMessage() throws Exception {Properties pro = new Properties();pro.setProperty("mail.host","smtp.qq.com");//设置邮件服务器 为qq邮箱pro.setProperty("mail.transport.protocol","smtp");//邮件发送协议pro.setProperty("mail.smtp.auth","true");//需要验证用户名和密码//关于qq邮箱  还要设置SSL加密  加上以下几行代码即可MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);pro.put("mail.smtp.ssl.enable",true);pro.put("mail.smtp.ssl.socketFactory",sf);//使用java发送邮件的  5个步骤//1.创建定义整个应用程序所需要的环境信息的Session对象//qq才有  其他邮箱就不用Session session = Session.getDefaultInstance(pro, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {//发件人邮箱用户名、授权码(qq邮箱电脑版获取)return new PasswordAuthentication("1234567@qq.com","授权码");}});//开启Session的Debug模式,这样就可以看到程序发送email的运行状态session.setDebug(true);//2 通过session 的到transport对象Transport transport = session.getTransport();//3 使用邮箱的用户名和授权码链连接邮件服务器   发件邮箱的信息transport.connect("smtp.qq.com","1234567@qq.com","授权码");//4 创建邮件//创建邮件对象MimeMessage mimeMessage = new MimeMessage(session);//设置发件人mimeMessage.setFrom(new InternetAddress("12345676@qq.com"));//设置收件人邮箱mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("1234567@163.com"));//邮件主题 即邮件的标题mimeMessage.setSubject("测试java发送邮件");//邮件的文本内容mimeMessage.setContent("你好啊,这是一封测试邮件","text/html;charset=UTF-8");//5 发送邮件transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());//关闭连接transport.close();}
}

发送含有图片数据的邮件

package com.zbttest.email;import com.sun.mail.util.MailSSLSocketFactory;import javax.activation.DataHandler;
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.util.Properties;public class Test1 {public static void main(String[] args) throws Exception {new Test().sendMessage();}public void sendMessage() throws Exception {Properties pro = new Properties();pro.setProperty("mail.host","smtp.qq.com");//设置邮件服务器 为qq邮箱pro.setProperty("mail.transport.protocol","smtp");//邮件发送协议pro.setProperty("mail.smtp.auth","true");//需要验证用户名和密码//关于qq邮箱  还要设置SSL加密  加上以下几行代码即可MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);pro.put("mail.smtp.ssl.enable",true);pro.put("mail.smtp.ssl.socketFactory",sf);//使用java发送邮件的  5个步骤//1.创建定义整个应用程序所需要的环境信息的Session对象//qq才有  其他邮箱就不用Session session = Session.getDefaultInstance(pro, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {//发件人邮箱用户名、授权码(qq邮箱电脑版获取)return new PasswordAuthentication("1234567@qq.com","授权码");}});//开启Session的Debug模式,这样就可以看到程序发送email的运行状态session.setDebug(true);//2 通过session 的到transport对象Transport transport = session.getTransport();//3 使用邮箱的用户名和授权码链连接邮件服务器   发件邮箱的信息transport.connect("smtp.qq.com","1234567@qq.com","授权码");//4 创建邮件//创建邮件对象MimeMessage mimeMessage = new MimeMessage(session);//设置发件人mimeMessage.setFrom(new InternetAddress("12345676@qq.com"));//设置收件人邮箱mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("1234567@163.com"));//邮件主题 即邮件的标题mimeMessage.setSubject("测试java发送邮件");/*邮件的文本内容mimeMessage.setContent("你好啊,这是一封测试邮件","text/html;charset=UTF-8");*///准备邮件数据//准备图片数据MimeBodyPart img = new MimeBodyPart();//图片需要经过特殊处理DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg"));//将图片添加进body中img.setDataHandler(dh);//给图片设置一个 id  后面可以通过id进行引用img.setContentID("bz.jpg");//准备正文数据MimeBodyPart text = new MimeBodyPart();//正文内容  里面可以通过 cid 引用上面的图片text.setContent("这是一封邮件正文带图片<img src='cid:bz.jpg'>的邮件","text/html;charset=UTF-8");//添加数据并描述数据关系MimeMultipart mm = new MimeMultipart();mm.addBodyPart(text);mm.addBodyPart(img);mm.setSubType("related");//只有文本 用 alternztive  有内嵌资源 用 related  有附件 用 mixed//设置到消息中并保存修改//把最后写好的邮件放到消息当中mimeMessage.setContent(mm);//保存修改mimeMessage.saveChanges();//5 发送邮件transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());//关闭连接transport.close();}
}

发送含有附件的邮件

package com.zbttest.email;import com.sun.mail.util.MailSSLSocketFactory;import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;public class Test2 {public static void main(String[] args) throws Exception {new Test().sendMessage();}public void sendMessage() throws Exception {Properties pro = new Properties();pro.setProperty("mail.host","smtp.qq.com");//设置邮件服务器 为qq邮箱pro.setProperty("mail.transport.protocol","smtp");//邮件发送协议pro.setProperty("mail.smtp.auth","true");//需要验证用户名和密码//关于qq邮箱  还要设置SSL加密  加上以下几行代码即可MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);pro.put("mail.smtp.ssl.enable",true);pro.put("mail.smtp.ssl.socketFactory",sf);//使用java发送邮件的  5个步骤//1.创建定义整个应用程序所需要的环境信息的Session对象//qq才有  其他邮箱就不用Session session = Session.getDefaultInstance(pro, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {//发件人邮箱用户名、授权码(qq邮箱电脑版获取)return new PasswordAuthentication("1234567@qq.com","授权码");}});//开启Session的Debug模式,这样就可以看到程序发送email的运行状态session.setDebug(true);//2 通过session 的到transport对象Transport transport = session.getTransport();//3 使用邮箱的用户名和授权码链连接邮件服务器  发件邮箱的信息transport.connect("smtp.qq.com","1234567@qq.com","授权码");//4 创建邮件//创建邮件对象MimeMessage mimeMessage = createMailMessage(session);//5 发送邮件transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());//关闭连接transport.close();}private MimeMessage createMailMessage(Session session) throws Exception {//创建用来返回的消息对象MimeMessage mimeMessage = new MimeMessage(session);//设置发件人mimeMessage.setFrom(new InternetAddress("12345676@qq.com"));//设置收件人邮箱mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("1234567@163.com"));//邮件主题 即邮件的标题mimeMessage.setSubject("测试java发送邮件");/*编写邮件内容1.图片2.附件3.文本*///图片MimeBodyPart body1 = new MimeBodyPart();body1.setDataHandler(new DataHandler(new FileDataSource("src/resources/bz.jpg")));body1.setContentID("bz.jpg");//文本MimeBodyPart body2 = new MimeBodyPart();body2.setContent("不知道发点啥了,反正里面有一张图片<img src='cid:bz.jpg'>","text/html;charset=UTF-8");//附件MimeBodyPart body3 = new MimeBodyPart();body3.setDataHandler(new DataHandler(new FileDataSource("src/resources/log4j.properties")));body3.setFileName("设置附件文件的名字");//附件设置名字MimeBodyPart body4 = new MimeBodyPart();body4.setDataHandler(new DataHandler(new FileDataSource("src/resources/1.txt")));body4.setFileName("设置附件文件的名字1");//附件设置名字//拼接邮件正文内容MimeMultipart multipart1 = new MimeMultipart();multipart1.addBodyPart(body1);multipart1.addBodyPart(body2);multipart1.setSubType("related");//将文本和图片内嵌进去//将拼装好的文本和图片设置为正文MimeBodyPart conteneText = new MimeBodyPart();conteneText.setContent(multipart1);//拼接附件MimeMultipart allFile = new MimeMultipart();allFile.addBodyPart(body3);allFile.addBodyPart(body4);allFile.addBodyPart(conteneText);allFile.setSubType("mixed");//正文和附件都有  将类型设置为  mixed//将内容添加到消息中mimeMessage.setContent(allFile);//保存修改mimeMessage.saveChanges();return mimeMessage;}
}

相关文章:

java 发送邮件

前期准备 pom文件中引入 JavaMail API 和 JavaBean Activation FrameWork&#xff0c;得到两个jar包&#xff1a;mail.jar 和 activation.jar 发送简单邮件&#xff08;只有邮件正文&#xff0c;普通文本&#xff09; package com.zbttest.email;import com.sun.mail.util.Ma…...

聚类系列 (二)——HDBSCAN算法详解

在进行组会汇报的时候&#xff0c;为了引出本研究动机&#xff08;论文尚未发表&#xff0c;暂不介绍&#xff09;&#xff0c;需要对DBSCAN、OPTICS、和HDBSCAN算法等进行详细介绍。在查询相关资料的时候&#xff0c;发现网络上对于DBSCAN算法的介绍非常多与细致&#xff0c;但…...

AngularJS HTML DOM

关于《AngularJS HTML DOM》的文章&#xff0c;我找到了一些有用的信息。这篇文章主要介绍了AngularJS如何通过特定的指令与HTML DOM元素进行交互。以下是一些关键点&#xff1a; ng-disabled 指令&#xff1a;这个指令用于将应用程序数据绑定到HTML的disabled属性。例如&#…...

C语言延时实现

C语言延时实现 在C语言中&#xff0c;delay 函数通过空循环实现延时&#xff0c;而不是像其他高级语言&#xff08;如Python&#xff09;直接使用 sleep 函数。这种实现方式是基于单片机的特性和C语言的底层操作。下面详细解释为什么这种空循环可以实现延时&#xff0c;以及它…...

OSI模型的网络层中产生拥塞的主要原因?

&#xff08; 1 &#xff09;缓冲区容量有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 2 &#xff09;传输线路的带宽有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 3 &#xff09;网络结点的处理能力有限&#xff1b;&#xff08; 1 分…...

机器学习周报-ModernTCN文献阅读

文章目录 摘要Abstract 0 提升有效感受野&#xff08;ERF&#xff09;1 相关知识1.1 标准卷积1.2 深度分离卷积&#xff08;Depthwise Convolution&#xff0c;DWConv&#xff09;1.3 逐点卷积&#xff08;Pointwise Convolution&#xff0c;PWConv&#xff09;1.4 组卷积(Grou…...

什么是网关路由

1.认识网关 网关&#xff08;Gateway&#xff09;和路由&#xff08;Router&#xff09;是两个相关但不同的概念。 一、网关&#xff08;Gateway&#xff09; 定义 网关是一个网络节点&#xff0c;它充当了不同网络之间的连接点。可以将其看作是一个网络的 “大门”&#xf…...

信号的产生、处理

一、信号的概念 信号是linux系统提供的一种&#xff0c;向指定进程发送特定事件的方式。收到信号的进程&#xff0c;要对信号做识别和处理。信号的产生是异步的&#xff0c;进程在工作过程中随时可能收到信号。 信号的种类分为以下这么多种&#xff08;用指令kill -l查看&…...

在Linux中,zabbix如何监控脑裂?

在Linux中&#xff0c;zabbix监控脑裂主要涉及对高可用&#xff08;HA&#xff09;系统中可能发生的节点间通信中断或不一致状态的监控。脑裂问题通常发生在具有冗余节点的高可用系统中&#xff0c;如集群、HA系统或分布式数据库系统&#xff0c;当节点之间失去通信时&#xff…...

C++基础概念复习

前言 本篇文章作基础复习用&#xff0c;主要是在C学习中遇到的概念总结&#xff0c;后续会继续补充。如有不足&#xff0c;请前辈指出&#xff0c;万分感谢。 1、什么是封装&#xff0c;有何优点&#xff0c;在C中如何体现封装这一特性&#xff1f; 封装是面向对象编程&…...

Earth靶场

打开靶机后使用 arp-scan -l 查询靶机 ip 我们使用 nmap 进行 dns 解析 把这两条解析添加到hosts文件中去&#xff0c;这样我们才可以访问页面 这样网站就可以正常打开 扫描ip时候我们发现443是打开的&#xff0c;扫描第二个dns解析的443端口能扫描出来一个 txt 文件 dirsear…...

JavaScript 日期格式

在 JavaScript 中,日期格式可以通过 Date 对象进行操作和格式化。下面是一些常见的 JavaScript 日期格式及其示例: 1. ISO 8601 格式 ISO 8601 是一种标准的日期和时间表示方法,格式为 YYYY-MM-DDTHH:mm:ss.sssZ,例如: let date = new Date(); console.log(date.toISOS…...

django vue3实现大文件分段续传(断点续传)

前端环境准备及目录结构&#xff1a; npm create vue 并取名为big-file-upload-fontend 通过 npm i 安装以下内容"dependencies": {"axios": "^1.7.9","element-plus": "^2.9.1","js-sha256": "^0.11.0&quo…...

xiaoya小雅超集使用夸克网盘缓存教程

距离上一次小白写到关于小雅的教程已经过去了一周的时间&#xff0c;这段时间里&#xff0c;有很多小伙伴都想知道怎么用夸克网盘作为小雅的缓存。 今天这不就来了吗&#xff1f; 这段时间确实是比较忙&#xff0c;毕竟快过年了嘛&#xff0c;辛辛苦苦一整年&#xff0c;至少…...

计算机基础知识复习1.4

数据库事务 #开启一个事务 start transaction #执行SQL语句 SQL1 SQL2 .. #提交事务 commit 类加载器 启动类加载器&#xff1a;负责加载Java的核心库 用C编写&#xff0c;是JVM的一部分&#xff0c;启动类加载器无法被Java程序直接引用 扩展类加载器&#xff1a;是Java语…...

SpringMVC(三)请求

目录 一、RequestMapping注解 1.RequestMapping的属性 实例 1.在这里创建文件&#xff0c;命名为Test: 2.复现-返回一个页面&#xff1a; 创建test界面&#xff08;随便写点什么&#xff09;&#xff1a; Test文件中编写&#xff1a; ​编辑 运行&#xff1a; 3.不返回…...

Node.js应用程序遇到了内存溢出的问题

vue 项目 跑起来&#xff0c;一直报错&#xff0c;内存溢出 在 文件node_modules 里 .bin > vue-cli-service.cmd 在依赖包这个文件第一行加上这个 node --max-old-space-size102400 "%~dp0\..\vue\cli-service\bin\vue-cli-service.js" %* node --max-old-s…...

如何构建云原生时空大数据平台?

在现代企业中&#xff0c;随着对技术的依赖日益加深&#xff0c;空间数据的重要性愈发显著。它通过结合地理成分&#xff08;如纬度、经度、地址、邮编等&#xff09;与业务数据&#xff0c;成为解决复杂问题的重要工具。地理空间数据可从多种来源获取&#xff0c;例如卫星影像…...

二极管钳位电路分享

二极管钳位&#xff08;I/O的过压/浪涌保护等&#xff09; 如果我们的电路环境接收外部输入信号容易受到噪声影响&#xff0c;那我们必须采取过压和浪涌保护措施&#xff0c;其中一个方式就是二极管钳位保护。 像上图&#xff0c;从INPUT输入的电压被钳位在-Vf与VCCVf之间&…...

腾讯云智能结构化 OCR:驱动多行业数字化转型的核心引擎

在当今数字化时代的汹涌浪潮中&#xff0c;数据已跃升为企业发展的关键要素&#xff0c;其高效、精准的处理成为企业在激烈市场竞争中脱颖而出的核心竞争力。腾讯云智能结构化 OCR 技术凭借其前沿的科技架构与卓越的功能特性&#xff0c;宛如一颗璀璨的明星&#xff0c;在交通、…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...