javamail服务器简介_第1页
javamail服务器简介_第2页
javamail服务器简介_第3页
javamail服务器简介_第4页
javamail服务器简介_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JavaMail详细介绍33.1 JavaMail简介JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件。除此以外,你还需要有Sun的JavaBeans Activation Framework (JAF)。JavaBeans A

2、ctivation Framework的运行很复杂,在这里简单的说就是JavaMail的运行必须得依赖于它的支持。在Windows 2000下使用需要指定这些文件的路径,在其它的操作系统上也类似。JavaMail是可选包,因此如果需要使用的话你需要首先从下载。目前最新版本是JavaMail1.4,使用JavaMail的时候需要Javabean Activation Framework的支持,因此你也需要下载JAF。安装JavaMail只是需要把他们加入到CLASSPATH中去,如果你不想修改CLASSPATH的话,可以直接把他们的jar包直接copy到JAVA_HOME/lib/ext下。这样

3、JavaMail就安装好了。JavaMail包中用于处理电子邮件的核心类是:Session,Message,Address,Authenticator,Transport,Store,Folder等。Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器,用户名和密码等信息。33.2 邮件收发协议POP3(Post Office Protocol 3)即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)

4、上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCPIP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,我们就可以把Email寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转你发出的电子邮件。33.3 James服务器Apache James(Jav

5、a Apache Mail Enterprise Server)是Apache组织的子项目之一,完全采用纯Java技术开发,实现了SMTP、POP3与NNTP等多种邮件相关协议。James是一个邮件应用平台,可以通过Mailet扩充其功能,如Mail2SMS、Mail2Fax等。James提供了比较完善的配置方案,尤其是关于邮件内容存储和用户信息存储部分,可以选择在文件、数据库或其他介质中保存。James性能稳定、可配置性强,还是开源项目,所有源代码不存在版权问题,因此,James在项目中的应用日益广泛。33.3.1 启动JAMES 我们可以从Apache James 的官方站点下载到我们所需

6、要的James服务器及源码 James服务器(ZIP版)下载地址: l 将james-binary-2.3.1.zip解压到纯英文目录下l 运行bin目录下的run.bat(在运行之前请确保您的Java环境变量已配置成功,否则将提示运行失败) 图33.1表示James服务器已启动成功:图 33.1 启动james服务l 服务器启动成功后,将自动在apps目录下根据james.sar文件生成相应的James发布文件包。33.3.2 用Telnet管理用户用cmd进入MS-DOS,输入telnet localhost 4555 (注:localhost是邮件服务器名,4555是管理端口,可在app

7、sjamesSAR-INFconfig.xml文件中配置,在此我们使用其默认配置) 然后输入用户名和密码(在配置文件config.xml中,默认为用户名:root密码:root) 如图33.2所示说明登陆成功: 图 33.2 用root用户登陆登陆成功后,我们就可以开始对用户信息进行增、删、查、改等操作了。 常用的用户信息操作命令参见下表:l Currently implemented commands:                

8、  常用实现命令 l help                display this help            显示帮助信息 l listusers           display existing accounts&

9、#160;   显示现有账户 l countusers          display the number of existing accounts 显示现有账户数量 l adduser username password   add a new user   添加一个新用户 l verify username   verify if specified user exist  核实指定用户是否存在 l delu

10、ser username   delete existing user        删除存在的用户 l setpassword username password   sets a user's password  设置用户密码 l setalias user alias   locally forwards all email for 'user' to 'alias' 设置邮箱别名 l showalias us

11、ername   shows a user's current email alias 显示别名 l unsetalias user     unsets an alias for 'user'    删除用户别名 l setforwarding username emailaddress   forwards a user's email to another email address      转发

12、用户的电子邮件地址到另一个电子邮件地址 l showforwarding username shows a user's current email forwarding 显示用户的当前邮件转发 l unsetforwarding username     removes a forward         删除转发 l user repositoryname    change to another user repository

13、60;  改变另一个用户库 l shutdown kills the current JVM (convenient when James is run as a daemon)  关闭当前的服务 l quit                close connection             

