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,得到两个jar包:mail.jar 和 activation.jar 发送简单邮件(只有邮件正文,普通文本) package com.zbttest.email;import com.sun.mail.util.Ma…...
聚类系列 (二)——HDBSCAN算法详解
在进行组会汇报的时候,为了引出本研究动机(论文尚未发表,暂不介绍),需要对DBSCAN、OPTICS、和HDBSCAN算法等进行详细介绍。在查询相关资料的时候,发现网络上对于DBSCAN算法的介绍非常多与细致,但…...
AngularJS HTML DOM
关于《AngularJS HTML DOM》的文章,我找到了一些有用的信息。这篇文章主要介绍了AngularJS如何通过特定的指令与HTML DOM元素进行交互。以下是一些关键点: ng-disabled 指令:这个指令用于将应用程序数据绑定到HTML的disabled属性。例如&#…...
C语言延时实现
C语言延时实现 在C语言中,delay 函数通过空循环实现延时,而不是像其他高级语言(如Python)直接使用 sleep 函数。这种实现方式是基于单片机的特性和C语言的底层操作。下面详细解释为什么这种空循环可以实现延时,以及它…...
OSI模型的网络层中产生拥塞的主要原因?
( 1 )缓冲区容量有限;( 1.5 分) ( 2 )传输线路的带宽有限;( 1.5 分) ( 3 )网络结点的处理能力有限;( 1 分…...
机器学习周报-ModernTCN文献阅读
文章目录 摘要Abstract 0 提升有效感受野(ERF)1 相关知识1.1 标准卷积1.2 深度分离卷积(Depthwise Convolution,DWConv)1.3 逐点卷积(Pointwise Convolution,PWConv)1.4 组卷积(Grou…...
什么是网关路由
1.认识网关 网关(Gateway)和路由(Router)是两个相关但不同的概念。 一、网关(Gateway) 定义 网关是一个网络节点,它充当了不同网络之间的连接点。可以将其看作是一个网络的 “大门”…...
信号的产生、处理
一、信号的概念 信号是linux系统提供的一种,向指定进程发送特定事件的方式。收到信号的进程,要对信号做识别和处理。信号的产生是异步的,进程在工作过程中随时可能收到信号。 信号的种类分为以下这么多种(用指令kill -l查看&…...
在Linux中,zabbix如何监控脑裂?
在Linux中,zabbix监控脑裂主要涉及对高可用(HA)系统中可能发生的节点间通信中断或不一致状态的监控。脑裂问题通常发生在具有冗余节点的高可用系统中,如集群、HA系统或分布式数据库系统,当节点之间失去通信时ÿ…...
C++基础概念复习
前言 本篇文章作基础复习用,主要是在C学习中遇到的概念总结,后续会继续补充。如有不足,请前辈指出,万分感谢。 1、什么是封装,有何优点,在C中如何体现封装这一特性? 封装是面向对象编程&…...
Earth靶场
打开靶机后使用 arp-scan -l 查询靶机 ip 我们使用 nmap 进行 dns 解析 把这两条解析添加到hosts文件中去,这样我们才可以访问页面 这样网站就可以正常打开 扫描ip时候我们发现443是打开的,扫描第二个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实现大文件分段续传(断点续传)
前端环境准备及目录结构: 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小雅超集使用夸克网盘缓存教程
距离上一次小白写到关于小雅的教程已经过去了一周的时间,这段时间里,有很多小伙伴都想知道怎么用夸克网盘作为小雅的缓存。 今天这不就来了吗? 这段时间确实是比较忙,毕竟快过年了嘛,辛辛苦苦一整年,至少…...
计算机基础知识复习1.4
数据库事务 #开启一个事务 start transaction #执行SQL语句 SQL1 SQL2 .. #提交事务 commit 类加载器 启动类加载器:负责加载Java的核心库 用C编写,是JVM的一部分,启动类加载器无法被Java程序直接引用 扩展类加载器:是Java语…...
SpringMVC(三)请求
目录 一、RequestMapping注解 1.RequestMapping的属性 实例 1.在这里创建文件,命名为Test: 2.复现-返回一个页面: 创建test界面(随便写点什么): Test文件中编写: 编辑 运行: 3.不返回…...
Node.js应用程序遇到了内存溢出的问题
vue 项目 跑起来,一直报错,内存溢出 在 文件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…...
如何构建云原生时空大数据平台?
在现代企业中,随着对技术的依赖日益加深,空间数据的重要性愈发显著。它通过结合地理成分(如纬度、经度、地址、邮编等)与业务数据,成为解决复杂问题的重要工具。地理空间数据可从多种来源获取,例如卫星影像…...
二极管钳位电路分享
二极管钳位(I/O的过压/浪涌保护等) 如果我们的电路环境接收外部输入信号容易受到噪声影响,那我们必须采取过压和浪涌保护措施,其中一个方式就是二极管钳位保护。 像上图,从INPUT输入的电压被钳位在-Vf与VCCVf之间&…...
腾讯云智能结构化 OCR:驱动多行业数字化转型的核心引擎
在当今数字化时代的汹涌浪潮中,数据已跃升为企业发展的关键要素,其高效、精准的处理成为企业在激烈市场竞争中脱颖而出的核心竞争力。腾讯云智能结构化 OCR 技术凭借其前沿的科技架构与卓越的功能特性,宛如一颗璀璨的明星,在交通、…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
