java发送邮件

java发送邮件工具类

JavaMailSenderImpl

        JavaMailSenderImpl 类是 Spring 框架提供的一个实现了 JavaMailSender 接口的邮件发送类,用于发送邮件,提供接口如下:
setJavaMailProperties:设置属性Properties
setProtocol:设置邮件协议(SMTP、POP3等)
setHost:设置邮件服务器地址
setPort:设置邮件服务器端口
setUsername:设置邮件服务器认证用户名
setPassword:设置邮件服务器认证用户名密码
setDefaultEncoding:设置邮件字符集
send:发送邮件SimpleMailMessage
send:发送邮件MimeMessage
send:发送邮件MimeMessagePreparator
createMimeMessage:创建邮件消息MimeMessage
testConnection:测试链接

Properties

        Properties 类是 Java 标准库提供的一个类,用于处理配置信息。它可以保存一组键值对形式的配置数据,通过获取和设置键值对来读取和修改配置信息,包含接口如下:
setProperty:设置属性key-value键值对,如:prop.setProperty("mail.transport.protocol", "smtp");
load:加载配置文件


常用配置项如下:
mail.smtp.host:指定 SMTP 服务器的地址。例如 smtp.example.com。
mail.smtp.port:指定 SMTP 服务器的端口号。常用的端口号有 25、465 和 587 等。
mail.smtp.auth:指定是否需要进行认证,默认情况下为 false。如果需要认证,可以设置为 true。
mail.smtp.starttls.enable:指定是否启用 STARTTLS 加密,默认情况下为 false。如果需要启用             STARTTLS,可以设置为 true。
mail.smtp.auth.mechanisms:指定认证机制。常用的认证机制有 PLAIN、LOGIN 和 NTLM                     等。如果要使用匿名认证,可以设置为 ANONYMOUS。
mail.smtp.ssl.enable:指定是否启用 SSL 加密,默认情况下为 false。如果需要使用 SSL 加 密,           可以设置为 true。
mail.smtp.ssl.checkserveridentity:指定是否检查服务器的身份验证,默认情况下为 false。如果             需要检查服务器身份验证,可以设置为 true。

MimeMessage

        MimeMessage 类是 JavaMail API 提供的一个类,用于构造和处理邮件的内容和属性,常用函数如下:
void setFrom(Address from):设置发件人地址。
void addRecipient(Message.RecipientType type, Address address):添加收件人地址。
void addRecipients(Message.RecipientType type, Address[] addresses):添加多个收件人地址。
void setReplyTo(Address[] addresses) :添加抄送人地址。
void setSubject(String subject):设置邮件主题。
void setContent(Multipart mp):设置邮件内容,支持多种格式的文本和附件。

MimeMessageHelper

        MimeMessageHelper 类是 Spring 框架提供的一个辅助类,用于更方便地构建 MimeMessage 和 MimeMessage 中的邮件内容,常用接口如下:
void setFrom(String from):设置发件人地址。
void setTo(String to):设置收件人地址。
void setSubject(String subject):设置邮件主题。
void setText(String text):设置邮件内容。
void addAttachment(String attachmentName, File file):添加附件。

邮件发送认证及加密方式

相关参数说明

mail.smtp.auth 参数:
功能:启用SMTP服务器身份验证。
默认值:false
可选值:true/false
说明:当该参数设置为 true 时,表示需要进行SMTP服务器的身份验证,发送邮件前需要提供用户名和密码进行验证,以确保邮件的发送权限。如果设置为 false,不进行身份验证,可能会导致邮件发送失败。

mail.smtp.starttls.enable 参数:
功能:启用SMTP服务器的 STARTTLS 加密连接。
默认值:false
可选值:true/false
说明:当该参数设置为 true 时,表示需要使用 STARTTLS 加密连接发送邮件。STARTTLS 是为了增加SMTP协议的安全性,通过加密传输防止邮件内容被截获或篡改。如果设置为 false,不使用 STARTTLS 加密连接发送邮件。

mail.smtp.auth.mechanisms 参数:
功能:指定具体的SMTP身份验证机制。
默认值:PLAIN
可选值:LOGIN/PLAIN/NTLM
LOGIN 是一种SMTP身份验证机制,要求在认证过程中使用 BASE64 编码用户名和密码。
PLAIN 是一种SMTP身份验证机制,要求在认证过程中使用 BASE64 编码的用户名和密码,并以明文方式发送给SMTP服务器。
NTLM 是一种基于Windows操作系统的身份验证机制,适用于与Windows域控制器进行交互的服务器。


推荐的组合方式:
mail.smtp.auth=true
mail.smtp.starttls.enable=true
这个组合方式表示启用SMTP服务器的身份验证,并使用 STARTTLS 加密连接发送邮件。在这种方式下,邮件发送时会先进行身份验证,验证成功后建立安全的加密连接进行邮件传输,提高邮件的安全性。

mail.smtp.auth=true
mail.smtp.starttls.enable=false
这个组合方式表示启用SMTP服务器的身份验证,但不使用加密连接。在这种方式下,邮件发送时会进行身份验证,但邮件内容在传输过程中不会进行加密,可能存在被截获或篡改的风险。

