Java发送邮件详解
1.邮件收发简介
要在网络上实现邮件功能,必须要有专门的邮件服务器。
这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。
SMTP服务器地址:一般是 smtp.xxx.com
,比如163邮箱是smtp.163.com
,qq邮箱是smtp.qq.com
。
电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请。比如我们要使用qq邮箱,就需要开通邮箱功能;
1.2 传输协议
-
SMTP协议:
发送邮件协议。
我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)
-
POP3协议:
接收邮件协议。
我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
1.3 邮件收发原理
-
大狂神通过smtp协议连接到Smtp服务器,然后发送一封邮件给网易的邮件服务器
-
网易分析发现需要去QQ的邮件服务器,通过smtp协议将邮件转投给QQ的Smtp服务器
-
QQ将接收到的邮件存储在 24736743@qq.com这个邮件账号的空间中
-
小狂神通过Pop3协议连接到Pop3服务器收取邮件
-
从 24736743@qq.com这个邮件账号的空间中取出邮件
-
Pop3服务器将取出来的邮件送到小狂神手中
【注意】有可能你收件人地址,发件人地址等信息都正确了,控制台也打印了正确的信息,但是在收件箱就是收不到信息。这是因为可能收件箱服务器拒收了你发的邮件(比如认为你的邮件是广告),这时候可能在垃圾箱里能找到,可能找不到。解决办法是重复的邮件内容不要多次发送,或者更换收件箱试试
3. Java发送邮件
我们将用代码完成邮件的发送。这在实际项目中应用的非常广泛,比如注册需要发送邮件进行账号激活,再比如OA项目中利用邮件进行任务提醒等等。
使用Java发送 E-mail 十分简单,但是首先你应该准备 JavaMail API
和Java Activation Framework
。
得到两个jar包:mail.jar
和activation.jar
,导入lib
目录下。
我们这里使用qq邮箱发送邮件,QQ邮箱需要安全验证,我们需要获取他对应的权限。获取权限操作为:QQ邮箱–>邮箱设置–>账户
3.1 JavaMail
-
JavaMail 简介:
JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面所讲的SMTP,POP3,IMAP,还有MIME等。我们在使用JavaMail API 编写邮件时,无须考虑邮件的底层实现细节,只要调用JavaMail 开发包中相应的API类就可以了。
JavaMail 下载地址: https://github.com/javaee/javamail/releases
-
JavaMail API 分类:
按照功能可以划分为如下三大类:
- 1)创建和解析邮件的API
- 2)发送邮件的API
- 3)接收邮件的API
这三种类型的API在 JavaMail 中由多个类组成,但是主要有四个核心类,我们在编写程序时,记住这四个核心类,就很容易编写出Java邮件处理程序。
-
JavaMail API 核心类:
①、Message 类:javax.mail.Message
类是创建和解析邮件的核心 API,这是一个抽象类,通常使用它的子类javax.mail.internet.MimeMessage
类。它的实例对象表示一份电子邮件。客户端程序发送邮件时,首先使用创建邮件的JavaMail API
创建出封装了邮件数据的 Message 对象,然后把这个对象传递给邮件发送API(Transport 类) 发送。客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message 类的实例中,客户端程序在使用邮件解析API从这个对象中解析收到的邮件数据。②、Transport 类: