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 技术凭借其前沿的科技架构与卓越的功能特性,宛如一颗璀璨的明星,在交通、…...
免费AI图像放大:Upscayl如何让模糊照片重获新生
免费AI图像放大:Upscayl如何让模糊照片重获新生 【免费下载链接】upscayl 🆙 Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl 你是否曾为模糊的…...
别再让串口打印卡住你的STM32了!用FreeRTOS队列+环形缓冲区实现丝滑异步日志
STM32异步日志系统实战:FreeRTOS队列与环形缓冲区的完美结合 调试嵌入式系统时,串口打印是最常用的手段之一。但传统的同步打印方式往往会成为系统性能的瓶颈,特别是在实时性要求高的应用中。想象一下,当你正在调试一个电机控制系…...
如何为Calibre高效获取豆瓣图书元数据:New Douban插件完整指南
如何为Calibre高效获取豆瓣图书元数据:New Douban插件完整指南 【免费下载链接】calibre-douban Calibre new douban metadata source plugin. Douban no longer provides book APIs to the public, so it can only use web crawling to obtain data. This is a cal…...
新能源数智化
1、方案总览 基于通用大数据实施方案框架,深度融合汽车行业「研产供销服」全价值链场景,构建以 “多模态数据智能中台”为核心,“数据智能引擎”与“空间智能引擎(数字孪生)” 为两翼的一体化平台,实现乘用…...
从时序到实战:基于STM32 HAL库的W25Q64 SPI驱动开发全解析
1. SPI协议基础与硬件连接 SPI协议作为嵌入式开发中最常用的通信协议之一,其全称是Serial Peripheral Interface(串行外设接口)。我第一次接触SPI是在做一个传感器项目时,当时需要高速读取加速度计数据,I2C的速率已经无…...
PROJECT MOGFACE长文本理解效果展示:百页技术文档问答精度测评
PROJECT MOGFACE长文本理解效果展示:百页技术文档问答精度测评 最近在折腾一个项目,需要从一堆厚厚的技术文档里快速找到特定信息。几百页的PDF,光是翻一遍就得花上半天,更别说精准定位某个函数的具体参数或者某个概念的详细解释…...
给大一新生的循迹小车避坑指南:从模块接线到代码调试,手把手带你搞定STC89C52单片机项目
大一新生必看:STC89C52循迹小车避坑实战手册 第一次做循迹小车项目时,我盯着实验室里那堆杜邦线和闪烁的LED灯,完全不知道从何下手。现在回想起来,当时如果有一份详尽的避坑指南,至少能少熬三个通宵。这份手册将用最直…...
告别IO口焦虑:用74HC595驱动8x8点阵屏,51单片机也能玩转动态显示
告别IO口焦虑:用74HC595驱动8x8点阵屏,51单片机也能玩转动态显示 当你在面包板上搭建第一个流水灯时,74HC595可能只是让LED依次点亮的工具。但这款售价不到1元的芯片,其实藏着更强大的潜力——它能让你用51单片机的3个IO口&#x…...
别再只跑Demo了!用MaixPy IDE给你的K210人脸识别项目加个‘本地数据库’(附完整代码)
从Demo到产品:用MaixPy构建可扩展的K210人脸识别系统 第一次在K210上跑通人脸识别Demo时,那种兴奋感至今难忘——直到我试图把这个"玩具"变成真正可用的工具。屏幕上的矩形框能识别出我的脸,但接下来呢?如何记住不同人的…...
Reko高级脚本编程:自动化反编译与代码分析的终极指南
Reko高级脚本编程:自动化反编译与代码分析的终极指南 【免费下载链接】reko Reko is a binary decompiler. 项目地址: https://gitcode.com/gh_mirrors/re/reko Reko是一款功能强大的二进制反编译工具,通过其高级脚本编程功能,用户可以…...
