电子邮件在我们日常的生活中经常使用,在这个互联网大数据时代,我们想要实现一个电子邮件的发送就必须要发送到邮件服务器,和我们传统的邮局有异曲同工之妙,传统的邮件是通过邮局投递,然后从一个邮件投递到另外一个邮件,最终到达我们的手里。

而电子邮件与传统邮局发送过程类似:

             ┌─────────┐    ┌─────────┐    ┌─────────┐│░░░░░░░░░│    │░░░░░░░░░│    │░░░░░░░░░│
┌───────┐    ├─────────┤    ├─────────┤    ├─────────┤    ┌───────┐
│░░░░░░░│    │░░░░░░░░░│    │░░░░░░░░░│    │░░░░░░░░░│    │░░░░░░░│
├───────┤    ├─────────┤    ├─────────┤    ├─────────┤    ├───────┤
│       │───>│O ░░░░░░░│───>│O ░░░░░░░│───>│O ░░░░░░░│<───│       │
└───────┘    └─────────┘    └─────────┘    └─────────┘    └───────┘MUA           MTA            MTA            MDA           MUA

MUA(Mail  User Agent):称为邮件软件,给用户服务的邮件代理

MTA(Mail Transfer Agent):称为邮件服务器,意思是邮件中转的代理

MDA(Mail Delivery Agent):称为邮件最终到达的服务器,意思是邮件到达的代理,电子邮件一旦到达MDA就不会在动了。实际上,电子邮件通常就存在MDA服务器的硬盘上,然后等收件人通过软件或登录浏览器查看邮件。

了解了电子邮件的发送原理了以后,我们必须也要知道它里面包含的一些重要协议:

POP3协议:

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

SMTP协议:

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

IMAP协议:

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

现在我们如果要发送一个电子邮件第一步是要确定服务器的地址和端口号,服务器的地址通常是smtp.*******.com,而端口号是由服务商确定使用25,465还是587.

发送电子邮件之前我们先要准备好先关jar包(javax.mail)进行导入,由于我们现在使用的是JavaSE,而javax是附加包,因此要手动导入,如果使用·javaEE则不用导入。

接下来就是正式的发送一封电子邮件的操作步骤:

第一步:创建session

1.利用字符串把服务器地址,发件人的账户和密码存储起来

2.创建一个Properties的对象用来存储SMTP的连接信息

3.创建session,调用它的getInstance()方法,传入两个参数:参数1:SMTP服务器的连接信息
     参数2:用户认证对象(Authenticator接口的匿名实现类),然后重写它PasswordAuthentication()方法,返回发件人的账户和密码

4.调用session的setDebug()方法,进行调试。

            //SMTP服务器地址String smtp = "smtp.126.com";//邮箱账号和密码(授权密码)String userName = "yxg*******@126.com";String password = "**************";//SMTP服务器的连接信息Properties props = new Properties();props.put("mail.smtp.host", smtp); //SMTP主机号props.put("mail.smtp.port", "25"); //主机端口号props.put("mail.smtp.auth", "true"); //是否需要认证props.put("mail.smtp.starttls.enable", "true"); //启用TLS加密//创建Session//参数1:SMTP服务器的连接信息//参数2:用户认证对象(Authenticator接口的匿名实现类)Session session = Session.getInstance(props,new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName, password);}});//开启调试模式session.setDebug(true);return session;

第二步:创建邮件对象(Message)

1.创建Message对象,调用setFrom()方法,传入发件人的邮箱地址

2.调用setRecipient()方法,传入收件人的邮箱地址

3.调用setSubject(),输入邮件的标题

 //2.创建邮件对象(Message)MimeMessage msg = new MimeMessage(session);msg.setFrom(new InternetAddress("yx*******@126.com"));msg.setRecipient(RecipientType.TO, new InternetAddress("13*******27@qq.com"));msg.setSubject("这是一封情书");

RecipientType.TO:收件人

RecipientType.CC:抄送人

4.编辑正文

输入邮件的正文,如果正文是纯文本的使用setText()方法输入

msg.setText("思君不见念西洲");

如果发送带有html的正文则加入第三个参数“html”,控制文本的格式

第二个参数是设置字符编码集

msg.setText("思君不见念<b>西洲</b>","utf-8","html");

如果想要发送带有附件的电子邮件,我们可以使用Multipart,来创建复合邮件对象,再使用BodyPart创建附件部分,调用setDataHandler()方法创建一个字节数组ByteArrayDataSource,利用Files的readAllByte()方法获取将要发送的本地图片。

//复合邮件对象Multipart multipart = new MimeMultipart();//正文BodyPart textPart = new MimeBodyPart();textPart.setContent("云想衣裳花想容 <b>春风拂槛露华浓</b>","text/html;charset = utf-8");//附件BodyPart imagePart = new MimeBodyPart();imagePart.setFileName("yyy.jpg");imagePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("d:\\test\\美女.jpg")),"application/octet-stream")));multipart.addBodyPart(textPart); //添加正文multipart.addBodyPart(imagePart); //添加附件

