Email就是电子邮件,在Java中如何实现邮件的发送:

电子邮件从用户电脑的邮件软件,例如Outlook,发送到邮件服务器上,可能经过若干个邮件服务器的中转,最终到达对方邮件服务器上,收件方就可以用软件接收邮件:

MUA --> MTA --> MTA --> MUA

我们把类似于Outlook这样的邮件软件称为 MUA:Mail User Agent,意思是给用户服务的邮件代理;邮件服务器则称为MTA:Mail TransferAgent,意思是邮件中转的代理;最终到达的邮件称为MDA :Mail Delivery Agent ,意思是邮件到达的代理。电子邮件一旦到达MDA,就不在动了。实际上,电子邮件通常就存储在MDA服务器的硬盘上,然后等收件人通过软件或者登陆浏览器查看邮件。

邮件协议:

1.POP3

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

2.SMTP

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

增加SMTP认证的目的就是为了使用户避免受到垃圾文件的侵扰。

3.IMAP

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

IMAP与POP3有什么区别?

POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作,不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的。

IMAP提供webmail与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

相关的协议端口

准备SMTP登陆信息

常用邮件服务商的SMTP信息:

1.qq邮箱:SMTP服务器是 smtp.qq.com,端口是465 / 857

2.163邮箱:SMTP服务器是smtp.163.com,端口465

3.126邮箱:SMTP服务器smtp.126.com, 端口是25

4.Gmail邮箱:SMTP服务器是smtp.gmil.com,端口是465 / 587

准备好SMTP登陆信息后,我们首先要把JavaMail相关的Jar包导入到lib文件中

然后,我们通过JavaMail API连接到SMTP服务器上:以25端口为例,连接SMTPf服务器时,需要准备一个Properties对象,填入相关信息。如果需要服务器认证,则还需要创建一个匿名实现类,用来返回指定的用户名和口令。当获取到Session实例后,打开调试模式可以看到SMTP通信的详细内容,便于调试。

public class demo {public static void main(String[] args) {// SMTP服务器地址String smtp = "smtp.126.com";// 邮箱账号和密码String userName = "fan1589**3429@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// 参数一:SMTP服务器的连接信息// 参数二:用户认证对象(Authenticator接口的匿名实现类)Session session = Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName, password);}});// 开启调试模式session.setDebug(true);System.out.println(session);}
}

发送邮件

发送邮件时首先要将SMTP登录信息封装成类以便我们发送邮件时创建session直接调用,然后需要构造一个Message对象,然后调用Transport.send(Message)即可完成发送:绝大多数邮件服务器要求发送方地址和登录用户名必须一致,否则发送失败,具体实现如下代码所示 :图一是封装SMTP登录信息的类;图二是测试发送邮件的类

public class SessionMailUntil {public static Session createSession() {// SMTP服务器地址String smtp = "smtp.126.com";// 邮箱账号和密码String userName = "fan15891***429@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// 参数一:SMTP服务器的连接信息// 参数二:用户认证对象(Authenticator接口的匿名实现类)Session session = Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName, password);}});// 开启调试模式session.setDebug(true);return session;}
}   
public class demo01 {public static void main(String[] args) {try {// 1.创建SessionSession session = SessionMailUntil.createSession();// 2.创建邮件对象(Message抽象类的子类对象)MimeMessage msg = new MimeMessage(session); // 传入sessionmsg.setFrom(new InternetAddress("fan158***83429@126.com"));// 发件人msg.setRecipient(RecipientType.TO, new InternetAddress("2295***087@qq.com"));// 收件人msg.setSubject("测试邮件", "utf-8");// 标题
//          msg.setText("嘿<b>嘿嘿</b>", "utf-8", "html");// 正文// 3.发送邮件Multipart multipart = new MimeMultipart();// 正文BodyPart textPart = new MimeBodyPart();// 参数一:正文内容// 参数二:内容类型,字符编码集textPart.setContent("<b>Tfboys</b>吴俊凯", "text/html;charset=utf-8");// 附件BodyPart imagePart = new MimeBodyPart();imagePart.setFileName("giao.jpg");// 设置附件文件的显示名字// 数据处理对象(读取附件文件从本地磁盘进行读取)imagePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("C:\\Users\\LUYIFAN\\Pictures\\Saved Pictures微信图片_20210624151732.jpg")),"application/octet-stream")));// 添加至邮件内容multipart.addBodyPart(textPart);// 添加正文multipart.addBodyPart(imagePart);// 添加附件// 设置邮件内容msg.setContent(multipart);Transport.send(msg);} catch (MessagingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

提示:发送HTML邮件和文本邮件类似,只需将:

message.setText(body, "UTF-8");

改为:

message.setText(body, "UTF-8", "html");

也可以附加抄送人代码实现如下所示:

public class demo02 {public static void main(String[] args) {// 1.创建sessionSession session = SessionMailUntil.createSession();try {// 2.创建session子类对象MimeMessage msg = new MimeMessage(session);msg.setFrom(new InternetAddress("fan1589***3429@126.com"));// 发件人msg.addRecipient(RecipientType.TO, new InternetAddress("22957****7@qq.com"));// 收件人//抄送人msg.addRecipients(RecipientType.CC, new InternetAddress[] { new InternetAddress("17195***8@qq.com"),new InternetAddress("27337***87@qq.com") });msg.setSubject("测试文件", "utf-8");// 标题// 发送邮件// 正文BodyPart textpart = new MimeBodyPart();StringBuilder body = new StringBuilder();body.append("<h>fanfanfan</h>");body.append("<img src=\"cid:GIAO\"/>");textpart.setContent(body.toString(), "text/html;charset=utf-8");// 附件BodyPart imagepart = new MimeBodyPart();imagepart.setFileName("yiyi.jpg");imagepart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("C:\\Users\\LUYIFAN\\Pictures\\test1657262677617.jpg")),"application/octet-stream")));imagepart.setHeader("Content-ID", "<GIAO>");Multipart multipart = new MimeMultipart();// 添加至邮件内容multipart.addBodyPart(textpart);// 添加正文multipart.addBodyPart(imagepart);// 添加附件// 设置邮件内容msg.setContent(multipart);Transport.send(msg);} catch (MessagingException | IOException e) {e.printStackTrace();}}
}

Java Email(实现邮件发送)相关推荐

