网络编程----基于Java Email的电子邮件发送
前言
电子邮件(electronic mail,简称E-mail,标志:@)又称电子信箱、电子邮政,它是—种用电子手段提供信息交换的通信方式。电子邮件指用电子手段传送信件、单据、资料等信息的通信方法。电子邮件综合了电话通信和邮政信件的特点,它传送信息的速度和电话一样快,又能象信件一样使收信者在接收端收到文字记录。电子邮件系统又称基于计算机的邮件报文系统。
我们熟悉的邮件软件比如Outlook、网易闪电邮、Foxmail都是用来收发邮件的。当然,使用Java程序也可以收发电子邮件。
邮件发送
传统的邮件的发送过程:
传统的邮件是通过邮局投递,然后从一个邮局到另一个邮局,最终到达用户的邮箱;
电子邮件的发送过程:
电子邮件是从用户电脑的邮件软件,发送到邮件服务器上,可能经过若干个邮件服务器的中转,最终到达对方邮件服务器上,收件方就可以用软件接收邮件;
邮件协议
常见的邮件协议有:POP3、SMTP、IMAP。
POP3:
POP3(Post Office Protocol 3),邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。
POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件;
SMTP:
SMTP(Simple Mail Transfer Protocol),简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
IMAP:
IMAP(Internet Mail Access Protocol)交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端 软件登录邮箱,看到的邮件以及状态都是一致的。
利用SMIP协议发送邮件
常用邮件服务商的SMTP信息:
QQ邮箱:SMTP服务器是smtp.qq.com,端口是465/587
163邮箱:SMTP服务器是smtp.163.com,端口是465
126邮箱:SMTP服务器是smtp.126.com,端口是25
Gmail邮箱:SMTP服务器是smtp.gmail.com,端口是465/587
相关jar包:
然后,我们通过JavaMail API连接到SMTP服务器上:以25端口为例,连接SMTP服务器时,需要准备一个Properties对象,填入相关信息。最后获取Session实例时,如果服务器需要认证,还需要传入一个Authenticator对象,并返回指定的用户名和口令。当我们获取到Session实例后,打开调试模式可以看到SMTP通信的详细内容,便于调试。
首先创建会话类:
import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;public class Javacreatsession {public static Session creatSession() {//SMTP服务器地址String smtp="smtp.126.com";//邮箱账号和密码(授权密码)String userName="hpc7799@126.com";String passWord="EQRZOMDDRBXK****";//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对象,然后调用Transport.send(Message)即可完成发送:绝大多数邮件服务器要求发送方地址和登录用户名必须一致,否则发送将失败。
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Message.RecipientType;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;public class Demo03 {public static void main(String[] args) {try {//1.创建Session会话Session session=Javacreatsession.creatSession();//2.创建邮件对象(Message抽象类的子类对象)MimeMessage msg=new MimeMessage(session);msg.setFrom(new InternetAddress("hpc7799@126.com"));msg.setRecipient(RecipientType.TO, new InternetAddress("464822504@qq.com"));msg.setSubject("邮件标题","utf-8");//msg.setText("邮件<b>正文</b>","utf-8","html");//3.邮件内容“复合”对象Multipart multipart=new MimeMultipart();//正文//参数1:正文内容//参数2:内容类型;字符编码集BodyPart textpart=new MimeBodyPart();textpart.setContent("爱你孤身走<b>暗巷</b>","text/html;charset=utf-8");//附件BodyPart imagepart=new MimeBodyPart();imagepart.setFileName("sb.jpg"); //设置附件文件的显示名称//数据处理对象(读取附件文件从本地磁盘进行读取)imagepart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("c:\\hpc\\QQ图片20220220101644.jpg")), "application/octet-stream")));//添加至邮件内容multipart.addBodyPart(textpart); //添加正文 multipart.addBodyPart(imagepart); //添加附件//设置邮件内容msg.setContent(multipart);//发送邮件Transport.send(msg);} catch (AddressException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
填入真实的地址,运行上述代码,我们可以在控制台看到Java Mail打印的调试信息,从调试信息可以看出,SMTP协议是一个请求-响应协议,客户端总是发送命令,然后等待服务器响应。服务器响应总是以数字开头,后面的信息才是用于调试的文本。这些响应码已经被定义在SMTP协议中了,查看具体的响应码就可以知道出错原因。
网络编程----基于Java Email的电子邮件发送相关推荐
- 基于java Email的电子邮件发送
Email 电子邮件,用java实现email的发送,首先我们需要了解一下email发送的大概过程.简单来说,发送email,需要从用户的电脑邮件软件(MUA),发送到邮件服务器(MTA)上,在通过若 ...
- java gui论文_毕业设计论文-基于JAVA GUI的电子邮件客户端软件的设计与实现.doc
毕业设计论文-基于JAVA GUI的电子邮件客户端软件的设计与实现.doc 还剩 41页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧, ...
- 网络编程——基于TCP协议的通讯录【课程设计】
网络编程--基于TCP协议的通讯录[课程设计] 本文目录 网络编程--基于TCP协议的通讯录[课程设计] 一.设计题目和要求 设计目标: 课程设计系统组成及模块功能: 二.设计内容 服务端 客户端 S ...
- step5 . day2 网络编程 基于TPC协议的网络编程流程及API
基于TCP协议的网络编程流程 服务器端: 1) socket(),创建套接字文件,用于连接 2) bind(), 绑定,把socket()函数返回的文件描述符和IP.端口号进行绑定; 3) liste ...
- 网络编程+go+java,Go语言中的TCP/IP网络编程
Go语言TCP/IP网络编程 乍一看,通过TCP/IP层连接两个进程会感觉可怕, 但是在Go语言中可能比你想象的要简单的多. TCP/IP层发送数据的应用场景 当然很多情况下,不是大多数情况下,使用更 ...
- 网络编程-基于MFC的仿QQ聊天室-2020
基于MFC的仿QQ聊天室(2020) 有幸学习过网络编程的一些知识,出于对编程的热爱,把曾经的一次简单实践编程作业进行了自定义的完成. 编程所需: 编程工具为VS 2010,需要掌握MFC的基本操作以 ...
- java网络编程是java开发吗,22年最新
凭借编程大牛最新版Java核心开发手册,掌握了能进阿里.面对市场需求缩水的时期,老关的朋友是如何拿到阿里offer的呢?别着急!今天就来分享一下我朋友的蜜拓蜜武器:阿里大牛整理的Java核心开发手 J ...
- Linux网络编程 - 基于UDP的服务器端/客户端
一 理解UDP 1.0 UDP协议简介 UDP(User Datagram Protocol,用户数据报协议) [RFC 768] UDP协议的数据传输单元叫 UDP用户数据报,而TCP协议的数据传输 ...
- Java Email(实现邮件发送)
Email就是电子邮件,在Java中如何实现邮件的发送: 电子邮件从用户电脑的邮件软件,例如Outlook,发送到邮件服务器上,可能经过若干个邮件服务器的中转,最终到达对方邮件服务器上,收件方就可以用 ...
最新文章
- 老码农绝密:使用 TS(TypeScript) 的 10 大理由
- 在阿里做科研是一种什么感受?
- #180111mysql启动错误
- 十二、深入Java的循环语句
- 分布式和微服务区别_深度解析spring cloud分布式微服务的实现
- linux shell文件锁,shell脚本实现文件锁功能
- 做前端性能优化,还不知道什么是Preload、Prefetch、Preconnect、Prerendering,你就out了?
- 雷霆战机源代码c语言,C++实现雷霆战机可视化小游戏
- oracle字体加粗函数_Oracle日期操作函数
- Adobe Edge Animate 1.0-软件内部教程
- tolua错误大全-Chinar出品-几乎可为新手解决所有报错情景
- Docker学习:容器之间单/双向通信 |--link /自定义网络实现互认容器别名 (理论篇)
- G 蛋白偶联受体与小分子化合物的相互作用
- 实现挂视频的三种方法
- PotPlayer播放器及安装说明
- 微信小程序点赞+取消点赞多项点击
- IE6,IE7中 按钮的宽度随着内容的增多而增长
- 微信个人号多开云客服系统定制通信标准协议
- 微信小程序-实现删除指定列表项
- 工具条(Ext.Toolbar)
热门文章
- linux netstat 进程号,netstat 查看 服务进程号
- 发票系统怎么加其他现代服务器,开票系统里怎么填加开票人
- c#OleDbConnection 类和DbConnection
- linux系统print命令,linux常用命令 print格式输出
- 税务计算机 试题分析,税务师考试题型及计算器使用规定
- linux grep截取字符数,Linux grep命令用法详解
- linux下 udf提权_udf提权
- event.button
- 南昌本地瑜伽馆的实地调查报告
- 波尔远程控制软件与网络人远程控制软件大比拼