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

  1. java 实现邮件的发送, 抄送及多附件

    import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; im ...

  2. java实现邮件代理发送

    java实现邮件代理发送 java发送邮件功能支持代理,但是不支持http代理,支持sock代理(支持SOCKS V4或V5协议) 实现效果 使用自己的邮箱进行账密认证 以群组邮箱地址作为发件人进行发 ...

  3. java实现邮件定时发送

    需求:系统定时发送E-mail到其客户,达到通知的效果.先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声! 首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能, ...

  4. Java自动化邮件中发送图表(一)

    一.邮件需求 邮件中需要展示柱状图.折线图和饼图等图表数据.如图: 二.解决方案 将图表转成图片,采用html邮件文本,使用base64编码图片发送邮件. 将图表导出成图片有三种方式: (1)JFre ...

  5. Java自动化邮件中发送图表(四)之javafx Chart

    一.Javafx Chart JavaFX支持各种饼图和XY图表.在XY平面上表示的图表包括AreaChart,BarChart,BubbleChart,LineChart,ScatterChart, ...

  6. Java自动化邮件中发送图表(三)之Highchart

    一.Highchart (1)Highchart.js Highcharts 是一个用纯JavaScript编写的一个图表库.能够很简单便捷的在web网站或是web应用程序添加有交互性的图表. (2) ...

  7. Java自动化邮件中发送图表(二)之JFreeChart

    一.JFreeChart库 JFreeChart是JAVA平台上的一个开放的图表绘制类库. JFreeChart可生成饼图(pie charts).柱状图(bar charts).散点图(scatte ...

  8. java实现邮件发送, 抄送及多附件发送

    java实现邮件发送, 抄送及多附件发送 所需的jar包  mailapi.jar和smtp.jar  或  javax-mail-xxx.jar(如javax.mail-1.5.6.jar)  ht ...

  9. 用java实现邮件发送

    电子邮件 1.基础知识铺垫 要在网络上实现邮件功能,必须要有专门的邮件服务器. 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过的邮件,并把邮件投递到邮件接收者的电子邮箱中. SMTP服 ...

  10. 基于java Email的电子邮件发送

    Email 电子邮件,用java实现email的发送,首先我们需要了解一下email发送的大概过程.简单来说,发送email,需要从用户的电脑邮件软件(MUA),发送到邮件服务器(MTA)上,在通过若 ...

最新文章

  1. MongoDB干货篇之查询数据
  2. HTML5实战 学习笔记
  3. 智能家居——IoT零基础入门篇
  4. Activity的task相关
  5. mysql 唯一索引 二叉法_mysql 唯一索引
  6. c#问题(按F1或F2键时触发事件)
  7. 华为云张昆:支持全场景全业务,GaussDB加速企业数字化转型
  8. Use Jet OLE DB Provider 4.0 to Connect to ISAM Databases (连接Excel, Text等数据库)
  9. linux精简版远程登录,Linux下定制SSH来简化远程访问的方法
  10. List集合排序总结
  11. matlab根号2,在matlab中,运行指令a=sqrt(2),计算结果a是精准的根号2吗
  12. 2021全国电子设计大赛 D题 基于互联网的摄像测量系统 源码解析
  13. IOS UIImageView 汤姆猫实例
  14. yamaha php mt8评测,诶哟这个盒子不错哟,NUC 8i5BEK简单开箱+评测(更新完毕)
  15. solar2 android,Solar2(太阳系行星2)
  16. 聊聊 Spring Boot 2.0 的 WebFlux
  17. 抵御“黄貂鱼”攻击,谷歌使出禁用2G“大招”
  18. 相机分辨率越高,成像效果就一定越好嘛
  19. 利用ffmpeg实现rtmp推流
  20. iOS 如何pop到指定页面

热门文章

  1. 如何将.txt中的数据导入.excel
  2. java实验报告心得_java实验报告心得体会.doc
  3. 潜在失效模式和后果分析 FMEA 10分钟教程
  4. am start 启动王者荣耀
  5. 罗技g402鼠标宏设置教程
  6. MySQL免费社区版安装步骤详解
  7. Gartner零信任网络访问市场指南(2020版)
  8. 一个完整的计算器c语言源代码,分享一个C语言的计算器源代码
  9. 速看!不止零关税,RCEP的签订对普通百姓的影响都在这里
  10. Java面试之Java集合5——HashMap的底层实现