mail.smtp.auth=false
mail.smtp.starttls.enable=true
这个组合方式表示不进行SMTP服务器的身份验证,但使用 STARTTLS 加密连接。在这种方式下,邮件发送时不需要提供用户名和密码进行身份验证,但在传输过程中会使用加密连接增加安全性。


mail.smtp.auth=true
mail.smtp.starttls.enable=false
mail.smtp.auth.mechanisms=LOGIN
这个组合方式表示启用SMTP服务器的身份验证,仅支持 LOGIN 机制进行认证,并不使用 STARTTLS 加密连接。邮件发送时会提供用户名和密码进行认证。


mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.auth.mechanisms=PLAIN
这个组合方式表示启用SMTP服务器的身份验证,使用 PLAIN 机制进行认证,并启用 STARTTLS 加密连接。邮件发送时会提供 BASE64 编码的用户名和密码进行认证,并使用加密连接传输邮件内容。


SSL加密

要使用 SSL 加密进行认证,需要确保以下几个参数正确配置:
mail.smtp.auth 设置为 true,启用SMTP服务器的身份验证。
mail.smtp.starttls.enable 设置为 false,禁用 STARTTLS 加密连接。
mail.smtp.socketFactory.port 设置为 SMTP 服务器的 SSL 端口号,通常是 465。
mail.smtp.socketFactory.class 设置为 javax.net.ssl.SSLSocketFactory,指定使用 SSL 加密的 Socket Factory 类。
那么,mail.smtp.auth.mechanisms 参数就可以不设置,使用默认的机制。常见情况下,SMTP 服务器会默认使用 PLAIN 或 LOGIN 机制进行 SSL 加密认证。
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "false");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); //使用默认信任证书,通过TrustManager实现自定义信任证书

认证方式及加密方式(自总结)

认证方式:表示身份验证方式,包括:匿名认证、账号密码认证
加密方式:表示通信加密方式,包括:名文、STARTTLS加密、SSL加密
组合方式:
匿名认证_名文
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.starttls.enable", "false");

匿名认证_STARTTLS加密
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.starttls.enable", "true");

匿名认证_SSL加密
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.starttls.enable", "false");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

账号密码认证_名文
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "false");

账号密码认证_STARTTLS加密
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");


账号密码认证_SSL加密
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "false");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

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

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

相关文章

如何从单体架构迁移到微服务架构:挑战和最佳实践

当单体架构成为项目增长的瓶颈时,迁移到微服务架构就成了必然的选择。 微服务虽然具有明显的优点,但由于其内在复杂性和缺乏一种通用的迁移方案,实施过程中可能会遇到不少挑战。本文旨在分享解决方案架构师在单体架构向微服务迁移过程中的专…

OpenCV实现物体尺寸的测量

一 ,项目分析 物体尺寸测量的思路是找一个确定尺寸的物体作为参照物,根据已知的计算未知物体尺寸。 如下图所示,绿色的板子尺寸为220*300(单位:毫米),通过程序计算白色纸片的长度。 主要是通过…

C盘满了怎么清理文件?

电脑的C盘是我们电脑存储系统文件和应用程序的一个重要盘符,很多人经常会遇到C盘空间不足的问题;虽然我们可以通过卸载程序或者删除文件来释放空间,但是在这个过程中往往会误删掉一些重要的文件,造成部分程序可能无法正常使用。 因…

【EI会议征稿】第五届大数据与信息化教育国际学术会议(ICBDIE 2024)

【有往届检索记录】第五届大数据与信息化教育国际学术会议(ICBDIE 2024) 2023 5th International Conference on Big Data and Informatization Education 第五届大数据与信息化教育国际学术会议(ICBDIE 2024)定于2024年01月19-…

怒刷LeetCode的第28天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:动态规划 方法二:迭代 方法三:斐波那契数列公式 第二题 题目来源 题目内容 解决方法 方法一:栈 方法二:路径处理类 方法三:正则表达式 方法…

机器学习(新手入门)-线性回归 #房价预测

