Java邮件发送详解

来源:互联网 发布:龙神契约披风升阶数据 编辑:程序博客网 时间:2024/06/12 01:39

一、邮件协议介绍

(1)发送邮件:SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由他来控制新建的中转方式。默认端口号:25

(2)收邮件:POP3(Post Office Protocol - Version 3)即邮局协议版本3。是TCP/IP协议族中的一员。默认端口号:110

(3)收邮件:IMAP(Internet Mail Access Protocol)即Internet邮件访问协议,以前称作交互邮件访问协议(Interactive Mail Access Protocol)。IMAP是斯坦福大学在1986年开发的一种邮件获取协议。


二、开发环境

(1)工程中导入mail.jar包

(2)安装测试邮件服务器 --- 易邮服务器 --- eyoumailserversetup.exe

  • 工具 --- 服务器设置 --- 配置单域名
  • 账号 --- 新建账号

(3)安装邮件收发客户端 --- foxmail65.exe(个人,免费)  ---  OutLook.exe(企业,收费)

  • 邮箱 --- 新建邮箱账户 



三、JavaMail介绍
(1)JavaMail是Sun公司为方便Java开发人员在应用程序中实现邮件发送和接受功能的一套标准开发包,它支持一些常用的邮件协议,如SMTP、POP3、IMAP。

(2)开发人员使用JavaMail API编写邮件处理软件时,无需考虑邮件协议的底层实施细节,只要调用JavaMail开发包中相应的API类就可以了。

(3)JavaMail也提供了能够创建各种复杂MIME格式的邮件内容的相关API。




四、JavaMail的体系结构与API分类

JavaMail的API按其功能划分通常可以分为如下三大类:
(1)创建和解析邮件内容的API:Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。

(2)发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象实现了某个邮件
发送协议的邮件发送对象,例如SMTP协议。

(3)接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件
接受协议的和邮件接收对象,例如POP3协议。

(4)Session类用于定义整个应用服务所需的环境信息,以及收集客户端与邮件服务器建立网络连接
的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送协议和接受协议等。Session对象根
据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息
支持。



五、实例