14、 关闭连接 我们可以输入命令:adduser chenfengcn 881213来添加一个的邮件用户,则其用户名为:chenfengcn,密码为:881213,邮箱地址为:chenfengcnlocalhost(用户名后的域名跟服务器配置的域名相同)33.4 JavaMail API简介打开JavaMail.jar文件,我们将发现在javax.mail的包下面存在着一些核心类:Session、Message、Address、Authenticator、Transport、Store、Folder。而且在ernet包中还有一些常用的子类。l Session类定义了基本

15、的邮件会话。就像Http会话那样,我们进行收发邮件的工作都是基于这个会话的。Session对象利用了java.util.Properties对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。Session类的构造方法是私有的,所以我们可以使用Session类提供的getDefaultInstance()这个静态工厂方法获得一个默认的Session对象:Properties props = new Properties();/ fill props with any informationSession session = Session.getDefaultInstan

16、ce(props, null);或者使用getInstance()这个静态工厂方法获得自定义的Session: Properties props = new Properties();/ fill props with any informationSession session = Session.getInstance(props, null);l Message:当我们建立了Session对象后,便可以被发送的构造信息体了。在这里SUN提供了Message类型来帮助开发者完成这项工作。由于Message是一个抽象类,大多数情况下,我们使用ernet.MimeM

17、essage这个子类,该类是使用MIME类型、MIME信息头的邮箱信息。信息头只能使用US-ASCII字符,而非ASCII字符将通过编码转换为ASCII的方式使用。为了建立一个MimeMessage对象,我们必须将Session对象作为MimeMessage构造方法的参数传入:MimeMessage message = new MimeMessage(session);注意:对于MimeMessage类来讲存在着多种构造方法,比如使用输入流作为参数的构造方法。在建立了MimeMessage对象后,我们需要设置它的各个part,对于MimeMessage类来说,这些part就是MimePart接

18、口。最基本的设置信息内容的方法就是通过表示信息内容和米么类型的参数调用setContent()方法:message.setContent("Hello", "text/plain");然而,如果我们所使用的MimeMessage中信息内容是文本的话,我们便可以直接使用setText()方法来方便的设置文本内容。message.setText("Hello");前面所讲的两种方法,对于文本信息,后者更为合适。而对于其它的一些信息类型,比如HTML信息,则要使用前者。别忘记了,使用setSubject()方法对邮件设置邮件主题:messa

19、ge.setSubject("First");l Address: 到这里,我们已经建立了Session和Message,下面将介绍如何使用邮件地址类:Address。像Message一样,Address类也是一个抽象类,所以我们将使用ernet.InternetAddress这个子类。通过传入代表邮件地址的字符串,我们可以建立一个邮件地址类:Address address = new InternetAddress(""); 如果要在邮件地址后面增加名字的话,可以通过传递两个参数

20、:代表邮件地址和名字的字符串来建立一个具有邮件地址和名字的邮件地址类:Address address = new InternetAddress("", "George Bush"); 本文在这里所讲的邮件地址类是为了设置邮件信息的发信人和收信人而准备的,在建立了邮件地址类后,我们通过message的setFrom()和setReplyTo()两种方法设置邮件的发信人:message.setFrom(address);message.setReplyTo(address);若在邮件中存在多个发信人地址,我们可

21、用addForm()方法增加发信人:Address address = .;message.addFrom(address);为了设置收信人,我们使用addRecipient()方法增加收信人,此方法需要使用Message.RecipientType的常量来区分收信人的类型:message.addRecipient(type, address)下面是Message.RecipientType的三个常量:Message.RecipientType.TOMessage.RecipientType.CCMessage.RecipientType.BCC因此,如果我们要发送邮件给总统,并发用一个副本给

22、第一夫人的话,下面的方法将被用到:Address toAddress = new InternetAddress("");Address ccAddress = new InternetAddress("");message.addRecipient(Message.RecipientType.TO, toAddress);message.addRecipient(Message.RecipientType.CC, ccAddress);JavaMai

23、l API并没有提供检查邮件地址有效性的机制。当然我们可以自己完成这个功能:验证邮件地址的字符是否按照RFC822规定的格式书写或者通过DNS服务器上的MX记录验证等。l Authenticator:像类那样,JavaMail API通过使用授权者类(Authenticator)以用户名、密码的方式访问那些受到保护的资源,在这里“资源”就是指邮件服务器。在javax.mail包中可以找到这个JavaMail的授权者类(Authenticator)。在使用Authenticator这个抽象类时,我们必须采用继承该抽象类的方式,并且该继承类必须具有返回PasswordAuthentication对