题目:给定数据集dataSet,每一行代表一组数据记录,每组数据记录中,第一个值为房屋面积(单位:平方英尺),第二个值为房屋中的房间数,第三个值为房价(单位:千美元…

RTL SDR的PYTHON开发环境搭建

不得不说RTL SDR真是神器,直接把SDR的入门门槛拉低到了几十块钱。对于RTL SDR的学习开发,有大佬写的《Software_Defined_Radio_using_MATLAB_Simulink_and_the_RTL-SDR》,另外,除了MATLAB,近些年爆火的PYTHON当然也是可…

系统集成测试(SIT)/系统测试(ST)/用户验收测试(UAT)

文章目录 单元测试集成测试系统测试用户验收测试黑盒测试白盒测试压力测试性能测试容量测试安全测试SIT和UAT的区别 单元测试 英文 unit testing,缩写 UT。测试粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。 …

智能振弦传感器:参数智能识别技术的重要科技创新

智能振弦传感器:参数智能识别技术的重要科技创新 智能振弦传感器是一种能够自动识别传感器参数的高科技产品。它的研发得益于河北稳控科技的不断创新和努力,其电子标签专用读数模块模块TR01将传感器生产和标定过程实现了自动化。该模块将温度电阻两芯线…

Mysql第四篇---数据库索引优化与查询优化

文章目录 数据库索引优化与查询优化索引失效案例数据准备1. 全值匹配2 最佳左前缀法则(联合索引)主键插入顺序4 计算、函数导致索引失效5 类型转换(自动或手动)导致索引失效6 范围条件右边的列索引失效7 不等于(!或者<>)索引失效8 is null可以使用索引, is not null无法使…

【Mongo】数据删了磁盘空间但没有减少

Author:skate Time:2023/10/22 一、问题描述 产线用户反馈&#xff0c;一个华为云的mongo实例磁盘空间告警&#xff0c;使用率超过90%&#xff08;使用状况 1630.9/1800GB&#xff09;&#xff0c;让其通过数据库运维平台找到占用大空间的表&#xff0c;然后清理历史数据&…

爱创科技携手洽洽食品,探索渠道数字化最优解!

坚果的下半场&#xff0c;是从吃到喝。 消费升级大潮下&#xff0c;健康养生理念逐渐深入人心。以“天然健康”为核心的食品新消费潮流正加速形成&#xff0c;一个个打着“美味与营养”黄金设定的品类风口正被不断创建&#xff0c;其中人气有增无减的当属植物基饮品。据相关报告…

Anaconda/minAnaconda下配置虚拟环境并安装pytorch相关

Anaconda/minAnaconda下配置虚拟环境并安装pytorch相关 官网下载对应版本anaconda/minAnaconda进入Anaconda Prompt创建虚拟环境 conda create -n 虚拟环境名 python版本 -c https://mirrors.bfsu.edu.cn/anaconda/pkgs/main查看当前环境&#xff0c;如果之前anaconda3文件夹…

docker和k8s之间的关系

一句话总结&#xff1a;Docker只是容器的一种&#xff0c;它面向的是单体&#xff0c;K8S可以管理多种容器&#xff0c;它面向的是集群&#xff0c;Docker可以作为一种容器方案被K8S管理。 https://baijiahao.baidu.com/s?id1763716289717819767&wfrspider&forpc 背…

【idea】使用教程:idea 打开项目、配置、项目打包详细教程

目录 一、配套软件安装 二、打开已有项目 三、配置 jdk 四、项目打包 五、服务器首次创建目录 &#xff08;1&#xff09;后端代码目录 &#xff08;2&#xff09;前端代码目录 &#xff08;3&#xff09; 打包后的代码包上传到服务器上 一、配套软件安装 【idea】wi…

计算机算法分析与设计(20)---回溯法(0-1背包问题)

文章目录 1. 题目描述2. 算法思路3. 例题分析4. 代码编写 1. 题目描述 对于给定的 n n n 个物品&#xff0c;第 i i i 个物品的重量为 W i W_i Wi​&#xff0c;价值为 V i V_i Vi​&#xff0c;对于一个最多能装重量 c c c 的背包&#xff0c;应该如何选择放入包中的物品…

Git报错解决

本篇主要汇总在使用 Git 进行提交和拉取文件时&#xff0c;遇到的问题的解决方案&#xff0c;以便下次查找。 1 关于使用Git出现“git Failed to connect to 127.0.0.1 port xxxx: Connection refused”的问题解决方案 1. 问题描述 在使用 git 拉取、提交代码的时候&#xff…

一款集成了主流大语言模型以及绘图模型的 APP, 采用 Flutter 开发,代码完全开源!!

一款集成了主流大语言模型以及绘图模型的 APP&#xff0c; 采用 Flutter 开发&#xff0c;代码完全开源&#xff0c;支持以下功能&#xff1a; 支持 OpenAI 的 GPT-3.5&#xff0c;GPT-4 大语言模型支持 Anthropic 的 Claude instant&#xff0c;Claude 2.0 大语言模型支持国产…

【React】编程式路由,push 与 replace,withRouter,BrowserRouter 和 HashRouter 的区别

push 与 replace 模式 默认情况下&#xff0c;开启的是 push 模式&#xff0c;也就是说&#xff0c;每次点击跳转&#xff0c;都会向栈中压入一个新的地址&#xff0c;在点击返回时&#xff0c;可以返回到上一个打开的地址 有时候页面不需要这么繁琐的跳转&#xff0c;我们可以…

uniapp map polygons 区域填充色(fillColor)在ios显示正常,但在安卓手机显示是黑色的,怎么解决?

uniapp map polygons 区域填充色&#xff08;fillColor&#xff09;在ios显示正常&#xff0c;但在安卓手机显示是黑色的,怎么解决&#xff1f; <MapPage :longitude"item.centerCoord[0]" :latitude"item.centerCoord[1]":polygons"[{ points: it…