首页 Java邮件开发

Java邮件开发

举报
开通vip

Java邮件开发第二章 邮件传输协议 SMTP协议:简单邮件传输协议,它定义了邮件客户端于SMTP服务器之间,以及两台SMTP服务器之间的通信规则。SMTP协议的通信双方采用一问一答的命令/响应形式进行对话。 命令: Ehlo Auth Mailfrom: Rcptto: Data Quit 我们来看一个例子: 因为我们的用户名和密码,是需要加密的,所以我们先把用户名和密码加密,程序如下: import java.io.*; import sun.misc.BASE64Encoder; public class Base64Uti...

Java邮件开发
第二章 邮件传输 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 SMTP协议:简单邮件传输协议,它定义了邮件客户端于SMTP服务器之间,以及两台SMTP服务器之间的通信规则。SMTP协议的通信双方采用一问一答的命令/响应形式进行对话。 命令: Ehlo Auth Mailfrom: Rcptto: Data Quit 我们来看一个例子: 因为我们的用户名和密码,是需要加密的,所以我们先把用户名和密码加密,程序如下: import java.io.*; import sun.misc.BASE64Encoder; public class Base64Util { public static void main(String [] args) throws IOException{ System.out.print("请输入用户名:"); 更多的内容http://www.gaopincaipiao.com/en/ BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); String username=in.readLine(); System.out.print("请输入密码:"); String password=in.readLine(); BASE64Encoder encoder=new BASE64Encoder(); System.out.println("编码后的用户名:"+encoder.encode(username.getBytes())); System.out.println("编码后的密码为:"+encoder.encode(password.getBytes())); } } 输入用户名和密码以后,会把加密后的用户名和密码给出来,然后我们打开命令提示符: 这个指令的意思,就是连接到163.com 25是段口号。 返回220, 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示成功连接。 更多的内容http://www.gaopincaipiao.com/en/ 更多的内容http://www.gaopincaipiao.com/en/ 这样,我们就发完了一封邮件,你可以用自己的账户发一封信,然后查看一下,在这里不再啰嗦。 POP3 协议:邮件服务提供商专门为每个用户申请的电子邮箱提供了邮件存储空间。 命令: Userusername Passpassword Apopname,digest Stat Uidlmsg# List[msg#] Retrmsg# Delemsg# Rset Topmsg#n Noop Quit 好的,我们来看一个例子,通过这些指令,来操纵邮箱。 通过上面的指令,就会登录到邮箱。 在上图中,retr命令后面显示的内容,就是邮件的相关信息和内容。至于其它的一些指令,在这里不再一一讲解,大家有兴趣,可以到网上找一些资料。 IMAP协议:对POP3 协议的一种扩展,定义了邮件客户端软件与邮件服务器的通信规则。 更多的内容http://www.gaopincaipiao.com/en/ 第三章 邮件的组织结构 如同上图,体现了邮件的基本格式。相信大家可以很轻松的看懂大的内容,我在这里就不再啰嗦了。 MIME协议:由于网络的迅猛发展,人们早已经不再满足于电子邮件仅仅是用来交换文本信息,更希望可以使用电子邮件来交换更为丰富多彩的内容,比如说图片。但是,由于这些内容,比如说图片,都是非ASCII码的二进制数据,而我们原来的邮箱格式,只是用于表达纯文本信息,所以要发送这些内容的话,必须先将其进行编码。为了解决这个问题,人们提出了MIME协议。 MIME协议用于定义复杂邮件的格式,它可以表达多段平行的文本内容和非文本内容。例如,在邮件中插入附件。 MIME邮件的组织结构: Content-Type: 具体资源的数据类型和组合消息的组合关系,都是通过消息头中的Content-Tpe头字段来指定的。其内容以“主类型/子类型”的形式出现,主类型有:text,image,audio,video,application,multipart,message等。每个主类型下面都有很多个子类型,比如text下面就有plain,htmlm,xml,css等子类型。Multipart主类型用于表示MIME组合关系,它是MIME协议中最重要的一种类型。 一封MIME邮件中的MIME消息可以有三种组合关系:混合,关联,选择。对应的MIMe类型如下: Multipart/mixed:表示消息体中的内容是混合组合类型,可以是文本,声音和附件等不同邮件内容的混合体。 Multipart/related:表示消息体中的内容是关联(依赖)组合类型,表示消息体中的某些内容,依赖另外的资源。 Multipart/alternative:选择组合类型。 其他头字段: Content-Transfer-Encoding:用于指定编码方式。 Content-Disposition:用于指定邮件阅读程序处理数据内容的方式。 Content-ID:用于组合消息中的内迁资源制定的一个唯一表示号。 Content-Location:用来为内迁资源设置一个URI地址。 Content-Base:用来为内迁资源设置一个基准路径。 以上的内容,都不很难,我们在这里,也只是做一下简单的介绍,如果你想要真正深刻的了解这部分内容,可以找一本相关 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 籍(网上也有很多),因为大部分都是概念性质的,素以在这里我们不再多说,对于这些基本概念的介绍,到此为止。 第四章 JavaMail API JavaMail API是SUN公司为方便Java开发人员应用程序中实现邮件发送和接收功能而提供的一套标准的开发包。他支持一些常用的邮件协议,如SMTP,POP3,IMAP和MIME等。开发人员使用JavaMail API不便些邮件处理程序时,无须考虑邮件协议的底层实施细节,只要调用JavaMail开发包中相应的API类就可以了。JavaMail API封装在一个名为mail.jar的文件中,它是开发JavaMail应用程序时所必须使用的核心包。 我们可以从SUN公司的网站中下载mail.jar,现在的版本是1.4,下载以后,解压即可,然后我们将mail.jar导到环境变量中,就好了。当然,你也可以不必进行倒入,只要能够找到相应的文件,也可以的。这些是Java基础的内容,这里不再多讲。 JavaMail API按其功能划分通常可以分为三类: 创建和解析邮件内容的API。 发送邮件的API。 接收邮件的API。 核心类: 1 Message:javax.mail.Message是创建和解析邮件的核心类,他的实例代表一封电子邮件。客户端程序发送邮件时,首先使用创建邮件JavaMail API创建出封装了邮件数据的Message对象,然后把这个对象传送给发送API发送。客户端接收邮件时,邮件接收API把收到的邮件数据封装在Message类的实例对象中,客户端程序再使用邮件分析API从这个对象中介析出接收到的邮件数据。 2 Transport:javax.mail.Transport类是发送邮件的核心API,他的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP,客户端程序创建好Message对象后,只需要使用邮件发送API得到Transport对象,然后把Message对象传递给Transport对象,并调用它的发送方法,就可以把邮件发送给指定了SMTP服务器。 3 Store:javax.mail.Store类是接收邮件的核心,他的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3。客户端程序接收到邮件时,只需要有事邮件接收API得到Store对象的接收方法,就可以从制定的POP3服务器获得邮件数据,并把这些数据封装带表示邮件的Message的对象中。 4 Session:javax.mail.Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络联接的会话信息,如邮件服务器的主机名,端口号,采用的邮件发送和接收协议等。Session对象根据信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象是提供信息支持。 JAF简介 JAF(JavaBeansActivationFramework,JavaBeans激活框架)是一个专用的数据处理框架,他用于封装数据,并为应用程序提供访问和操作数据的接口。JavaMail API可以利用JAF从某种数据源中读取数据和获知数据的MIMe类型,并用这些数据生成MIME消息中的消息体和消息类型。 JAF的主要作用在于让Java应用程序知道如何对一个数据源进行察看,编辑和打印等操作。大家知道,在MS Word程序中可以打开一片Word文档中嵌套的Visio图片,JAF就是要让Java程序能够完成类似的技术应用,让应用程序知道数据源支持哪些操作,每个操作分别调用哪个处理模块。对于通过JAF封装的数据,应用程序通过JAF提供的接口可以完成以下操作: 访问数据源中的数据; 获知数据源的数据类型; 获知可对数据进行的各种操作; 用户对数据执行某种操作时,自动创建执行该操作的软件部件的实例对象。 例如,如果要使用JAF处理一个图片文件,那么应用程序通过JAF提供的接口就可以得到队图片文件进行操作的输入输出流,图片文件的MIME类型,JAF为图片文件提供的操作方法(如查看,毕激活打印图片等等),应用程序调用这些操作时,JAF就会调用相应的处理模块对数据进行处理。 SUN公司提供了对JAF的下载,朋友们可以到网上去下载,会得到一个activation.jar的文件,然后将其导入环境变量。 第五章 创建邮件内容 基本原理:JavaMail API使用javax.mail.Message类来表示一封邮件,Message类是一个抽象类,应用程序需要使用其实现子类java.mail.internet.MimeMessage来创建Message类的实例对象。如果要创建一封致包含文本的简单邮件,那么只需要使用到MimeMessage类就可以了。但如果要创建一封包含内嵌资源的或多个附件的复杂邮件,那么则需要同时使用到JavaMail API中的MimeMessage,javax.mail.internet.MimeBodyPart和javax.mail.internet.MimeMultipart等类。 MimeMessage类:表示整封邮件。 MimeBodyPart类:表示邮件的一个MIME消息。 MimeMultipart类:表示一个由多个MIME消息组合成的MIME消息。 简单的一些 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 : 1 复杂邮件和简单邮件一样,都是使用MimeMessage队向来表示整封邮件的。 2 对于复杂邮件的邮件体,不能再简单的调用MimeMessage.setText方法生成,而是要用一个MimeMultipart对象表示,并通过MimeMessage.setContent(Multipart mp)方法设置到MimeMessage对象。 3 MimeMultipart对象用来组合多个MIME消息,其中的每个MIME消息分别用一个MimeMultipart.addBodyPart(BodyPart part)方法加入到MimeMultipart对象中。 4 如果MimeBodyPart对象表示的MIME消息又是一个MIME组合消息,那么它的内容有需要使用一个MimeMultipart对象来表示,并通过MimeBodyPart.setContent(Multipart mp)方法设置到MimeBodyPart对象中。与代表整封邮件的MimeMultipart对象一样,这个MimeMultipart对象中的每一个组成单元也分别有一个MimeBodyPart对象表示。 InternetAddress类 Javax.mail.internet.InternetAddress类用于表示电子邮件的地址,邮件中的发件人和收件人地址都使用这个队向表示的。 构造函数: Public InternetAddress() Public InternetAddress(java.lang.String address) getAddress方法:以String形式返回InternetAddress对象中定义的邮件地址。 Parse方法:静态方法,语法定义如下: Public static InternetAddress[] parse(java.lang.String addresslist) 该方法以“,”号为解析分隔符,解析由多个邮件地址组成的字符串,并把解析出来的邮件地址保存到一个InternetAddress类型的数组对象中。参数addresslist表示由多个邮件地址组成,并用“,”作为其分隔符的字符串。 MimeMessage类 Javax.mail.internet.MimeMessage类表示一封MIME邮件,他继承了抽象类Message并实现了MimePart接口。MimeMessage 类不仅实现了顶层Part接口中定义的方法,他还从Message类中继承了多个setXxx方法,这些方法用于设置和获取整封邮件中的邮件头子段。 Message.RecipientType内部类: 表示收件人的类型,它是Message中的一个静态类。该类中有如下三个常量: 1 TO:代表有健的主要接收者。 2 CC:代表有健的抄送接收者。 3 BCC:代表邮件的暗送接收者。 构造函数: Public MimeMessage(Session session) Public MimeMessage(Session session,java.io.InputStream is) 以上两种构造方法是最常用的,还有其他的几个构造方法,读者可以自己查询。Session对象用于收集客户端与邮件服务器之间的网络连接信息和定义整个邮件程序所需的环境信息。 setForm方法: 用于设置MimeMessage对象中的发件人地址,由两种重载形式: Public abstract void setForm() Public abstract void setForm(Address address) setRecipient和setRecipients方法: 分别用于设置一个和一组收件人的地址。 addRecipient和addRecipients方法: 分别用于增加一个和一组收件人的地址。 setSentDate方法: 用于设置MimeMessage对象中的邮件发送日期,语法格式如下: Public abstract void setSentDate(java.util.Date date) setSubject方法: 用于设置MimeMessage对象中的邮件主题,有两种重载方式: Public void setSubject(java.lang.String subject) Public void setSubject(java.lang.String subject,java.lang.String charset) 如果邮件主题中含有非ASCII码的字符,那么在subject头字段中需要对邮件主题的原始内容进行BASE64 或 Quote-Printable编码。 addHeader和setHeader方法 用于设置当前的MIME消息的某个消息头信息。 setContent方法:用于设置MimeMessage队向的邮件体,有两种重载方式。如下: public void setContent(Object obj,String type) public void setContent(Multipart mp) 这两个方法都是从Part接口继承来的。 setText方法:用于将MIME消息体设置为一个简单的纯文本信息。语法如下: public void setText(String text) setFlag方法:主要用在邮件接收程序中,用于为邮件设置一个邮件标记,例如删除标记,已读标记等等。格式如下: public void setFlag(Flag.Flag flag,boolean set) saveChanges方法:用于更新并保存MimeMessage对象中的数据,格式如下: public abstract void saveChanges() 邮件发送程序发送MimeMessage对象中封装的邮件内容前,通常需要调用这个方法,以便根据MimeMessage对象中保存的信息生成最终的邮件内容。如果修改了MimeMessage对象中的内容,也需要注意调用saveChanges方法以便修改生效。 writeTo方法:用于把MimeMessage对象中的数据输出到一个RFC822格式的输出流中,有两种重载方式,如下: public void writeTo(OutputStream os) public void writeTo(OutputStream os,String [] ignoreList) 好了,上面是一些常用的方法的介绍,这里写的很简略,如果想要很详细的了解,可以查看API。下面,让我们来看一个例子。我们来创建一个简单的纯文本邮件。当然了,这个程序你完全可以手写,当然也都是需要手写的,不过我实在Eclipse下面写的。合理的利用开发工具,是一种很好的习惯。 import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.FileOutputStream; public class TextMessage { public static void main(String [] args)throws Exception{ String from="xyx43046721@163.com"; String to="xyx43046721@163.com"; String subject="test"; String body="test!!!"; //创建Session实例 Session session=Session.getDefaultInstance(new Properties()); //创建MimeMessage实例对象 MimeMessage msg=new MimeMessage(session); //设置发信人 msg.setFrom(new InternetAddress(from)); //设置收信人 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); //设置发送日期 msg.setSentDate(new Date()); //设置邮件主题 msg.setSubject(subject); //设置邮件正文 msg.setText(body); msg.saveChanges(); //把MimeMessage对象中的内容写入到文件中 msg.writeTo(new FileOutputStream("c:\\test.eml")); } } 上述代码我已经添加了注释,相信没有什么难的,运行程序,我们就会在C盘下面生成一个.eml文件,这个就是一封邮件,我们可以使用OutLook来打开它。 好的,上面的例子是一个纯文本的邮件例子,那么下面,我们来创建一个HTML格式的邮件。 代码如下: import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.FileOutputStream; public class HtmlMessage { public static void main(String [] args)throws Exception{ String from="xyx43046721@163.com"; String to="xyx43046721@163.com"; String subject="test"; String body="

Welcome!


"+ ""; //创建Session实例 Session session=Session.getDefaultInstance(new Properties()); //创建MimeMessage实例对象 MimeMessage msg=new MimeMessage(session); //设置发信人 msg.setFrom(new InternetAddress(from)); //设置收信人 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); //设置发送日期 msg.setSentDate(new Date()); //设置邮件主题 msg.setSubject(subject); //设置HTML格式的邮件正文 msg.setContent(body,"text/html;charset=gb2312"); // 保存并生成最终的邮件内容 msg.saveChanges(); //把MimeMessage对象中的内容写入到文件中 msg.writeTo(new FileOutputStream("c:\\test.eml")); } } 观察上图,我们会发现,图片没有出来,这样没有关系,这是OutLook的安全设置问题,我么按照上图所示操作。 好的,有了上面的两个例子,相信我们的学习劲头也会大了很多,下面,我们接着来学习JavaMail的相关内容。 MimeBodyPart类:javax.mail.internet.MimeBodyPart类表示MIME邮件中的一个MIME消息。MimeBodyPart类和MimeMessage类一样,都实现了Part接口。他们都具有Part接口种定义的方法。我们在这里,知识介绍一些常用的方法,读者感兴趣的话,可以自己查阅一下API。 构造函数: Public MimeBodyPart() Public MimeBodyPart(InputStream is) setDataHandler方法:为当前的MimeBodyPart对象设置一个DataHandler对象。格式如下: public void setDataHandler(javax.activation.DataHandler dh) DataHandler是JAF中定义的一个类,它是一种数据访问接口,可以读取各种数据源中的数据和返回数据源的MIME类型,这点等我们讲到JAF的时候会仔细介绍。 setContentID方法:设置消息头中的Content-ID头字段,格式如下: public void setContentID(String cid) setDisposition方法:用于设置消息头中的Content-Disposition头字段,如果当前MIME消息作为邮件中的附件部分,那么就可以使用这个方法来进行设置。各式如下: public void setDisposition(String disposition) setFileName方法 如果当前MIME消息可以关联一个文件名,则可以使用setFileName方法来制定该文件名。格式如下: Public void setFileName(String filename) MimeMultipart类:javax.mail.internet.MimeMultipart是抽象类Multipart的实现子类,它用来组合多个MIME消息。一个MimeMultipart实例对象代表一个主类型为multipart的组合MIME消息,其中可以保存多个代表MIME消息的MimeBodyPart对象。 构造函数: Public MimeMultipart(); Public MimeMultipart(String subtype) addBodyPart方法: public void addBodyPart(BodyPart part) public void addBodyPart(BodyPart part,int index) setSubType方法:用来设置MimeMultipart队向的Content-Type属性的MIME字类型,格式如下: setSubType(String subType) MimeMultipart对象对应的MIME消息得主类型固定为“multipart”,该主类型的三种常用字类型是“mixed”,“alternative”,“related”。 getContentType方法:用来返回MimeMultipart对象的Content-Type属性。 Public String getContentType(); getBodyPart方法:返回MimeMultipart对象中的某个BodyPart对象。 Public BodyPart getBodyPart(int index) Public BodyPart getBodyPart(String CID) getCount方法:返回MimeMultipart对象中保存的 BodyPart对象的个数。 Public int getCoount() 创建包含内嵌图片的复杂邮件 import java.io.FileOutputStream; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMultipart; public class PictureMessage { public static void main(String [] args)throws Exception{ String from="xyx43046721@163.com"; String to="xyx43046721@163.com"; String subject="HTML邮件"; String body=""+ "Welcome!!!
" + ""; Session session=Session.getDefaultInstance(new Properties()); //创建MimeMessage对象,并设置各种邮件头字段。 MimeMessage message=new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject(subject); //创建一个字类型为“related”的MimeMultipart对象 MimeMultipart multipart=new MimeMultipart("related"); //创建一个表示HTML正文的MimeBodyPart对象,并将它加入到前面创建的MimeMultipart对象中 MimeBodyPart htmlBodyPart=new MimeBodyPart(); htmlBodyPart.setContent(body,"text/html;charset=gb2312"); multipart.addBodyPart(htmlBodyPart); //创建一个表示图片内容的MimeBodyPart对象,便国家他加入到前面创建的MimeMultipart对象中。 MimeBodyPart gifBodyPart=new MimeBodyPart(); FileDataSource fds=new FileDataSource("C:\\157222.jpg"); gifBodyPart.setDataHandler(new DataHandler(fds)); gifBodyPart.setContentID("157222.jpg"); //gifBodyPart.setHeader("Content-Type", "image/jpg"); multipart.addBodyPart(gifBodyPart); //将MimeMultipart对象设置为整个邮件的内容,要注意调用saveChanges方法进行更新 message.setContent(multipart); message.saveChanges(); //把MimeMessage对象中的内容写入到文件中 message.writeTo(new FileOutputStream("C:\\PictureMessage.eml")); } } 运行上面的程序,大家会发现,我们不必再像以前一样,选择显示图片才能够将其显示出来。 注意事项: 中的“cid: 157222.jpg”表示引用MIME消息中的Content-ID属性值为157222.jpg的消息体数据。 那么好的,有了上面的例子以后,我们再来创建一个包含图片和附件的复杂邮件。 代码如下: import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMultipart; import java.io.FileOutputStream; public class ComplexMessage { public static void main(String [] args)throws Exception{ Session session=Session.getDefaultInstance(new Properties()); MimeMessage message=createMessage(session); message.writeTo(new FileOutputStream("C:\\ComplexMessage.eml")); } public static MimeMessage createMessage(Session session)throws Exception{ String from="xyx43046721@163.com"; String to="xyx43046721@163.com"; String subject="HTML邮件"; String body="
"+ "163
"+ ""; MimeMessage message=new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject(subject); //创建代表邮件正文和附件的各个MimeBodyPart对象 MimeBodyPart contentPart=createContent(body,"C:\\157222.jpg"); MimeBodyPart attchPart1=createAttachment("C:\\Lesson6.rar"); MimeBodyPart attchPart2=createAttachment("C:\\Lesson7.rar"); //创建用于组合邮件正文和附件的MimeMultipart对象 MimeMultipart allMultipart=new MimeMultipart("mixed"); allMultipart.addBodyPart(contentPart); allMultipart.addBodyPart(attchPart1); allMultipart.addBodyPart(attchPart2); //设置整个邮件内容为最终组合的MimeMultipart对象 message.setContent(allMultipart); message.saveChanges(); return message; } public static MimeBodyPart createContent(String body,String filename)throws Exception{ //创建代表组合MIME消息的MimeMultipart对象,和将该MimeMultipart对象保存到MimeBodyPart对象 MimeBodyPart contentPart=new MimeBodyPart(); MimeMultipart contentMultipart=new MimeMultipart("related"); //创建用于保存HTML正文的MimeBodyPart对象,并将它保存到MimeMultipart中 MimeBodyPart htmlBodyPart=new MimeBodyPart(); htmlBodyPart.setContent(body,"text/html;charset=gb2312"); contentMultipart.addBodyPart(htmlBodyPart); //创建用于保存图片的MimeBodyPart对象,并将它保存到MimeMultipart中 MimeBodyPart gifBodyPart=new MimeBodyPart(); FileDataSource fds=new FileDataSource(filename); gifBodyPart.setDataHandler(new DataHandler(fds)); gifBodyPart.setContentID("157222.jpg"); contentMultipart.addBodyPart(gifBodyPart); //将MimeMultipart对象保存到MimeBodyPart对象中 contentPart.setContent(contentMultipart); return contentPart; } public static MimeBodyPart createAttachment(String filename)throws Exception{ //创建保存附件的MimeBodyPart对象,并加入附件内容和相应信息 MimeBodyPart attachPart=new MimeBodyPart(); FileDataSource fds=new FileDataSource(filename); attachPart.setDataHandler(new DataHandler(fds)); attachPart.setFileName(fds.getName()); return attachPart; } } 当然了,相应的资源文件,大家自己找适合自己的。 第六章 发送邮件 邮件发送API的体系结构 1 从Session对象中或地实现了某种邮件发送协议的Transport对象。 2 使用Session对象创建Message对象,并调用Message对象的方法封装邮件数据。 3 连接指定的SMTP服务器,并调用Transport对象中的邮件发送方法发送Message对象中封装的邮件数据。 Session类:javax.mail.Session类用于定义整个JavaMail应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接受协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。下面是一些常用的方法: getInstance与getDefaultInstance方法: 静态方法,都可用于获得Session类的实例对象。由于Session类的构造函数是私有的,所以应用程序必须调用getInstance方法或getDefaultInstance方法获得Session类的实例对象。他们都有两种重载方式,格式如下: Public static Session getInstance(java.util.Properties props) Public static Session getInstance(java.util.Properties props,Authenticator authenticator) Public static Session getDefaultInstance(java.util.Properties prors) Public static Session getDefaultInstance(java.util.Properties props, Authenticator authenticator) getTransporo方法:用来返回实现了某种具体邮件发送协议的Transport对象,Transport对象可以完成底层的邮件发送协议。格式如下: public Transport getTransport() public Transport getTransport(String protocol) getStore方法:用来返回实现了某种具体邮件接收协议的Store对象,Store对象可以完成底层的邮件接收细节。 Public Store getStore() Public Store getStore(String protocol) setDebug方法:用于打开JavaMail API的调式功能,语法如下: public void setDebug(boolean debug) Transport类:javax.mail.Transport 类继承了javax.mail.Server类,用于连接SMTP服务器,并把包含在Message对象中的邮件数据发送的SMTP服务器。 Connect方法:用于建立与邮件服务器之间的连接。 Public void connect(); Public void connect(String host,String user,String password) Public void connect(String host,int port,String user,String password) sendMessage方法:向指定的邮件地址发送邮件。格式如下: public abstract void sendMessage(Message msg,Address[] address) 这是一个非静态方法,必须得到Transport实例对象后才能被调用,sendMessage方法在发送邮件前不会调用自动调用Message.saveChanges()方法,JavaMail程序必须在调用这个方法前,潜泳代表被发送邮件的Message对象的saveChanges()方法。 Close方法:用于断开与服务器之间的连接,格式如下: Public void close(); Send方法:提供了一种发送邮件的简便方式,它是Transport类中的静态方法。格式如下: Public static void send(Message msg) Public static void send(Message msg,Address [] address) 应用程序可以直接调用Transport.send 方法发送邮件。Send方法执行邮件发送任务时,他首先从参数Message对象中获得Session对象(创建MimeMessage对象时要伟器构造方法传入一个Session对象),然后调用Session.getTransport方法获得用于发送邮件的Transport实例对象,接着再使用保存在Session对象中的与网络连接相关的JavaMail属性,调用Transport对象的sendMessage方法发送邮件,最后调用close方法,断开与服务器的连接。可见,send方法内部一次调用了getTransport,connect,sendMessage和close方法,它可用来作为发送邮件的一种简单方法。 好了,我们简单的介绍了一些方法,那么我们再来看一个邮件发送程序的实例。 首先,我们要了解使用JavaMail API发送程序要执行如下三个步骤: 1 创建包含邮件服务器的网络连接信息的Session对象。 2 创建代表邮件内容Message对象。 3 从Session对象中获得Transport对象,并调用它的方法发送Message对象。 下面是程序代码: import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class HtmlMessageSender { String protocol="smtp"; String from="xyx43046721@163.com"; String to="xyx43046721@163.com"; String subject="HTML测试"; String body=""+ "163.com
" + ""; public static void main(String [] args) throws Exception{ String server="smtp.163.com"; String user="xyx43046721"; String pass="3332862"; HtmlMessageSender sender=new HtmlMessageSender(); Session session=sender.createSession(); MimeMessage message=sender.createMessage(session); //获得Transport对象,并连接邮件服务器发送邮件 Transport transport=session.getTransport(); transport.connect(server, user,pass); transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO)); transport.close(); } public Session createSession(){ Properties props=new Properties(); props.setProperty("mail.transport.protocol", protocol); props.setProperty("mail.smtp.auth","true"); Session session=Session.getInstance(props); session.setDebug(true); return session; } public MimeMessage createMessage(Session session)throws Exception{ MimeMessage message=new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject(subject); MimeMultipart multipart=new MimeMultipart("related"); MimeBodyPart htmlBo
本文档为【Java邮件开发】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_770598
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:56
分类:互联网
上传时间:2011-01-25
浏览量:28