import java.util.Properties;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.Message.RecipientType;import javax.mail.MessagingException;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;/** * 发送邮件 * @author ** * */public class MailUtils {public static void sendMail(String to,String code){//获得连接Properties props = new Properties();//创建邮件服务Session session = Session.getDefaultInstance(props,new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {//发件人信息 密码return new PasswordAuthentication("**@**.com","**");}});//构建邮件Message message = new MimeMessage(session);try {//设置邮件来源,发件人message.setFrom(new InternetAddress("**@**.com"));//设置收件人/* * RecipientType.TO:收件人 * RecipientType.CC:抄送 * RecipientType.BCC:暗送,密送 */message.addRecipient(RecipientType.TO, new InternetAddress(to));//主题message.setSubject("测试用户注册激活!");//正文message.setContent("<h1>测试用户注册激活</h1>"+ "<h3><a href='http://**:8080/**/**?method=**&code=" + code + "'>http://**:8080/**/**?method=**&code=" + code + "</a></h3>", "text/html;charset=UTF-8");//发送邮件Transport.send(message);} catch (AddressException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();}}}



六、JavaMail常用类介绍

(1) javax.util.Properties类 
  JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机. 

用法: 
 Properties props = new Properties (); 
   props.put("mail.smtp.host", "smtp.163.com");//可以换上你的smtp主机名。 


(2) javax.mail.Session类 
  这个Session类代表JavaMail 中的一个邮件session. 每一个基于 JavaMail的应用程序至少有一个session但是可以有任意多的session。 在这个例子中, Session对象需要知道用来处理邮件的SMTP 服务器。 

用法: 
   Session sendMailSession; 
   sendMailSession = Session.getInstance(props, null); 


(3) javax.mail.Transport类 
  邮件是既可以被发送也可以被受到。JavaMail使用了两个不同的类来完成这两个功能:Transport 和Store. Transport 是用来发送信息的,而Store用来收信。对于这的教程我们只需要用到Transport对象。 

用法: 
Transport transport; 
  transport = sendMailSession.getTransport("smtp"); 

  用JavaMail Session对象的getTransport 方法来初始化Transport。传过去的字符串申明了对象所要使用的协议,如"smtp"。这将为我们省了很多时间。因为JavaMail以境内置了很多协议的实现方法。 

 注意: JavaMail并不是绝对支持每一个协议,目前支持IMAP、 SMTP和 POP3. 


(4) javax.mail.MimeMessage类 
  Message对象将存储我们实际发送的电子邮件信息,Message对象被作为一个MimeMessage对象来创建并且需要知道应当选择哪一个JavaMail session。 

  用法: 
Message newMessage = new MimeMessage(sendMailSession); 


(5) javax.mail.InternetAddress类 
一旦您创建了 Session 和 Message,并将内容填入消息后,就可以用Address确定信件地址了。和 Message 一样,Address 也是个抽象类。您用的是Javax.mail.internet.InternetAddress 类. 

用法: 
InternetAddress from=new InternetAddress("xxf@cafe.com"); 


(6) javax.mail.Store类 
Store类实现特定邮件协议上的读、写、监视、查找等操作。通过Javax.mail.Store类可以访问Javax.mail.Folder类。 

用法: 
Store store=s.getSorte("pop3");//s为一个邮件会话 
store.connect(popserver,username,password);//通过你提供的pop地址,用户名和密码登录你的邮箱 


(7) javax.mail.Folder类 
Folder类用于分级组织邮件,并提供照Javax.mail.Message格式访问email的能力。 

用法: 
Folder folder=store.getFolder("INBOX"); 
folder.open(Folder.READ_ONLY); 


(8) javax.mail.Internet.MimeMultpart 
一般保存电子邮件内容的容器是Multipart抽象类,它定义了增加和删除及获得电子邮件不同部分内容的方法.由于Multipart是抽象类,我们必须为它使用一个具体的子类,JavaMail API提供javax.mail.Internet.MimeMultpart类来使用MimeMessage对象. 

用法: 
MimeMultipart multipart=new MimeMultipart(); 

注:我们使用MimeMultipart对象的一个方法是addBodyPart(),它在我们的电子邮件内容里添加BodyPart(BodyPart类在下面紧接着要介绍)对象.消息可以有很多部分,一个BodyPart可以代表一个部分. 


(9) javax.mail.Internet.MimeBodyPart类 

MimeBodyPart是BodyPart具体用于mimeMessage的一个子类. 
MimeBodyPart对象代表一个MimeMessage对象内容的一部分.每个MimeBodyPart被认为有两部分: 
⊙一个MIME类型 
⊙匹配这个类型的内容 

用法: 
MimeBodyPart mdp=new MimeBodyPart(); 
String text="Hello JavaMail!"; 
mdp.setContent(text,"text/plain");//定义MIME类型为text/plain,并设置MimeBodyPart的内容. 


(10) javax.activation.DataHandler类(包含在JAF中) 
JavaMail API不限制信息只为文本,任何形式的信息都可能作茧自缚MimeMessage的一部分.除了文本信息,作为文件附件包含在电子邮件信息的一部分是很普遍的.JavaMail API通过使用DataHandler对象,提供一个允许我们包含非文本BodyPart对象的简便方法. 

用法: 
DataHandler dh=new DataHandler(text,type); 
mdp.setDatahandler(dh);//mdp是一个MimeBodyPart对象 


(11) javax.activation.FileDataSource类(包含在JAF中) 
一个FileDataSource对象可以表示本地文件和服务器可以直接访问的资源.一个本地文件可以通过创建一个新的MimeBodyPart对象附在一个mimeMessage对象上. 

用法: 
MimeMultipart mm=new MimeMultipart(); 
MimeBodyPart mdp=new MimeBodyPart(); 
FileDataSource fds=new FileDataSource("c:/exam.txt"); 
mdp.setDataHandler(new DataHandler(fds)); //设置数据源 
mm.addBodyPart(mdp); //为当前消息MimeMultipart对象增加MimeBodyPart 


(12) javax.activation.URLDataSource类(包含在JAF中) 
远程资源,URL不会指向它们,由一个URLDataSource对象表示.一个远程资源可以通过创建一个新mimeBodyPart对象附在一个mimeMessage对象上(同FileDataSource差不多). 

用法: 
与FileDataSource唯一不同的是数据源的设置: 
URLDataSource uds=new URLDataSource("http://www.cnjsp.com/logo.gif"); 




原创粉丝点击