  1. Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例...

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 平阳歌舞新承宠,帘外春寒赐锦袍. ...

  2. Java实现QQ邮件发送客户端程序设计

    目录 一.前言:QQ邮件发送程序 二.封装SMTP操作 三.实现多线程接收 四.QQ邮件客户端界面设计 1.连接按钮 2.发送按钮 五.QQ邮件发送效果演示 六.总结 一.前言:QQ邮件发送程序 !! ...

  3. Java实现QQ邮件发送

    QQ邮件发送 可以发送文本,图片,附件,同时可以将它们进行拼接发送. 功能代码被分成了4个方法,每个方法分别代表不同的发送方式,选择自己需要的方法即可. **实现发送邮件之前,先准备好QQ授权码.** ...

  4. Java实现QQ邮件发送原理和实现

    电子邮件 在网络中实现邮件发送和接收的功能,就必须要有专门的邮件服务器(使用SMTP协议).我们发送一封邮件,先要经过各层路由,交换机,基站,然后存到该邮件服务器,(不同的邮件有不同的邮件服务器,比如 ...

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

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

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

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

  7. java实现邮件发送_基于JavaMail的Java实现简单邮件发送功能

    电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...

  8. smtplib、email实现邮件发送

    目录 发送纯文字邮件 发送HTML邮件 发送图片邮件 发送附件邮件 Python实现发送邮件主要用到smtplib和email模块,其中: smtplib模块主要负责发送邮件的动作.连接邮箱服务器和登 ...

  9. JAVA实现SMTP邮件发送

    该博客偏于实战,以代码为主.不过笔者加了许多注释,方便阅读. 好了说说该博客内容.该博客主要是JAVA实现SMTP发送邮件,主要做到以下几点 1.打开talent客户端 2.掌握在cmd下邮件的发送 ...

最新文章

  1. python安装进度条不动_python – tkinter中的进度条不起作用
  2. tensorflow tf.keras.losses.MeanSquaredError 均方差损失函数 示例
  3. php禁止指定ip访问网站,方法分享:如何利用.htaccess禁止某个IP访问网站
  4. 2019上海车展展后报告(整车篇)
  5. VisualStudio2008+水晶报表的使用
  6. C语言宏的副作用的简单实例
  7. 【笔记】JAVA中的泛型和反射
  8. STL学习笔记5--map and multimap
  9. XP设置文件夹默认打开方式改为“资源管理器”
  10. matlab rgb2hsv v=1,为什么我在matlab中使用rgb2hsv时一直显示这个函数不存在呢?那源函数在哪下载?...
  11. Kafka 命令行操作
  12. c#自带压缩类实现数据库表导出到CSV压缩文件的方法
  13. oracle游标特点,oracle游标应用 sys_refcursor 和 cursor比较
  14. 开篇之作,什么是云原生,云原生技术为什么这么火?
  15. JAVA经典面试题附答案(持续更新版)
  16. Winform Chart控件常见问题汇总
  17. java中的jQuery与Ajax的应用,菜鸟教程
  18. 解决tomcat中文乱码问题的方案
  19. linux top命令 什么意思,Linux下的top命令、%cpu和cps(s)到底是什么意思呢!
  20. Error in network defenition etc/netplan/01-netcfg.yaml line 0 collumn 8: expected mapping.

热门文章

  1. Android P 源码如何修改屏幕密度
  2. 云雷服务器崩溃,“云雷崩”再现,张云雷登杂志封面,服务器被粉丝挤爆
  3. Istio1.12.1 Sidecar注入配置
  4. FreeModbus开源协议栈的(五)野火指南者+Keil+FreeModbus 的Modbus RTU从站
  5. 多种PS技术,会让你的照片美的不行!!!
  6. 剑指Offer——变态跳台阶(厉害的癞蛤蟆)
  7. GridBagConstraints的用法
  8. java android pptp,Centos7搭建PPTP
  9. Android 点击按钮熄屏
  10. windows链接网络映射,切换账号