使用Java实现邮件的发送
数年前,邮件的发送是经过人为的运输,从发件人---当地邮局---收件地邮局---收件人,付出的人力物力是非常大的。随着时代的进步,科技的发展,如今我们的生活中出现更高级发送邮件的方式,最常用的就是从(邮箱--邮箱),当然中间会经过多个邮箱服务器的转载,称为电子邮箱。此篇文章的内容就是简单的通过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()方法发送邮件。代码如下。
如上所述,一个简单的邮件就发送好了。
有不足之处,还希望各位大佬指点。
使用Java实现邮件的发送相关推荐
- java 实现邮件的发送, 抄送及多附件
import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; im ...
- java实现邮件代理发送
java实现邮件代理发送 java发送邮件功能支持代理,但是不支持http代理,支持sock代理(支持SOCKS V4或V5协议) 实现效果 使用自己的邮箱进行账密认证 以群组邮箱地址作为发件人进行发 ...
- java实现邮件定时发送
需求:系统定时发送E-mail到其客户,达到通知的效果.先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声! 首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能, ...
- Java自动化邮件中发送图表(一)
一.邮件需求 邮件中需要展示柱状图.折线图和饼图等图表数据.如图: 二.解决方案 将图表转成图片,采用html邮件文本,使用base64编码图片发送邮件. 将图表导出成图片有三种方式: (1)JFre ...
- Java自动化邮件中发送图表(四)之javafx Chart
一.Javafx Chart JavaFX支持各种饼图和XY图表.在XY平面上表示的图表包括AreaChart,BarChart,BubbleChart,LineChart,ScatterChart, ...
- Java自动化邮件中发送图表(三)之Highchart
一.Highchart (1)Highchart.js Highcharts 是一个用纯JavaScript编写的一个图表库.能够很简单便捷的在web网站或是web应用程序添加有交互性的图表. (2) ...
- Java自动化邮件中发送图表(二)之JFreeChart
一.JFreeChart库 JFreeChart是JAVA平台上的一个开放的图表绘制类库. JFreeChart可生成饼图(pie charts).柱状图(bar charts).散点图(scatte ...
- java实现邮件发送, 抄送及多附件发送
java实现邮件发送, 抄送及多附件发送 所需的jar包 mailapi.jar和smtp.jar 或 javax-mail-xxx.jar(如javax.mail-1.5.6.jar) ht ...
- 用java实现邮件发送
电子邮件 1.基础知识铺垫 要在网络上实现邮件功能,必须要有专门的邮件服务器. 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过的邮件,并把邮件投递到邮件接收者的电子邮箱中. SMTP服 ...
- 基于java Email的电子邮件发送
Email 电子邮件,用java实现email的发送,首先我们需要了解一下email发送的大概过程.简单来说,发送email,需要从用户的电脑邮件软件(MUA),发送到邮件服务器(MTA)上,在通过若 ...
最新文章
- MongoDB干货篇之查询数据
- HTML5实战 学习笔记
- 智能家居——IoT零基础入门篇
- Activity的task相关
- mysql 唯一索引 二叉法_mysql 唯一索引
- c#问题(按F1或F2键时触发事件)
- 华为云张昆:支持全场景全业务,GaussDB加速企业数字化转型
- Use Jet OLE DB Provider 4.0 to Connect to ISAM Databases (连接Excel, Text等数据库)
- linux精简版远程登录,Linux下定制SSH来简化远程访问的方法
- List集合排序总结
- matlab根号2,在matlab中,运行指令a=sqrt(2),计算结果a是精准的根号2吗
- 2021全国电子设计大赛 D题 基于互联网的摄像测量系统 源码解析
- IOS UIImageView 汤姆猫实例
- yamaha php mt8评测,诶哟这个盒子不错哟,NUC 8i5BEK简单开箱+评测(更新完毕)
- solar2 android,Solar2(太阳系行星2)
- 聊聊 Spring Boot 2.0 的 WebFlux
- 抵御“黄貂鱼”攻击,谷歌使出禁用2G“大招”
- 相机分辨率越高,成像效果就一定越好嘛
- 利用ffmpeg实现rtmp推流
- iOS 如何pop到指定页面