然后调用 setContent(multipart)方法,设置邮件内容

 msg.setContent(multipart);

如果想要发送内嵌图片的HTML电子邮件,首先在附件部分的BodyPart部分设置内容ID

imageBodyPart.setHeader("Content-ID","<yyy>");  //设置内容ID

然后我们在正文部分的内容使用StringBuilder进行拼接一个html标签<img /> ,在其中加入刚设置好的内容id

BodyPart textBodyPart = new MimeBodyPart();
StringBuilder builder = new StringBuilder();
builder.append("<h>你好</h>");
builder.append("<img src= \"cid:yyy\"/>");  //通过内容ID引用附件图片

第三步:发送邮件

Transport.send(message);

这样一个简单的email就使用java完成发送了。

发送成功后控制台输出的内容,以及邮箱软件收到了发送的邮件

Java实现简单电子邮件的发送相关推荐

  1. Java GridBagLayout简单电子邮件发送界面的实现

    GridBagLayout网格块布局 运行示例: 代码: import java.awt.Component; import java.awt.Frame; import java.awt.GridB ...

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

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

  3. 网络编程----基于Java Email的电子邮件发送

    前言 电子邮件(electronic mail,简称E-mail,标志:@)又称电子信箱.电子邮政,它是-种用电子手段提供信息交换的通信方式.电子邮件指用电子手段传送信件.单据.资料等信息的通信方法. ...

  4. java使用javax.mail包发送电子邮件:设置账号、密码、主题、文本、附件

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) java ...

  5. Java 使用JavaMail通过Gmail发送电子邮件

    JavaMail提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API可以方便地执行一些常用的邮件传输.可以基于JavaMail开发出类似于Microsoft Outloo ...

  6. Java中使用SMTP协议发送电子邮件

    Java中使用SMTP协议发送电子邮件的具体的步骤: 1.首先需要获取发送邮件的Session对象 Session session = Session.getDefaultInstance(prope ...

  7. 局域网服务器发送消息,Java实现简单局域网聊天室

    本文实例为大家分享了Java实现简单局域网聊天室的具体代码,供大家参考,具体内容如下 Java 的Socket编程: 1.TCP协议是面向连接的.可靠的.有序的.以字节流的方式发送数据,通过三次握手方 ...

  8. 手把手教你实现Java发送邮件(1)-发送简单的文本

    说明:本博客已经收藏至我的gitee中的code_demo仓库(点击此链接跳转)中,且gitee中有相应的代码~ 欢迎访问~~ 不仅仅是code,还有一些通俗的讲解哦~ 文章目录 一.Java实现邮件 ...

  9. 第四周作业 简单地邮件发送实现

    先说发送邮箱用到的三大类: 创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件. 发送邮件的API:Transport类是发送邮件的核心API类, ...

  10. java邮件接收_Java邮件发送与接收原理

    一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...

最新文章

  1. SAP 客供料管理初探
  2. windows加固方案
  3. 2019南昌网络赛-I(单调栈+线段树)
  4. WHEN OVERSEAS
  5. 16-爬虫之scrapy框架手动请求发送实现全站数据爬取03
  6. java语言用数组接收字符_Java基础——数组应用之字符串String类
  7. 2020身高体重标准表儿童_2020上海1-12岁男女孩最新身高标准表,你家孩子达标了吗?...
  8. maven安装 maven上传jar包到库里面
  9. 赤池信息量准则 ( Akaike information criterion)-统计学术语
  10. ADMM算法求解二次项目标函数+l1正则项问题
  11. nodejs下载文件
  12. Ubuntu 下搭建 GCC 交叉编译工具链
  13. C语言 递归实现指数函数
  14. PHP公历农历转换(阴历阳历转换)阴历和阳历转换
  15. Echarts参数属性学习Gird演示案例
  16. win10 python3.6安装numpy路径报错_Python3.6的组件numpy的安装 猪悟能
  17. 平安科技实习生面试经历
  18. linux下查看磁盘空间
  19. 网络防火墙怎么选型,你以为的还对吗(三层选型)
  20. 微博登录显示服务器解析失败怎么办,微博air登录失败, air无法登录的原因 -电脑资料...

热门文章

  1. 来此加密证书申请,验证,自动部署
  2. 31道Java核心面试题(不会的都看过来啦)
  3. discuz 风格模板制作
  4. 【Java项目-飞翔的小鸟】附源码
  5. 禁用U盘,不影响其他设备的使用
  6. c语言听课记录,听课笔记:初识C语言2
  7. 在解压缩某些文件时出现问题检查计算机上,rar文件解压缩失败解压末端出现错误的解决方法...
  8. 使用测温软件EVEREST和鲁大师的一些总结
  9. python中的cd是什么意思_cd是什么意思 如果learnPython放在其它盘内该如果解决
  10. APISpace 行驶证OCR API