使用Java实现邮件的发送

article/2025/9/14 10:15:13

数年前,邮件的发送是经过人为的运输,从发件人---当地邮局---收件地邮局---收件人,付出的人力物力是非常大的。随着时代的进步,科技的发展,如今我们的生活中出现更高级发送邮件的方式,最常用的就是从(邮箱--邮箱),当然中间会经过多个邮箱服务器的转载,称为电子邮箱。此篇文章的内容就是简单的通过java程序发送邮件。

1.首先我们先了解邮件的协议

POP3
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

SMTP
SMTP 的全称是 “ Simple Mail Transfer Protocoli,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议族,它帮助每台计算机在发送或中转信件时找到下一 个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可登录 SMTP 服务器,这就使得那些垃圾邮件散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

IMAP
IMAP全称是Internet Mail Access Protocol, 即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之间不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端 软件登录邮箱,看到的邮件以及状态都是
一致的。

IMAP和POP3有什么区别?
POP3协议介许电子邮件客户端下载服务器上的邮件,但是在客户端的操作 (如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的。
IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

当我们了解了邮件协议后,接下来准备发送一个简单的邮件、

1.创建Session,准备STMP登录的信息

(1).创建STMP地址(以126邮箱为例)

(2).设置发件人的帐号和密码(使用授权密码,可在126邮箱中设置,当不需要使用时,删除设备即可)

 (3).连接到SMTP服务器(须先创建Proerties对象),调用put()方法添加SMTO主机名,主机端口号,是否需要用户认证,启用TLS加密。

(4).创建Session,调用getInstance()方法,传入SMTP服务器连接信息和Authenticator接口的匿名类,并重写PAsswordAuthentication()方法,传入登陆用户名和登陆密码(授权密码)。

(5).设置debug模式便于调式。实现代码如下。

(6).我们将信息封装在一个方法中,使用时直接调用即可。具体实现如下。

2.创建Session对话

(1). 创建邮件对象 ,MimeMessage对象,调用setFrom()方法,传入发件人的账户名称

(2).调用setFecipient()方法,设置收件类型RecipientType.TO(收件)/RecipientType.CC(抄送),并传入收件人邮箱账户名称,注:如果需要同时发送给收件人并抄送其它收件人,需要调用

setFecipients()方法,创建new InternetAddress[],再让抄送人的地址传入,当然,此时的收件类型是RecipientType.CC。

(3).接下来设置邮件标题,调用setSubject()方法,传入标题,并设置字符编码。

(4).调用setText()方法,输入正文内容,如果正文内容有Html标签,如:<b></b>:则需要传参数"html".

(5).如果需要发送带有附件的邮件,需要创建Multipart的对象,来进行附件的复合,在创建BodyPart对象,调用setFileName()方法,设置附件文件的名称设置,之后调用serDataHandler()方法,传入字节数组,再通过Files工具类的readAllbytes方法读取传入的本地图片,文件路径使用Paths工具类的get()方法获得。最后调用setContent()方法将附加加入邮件内容。

(6).如果要让发送的附件内容显示在正文,则需要再邮件附件部分通过BodyPart对象的setHeader()方法,设置名称,之后再正文部分添加名称。

(7).最后使用Transport的send()方法发送邮件。代码如下。

 

 如上所述,一个简单的邮件就发送好了。

有不足之处,还希望各位大佬指点。


http://chatgpt.dhexx.cn/article/LkBhdMHD.shtml

相关文章

Java发送邮件详解

目录 一、关于电子邮件 电子邮件 传输协议 SMTP协议 POP3协议 邮件收发原理 二、发送纯文本邮件 二、发送带图片和附件的邮件 一、关于电子邮件 电子邮件 要在网络上实现邮件功能&#xff0c;必须要有专门的邮件服务器。 这些邮件服务器类似于现实生活中的邮局&…

基于JavaMail的Java邮件发送:简单邮件发送

本文链接: https://blog.csdn.net/xietansheng/article/details/51673073 电子邮件的应用非常广泛&#xff0c;例如在某网站注册了一个账户&#xff0c;自动发送一封欢迎邮件&#xff0c;通过邮件找回密码&#xff0c;自动批量发送活动信息等。但这些应用不可能和我们自己平时…

js 实现计数器功能

1.运用 setInterval()定时器计算秒数 <!DOCTYPE html> <html><head><title>JS实现计数器</title><meta http-equiv"content-type" content"text/html; charsetgbk"><script src"https://cdn.bootcss.com/jqu…

element的formatter失效的解决方案

formatter传入数据失效 组件封装的时这样 使用方式还是和element的官方使用方式相同

html输入框只能输入文字,input文本框强制输入指定文字的方法以及IE11的兼容

背景:最近开发的韩国项目,在用户姓名输入框一栏中,要求只能输入韩文,通常用到onkeyup和onafterpaste两个事件来触发方法,并在方法中进行校验,但是在IE浏览器中,出现了一种情况,就是韩文单词拼写未完成的时候,会直接进行校验并显示,如下图实例所展示,并不是需要想要的…

jquery对表格行列的操作-jquery动态增加表格行或者列

jquery对表格的操作是老生常谈的问题。最近项目中用到了&#xff0c;今天在这里分享一下&#xff01; 效果大体如下&#xff1a; 分享一下代码吧&#xff01; html <div class"table-responsive" id"Bk_table" style"display:none;">&l…

动态改变Input和Textarea值Vue数据没有绑定的解决办法

背景&#xff1a; 我在循环里面的input框需要限制输入的值的类型&#xff0c;如果我绑定了change的方法的话 首先需要失去焦点才能生效&#xff0c;如果不失去焦点直接点击确定按钮是不能触发事件的 值还是原来的 &#xff0c;第二个如果层级多的话需要把索引什么的传过去用$se…

HTML 限制文本框只能输入数字 onkeyup+onafterpaste

限制文本框只能输入数字 < input onkeyup "if(isNaN(value))execCommand(undo)" onafterpaste "if(isNaN(value))execCommand(undo)" > < input name txt1 onchange "if(/\D/.test(this.value)){alert(只能输入数字);this.value;}" …

JAVAFX的table样式修改

直接上代码吧&#xff0c; .table-view{-fx-font-size: 16; 修改表格字体的大小 } 表头的背景设置 .table-view .column-header-background {-fx-background-color: #DBDBDB; } 表头设置 .table-view .column-header{-fx-border-color:#ffffff; -fx-border-width:0 1 …

bootstrap-table样式修改

bootstrap-table修改后的效果如下 1.删除边线 <style>.table>tbody>tr>td{border-top: 1px solid transparent !important;border-right: 1px solid transparent !important;border-left: 1px solid transparent !important;}.table>thead>tr>th{bord…

HTML常用table样式

转自&#xff1a;http://atgoingguoat.iteye.com/blog/2074431 常用table样式&#xff0c;备自己常年复制用。 效果图 Java代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.d…

一文图解自定义修改el-table样式

我们在使用element UI库的时候&#xff0c;确实给我们带来了许多便利&#xff0c;但是&#xff0c;往往组件库无法满足我们的业务需求&#xff0c;这时就需要我们在组件库的基础上修改样式。 今天水香木鱼一篇图解文章教大家如何在组件库的基础上去修改样式&#xff0c;今天我们…

el-table样式美化

<!-- 列表展示 --><el-table:data="tableData"v-loading="loading2"borderclass="mg-btm-20

ant design table样式修改合集

目录 1. 修改列头样式 改变列头文字颜色 改变列头背景颜色 2. 修改行样式 改变行文字颜色 隔行换色 3.列头居中&#xff0c;列居左/右 4.列表自动滚动 5. 列头超出省略并可以点击全显示 6.Table 点击某一行时改变选中行的边框颜色 7.Table 移入某一行时改变行的颜色 …

Element-UI:el-table样式修改

以下样式代码在less环境下生效&#xff0c;最终样式如下。 样式代码&#xff0c; /*修改table 表体的背景颜色和文字颜色*/ /deep/ .el-table {background-color: transparent;th,td {background-color: transparent;}.el-table__expanded-cell {background-color: transp…

ElementUI table 样式修改

一、概述 element-ui table 默认是白色背景&#xff0c;现在需要修改为黑色背景&#xff0c;白色文字。 二、代码实现 css样式 <style>/*修改table 的背景颜色和文字颜色*/.el-table td, .el-table th.is-leaf,.el-table--border, .el-table--group{border-color: black;…

table 样式美化

1. 单像素边框CSS表格 这是一个很常用的表格样式。 源代码: 1 <!-- CSS goes in the document HEAD or added to your external stylesheet -->2 <style type="text/css">3 table.gridtable {4 font-family: verdana,arial,sans-serif;5 font…

el-table 样式自定义

1.el-table 样式自定义 效果图: // tableRowClassName 通过值判断是否添加加class, // header-cell-style 头部样式 // row-style 行的样式 // cell-style 每个item 的样式 <el-table style"margin-bottom: 20px" :data"pmPopList" :row-class-name&q…

HTML table样式

如果想在网页中建一个如下table表格应该怎么做呢&#xff1f; 首先建一个表<table> <table>/*table标签就是建一个表格*/<tr>/*tr标签就是table row&#xff0c;即为表格中的一行*/<th>学号</th>/*th标签即table head&#xff0c;就是表头*/<…

Vue表格table样式

新入职的公司让我学习下Vue&#xff0c;以前没怎么学过&#xff0c;最近开始学习&#xff0c;记录下每天学习的内容&#xff0c;借鉴了很多前辈们的资料&#xff0c;如有冒犯&#xff0c;还请原谅。 开始我做的是动态表格&#xff0c;但是发现不会调整宽度&#xff0c;于是就改…