当前位置: 首页 > 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;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

【Ftrace 专栏】Ftrace 参考博文

ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...