24、象(用于存储认证时要用到的用户名、密码)getPasswordAuthentication()方法。并且要在Session中进行注册,使Session能够了解在认证时该使用哪个类。下面代码片断中的MyAuthenticator就是一个Authenticator的子类。Properties props = new Properties();/ fill props with any informationAuthenticator auth = new MyAuthenticator();Session session = Session.getDefaultInstance(props, au

25、th);l Transport:在发送信息时,Transport类将被用到。这个类实现了发送信息的协议(通称为SMTP),此类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息:Transport.send(message);当然,方法是多样的。我们也可由Session获得相应协议对应的Transport实例。并通过传递用户名、密码、邮件服务器主机名等参数建立与邮件服务器的连接,并使用sendMessage()方法将信息发送,最后关闭连接:message.saveChanges(); / implicit with send()Transport transport = sess

26、ion.getTransport("smtp");transport.connect(host, username, password);transport.sendMessage(message, message.getAllRecipients();transport.close();l Store和Folder:接收邮件和发送邮件很类似都要用到Session。但是在获得Session后,我们需要从Session中获取特定类型的Store,然后连接到Store,这里的Store代表了存储邮件的邮件服务器。在连接Store的过程中,极有可能需要用到用户名、密码或者Auth

27、enticator。/ Store store = session.getStore("imap");Store store = session.getStore("pop3");store.connect(host, username, password);在连接到Store后,一个Folder对象即目录对象将通过Store的getFolder()方法被返回,我们可从这个Folder中读取邮件信息:Folder folder = store.getFolder("INBOX");folder.open(Folder.READ_ONL

28、Y);Message message = folder.getMessages();上面的例子首先从Store中获得INBOX这个Folder(对于POP3协议只有一个名为INBOX的Folder有效),然后以只读(Folder.READ_ONLY)的方式打开Folder,最后调用Folder的getMessages()方法得到目录中所有Message的数组。33.5 使用JavaMail进行Javamail开发需要用到两个包:mail.jar和activation.jar,在开始Javamail编程之前,请自己将这两个包添加到IDE的Build path中或将这两个包的路径配置到环境变量中。

29、发送邮件需要两个类:一个是SMTP用户身份认证类(James在默认情况下,是需要SMTP身份认证的);另一个就是我们的邮件发送类,为简单起见,我们直接将邮件的相关信息,如:标题、内容、发送者、接收者等信息直接写在类中,运行main()函数即发送。当然,你同样可以为自己的邮件发送系统构造一个邮件发送介面,通过Servlet将相关参数传递至后台进行处理与发送。其主要代码也就是此main()函数中的内容 Java 源代码(SmtpAuth.java)Package com.hb.javamail.sample; /* * 用于身份认证 * * */ public class SmtpAuth ext

30、ends javax.mail.Authenticator private String user, password; /* * * param getuser * param getpassword */ public void setUserinfo(String getuser, String getpassword) user = getuser; password = getpassword; protected javax.mail.PasswordAuthentication getPasswordAuthentication() return new javax.mail.P

31、asswordAuthentication(user, password); public String getPassword() return password; public void setPassword(String password) this.password = password; public String getUser() return user; public void setUser(String user) this.user = user; SendMail.java发送邮件代码 Java 源代码(SendMail.java)package com.hb.jav

32、amail.sample;import java.util.Properties;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.URLName;import ernet.AddressException;import ernet.InternetAddress;import ernet.Mi

33、meBodyPart;import ernet.MimeMessage;import ernet.MimeMultipart;public class SendMail public static void main(String args) / 初始化信息 String sender = "chenfengcn" String password = "881213" String smtpServer = "localhost" String recipient = "

34、;chenfengcnlocalhost" String subject = "测试邮件主题" String fileAttachment = "" /附件 String content = "测试邮件内容" / 配置服务器属性 Properties proper = new Properties(); proper.put("mail.smtp.host", smtpServer); / smtp服务器 proper.put("mail.smtp.auth", "true"); / 是否smtp认证 proper.put("mail.smtp.port&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论