Java Email(实现邮件发送)
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(实现邮件发送)相关推荐
- Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例...
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 平阳歌舞新承宠,帘外春寒赐锦袍. ...
- Java实现QQ邮件发送客户端程序设计
目录 一.前言:QQ邮件发送程序 二.封装SMTP操作 三.实现多线程接收 四.QQ邮件客户端界面设计 1.连接按钮 2.发送按钮 五.QQ邮件发送效果演示 六.总结 一.前言:QQ邮件发送程序 !! ...
- Java实现QQ邮件发送
QQ邮件发送 可以发送文本,图片,附件,同时可以将它们进行拼接发送. 功能代码被分成了4个方法,每个方法分别代表不同的发送方式,选择自己需要的方法即可. **实现发送邮件之前,先准备好QQ授权码.** ...
- Java实现QQ邮件发送原理和实现
电子邮件 在网络中实现邮件发送和接收的功能,就必须要有专门的邮件服务器(使用SMTP协议).我们发送一封邮件,先要经过各层路由,交换机,基站,然后存到该邮件服务器,(不同的邮件有不同的邮件服务器,比如 ...
- 基于java Email的电子邮件发送
Email 电子邮件,用java实现email的发送,首先我们需要了解一下email发送的大概过程.简单来说,发送email,需要从用户的电脑邮件软件(MUA),发送到邮件服务器(MTA)上,在通过若 ...
- 网络编程----基于Java Email的电子邮件发送
前言 电子邮件(electronic mail,简称E-mail,标志:@)又称电子信箱.电子邮政,它是-种用电子手段提供信息交换的通信方式.电子邮件指用电子手段传送信件.单据.资料等信息的通信方法. ...
- java实现邮件发送_基于JavaMail的Java实现简单邮件发送功能
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...
- smtplib、email实现邮件发送
目录 发送纯文字邮件 发送HTML邮件 发送图片邮件 发送附件邮件 Python实现发送邮件主要用到smtplib和email模块,其中: smtplib模块主要负责发送邮件的动作.连接邮箱服务器和登 ...
- JAVA实现SMTP邮件发送
该博客偏于实战,以代码为主.不过笔者加了许多注释,方便阅读. 好了说说该博客内容.该博客主要是JAVA实现SMTP发送邮件,主要做到以下几点 1.打开talent客户端 2.掌握在cmd下邮件的发送 ...
最新文章
- python安装进度条不动_python – tkinter中的进度条不起作用
- tensorflow tf.keras.losses.MeanSquaredError 均方差损失函数 示例
- php禁止指定ip访问网站,方法分享:如何利用.htaccess禁止某个IP访问网站
- 2019上海车展展后报告(整车篇)
- VisualStudio2008+水晶报表的使用
- C语言宏的副作用的简单实例
- 【笔记】JAVA中的泛型和反射
- STL学习笔记5--map and multimap
- XP设置文件夹默认打开方式改为“资源管理器”
- matlab rgb2hsv v=1,为什么我在matlab中使用rgb2hsv时一直显示这个函数不存在呢?那源函数在哪下载?...
- Kafka 命令行操作
- c#自带压缩类实现数据库表导出到CSV压缩文件的方法
- oracle游标特点,oracle游标应用 sys_refcursor 和 cursor比较
- 开篇之作,什么是云原生,云原生技术为什么这么火?
- JAVA经典面试题附答案(持续更新版)
- Winform Chart控件常见问题汇总
- java中的jQuery与Ajax的应用,菜鸟教程
- 解决tomcat中文乱码问题的方案
- linux top命令 什么意思,Linux下的top命令、%cpu和cps(s)到底是什么意思呢!
- Error in network defenition etc/netplan/01-netcfg.yaml line 0 collumn 8: expected mapping.
热门文章
- Android P 源码如何修改屏幕密度
- 云雷服务器崩溃,“云雷崩”再现,张云雷登杂志封面,服务器被粉丝挤爆
- Istio1.12.1 Sidecar注入配置
- FreeModbus开源协议栈的(五)野火指南者+Keil+FreeModbus 的Modbus RTU从站
- 多种PS技术,会让你的照片美的不行!!!
- 剑指Offer——变态跳台阶(厉害的癞蛤蟆)
- GridBagConstraints的用法
- java android pptp,Centos7搭建PPTP
- Android 点击按钮熄屏
- windows链接网络映射,切换账号