📄 j2ee,java,jsp,servlet,ejb,web service,中间件,java专区,resin,tomcat,weblogic,jboss,java培训 赛迪网-技术天地.htm
字号:
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>message.addRecipient(type, address)</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>下面是Message.RecipientType的三个常量:
<BR><BR>
<CENTER><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>Message.RecipientType.TO
Message.RecipientType.CC
Message.RecipientType.BCC</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>因此,如果我们要发送邮件给总统,并发用一个副本给第一夫人的话,下面的方法将被用到:
<BR><BR>
<CENTER><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>Address toAddress = new InternetAddress
("vice.president@whitehouse.gov");
Address ccAddress =
new InternetAddress("first.lady@whitehouse.gov");
message.addRecipient
(Message.RecipientType.TO, toAddress);
message.addRecipient
(Message.RecipientType.CC, ccAddress);</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>JavaMail
API并没有提供检查邮件地址有效性的机制。当然我们可以自己完成这个功能:验证邮件地址的字符是否按照RFC822规定的格式书写或者通过DNS服务器上的MX记录验证等。
<BR><BR>E.Authenticator <BR><BR>像java.net类那样,JavaMail
API通过使用授权者类(Authenticator)以用户名、密码的方式访问那些受到保护的资源,在这里“资源”就是指邮件服务器。在javax.mail包中可以找到这个JavaMail的授权者类(Authenticator)。
<BR><BR>在使用Authenticator这个抽象类时,我们必须采用继承该抽象类的方式,并且该继承类必须具有返回PasswordAuthentication对象(用于存储认证时要用到的用户名、密码)getPasswordAuthentication()方法。并且要在Session中进行注册,使Session能够了解在认证时该使用哪个类。下面代码片断中的MyAuthenticator就是一个Authenticator的子类。
<BR><BR>
<CENTER><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>Properties props = new Properties();
// fill props with
any informationAuthenticator
auth = new MyAuthenticator();
Session session =
Session.getDefaultInstance(props, auth);</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>F.Transport
<BR><BR>在发送信息时,Transport类将被用到。这个类实现了发送信息的协议(通称为SMTP),此类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息:
<BR><BR>
<CENTER><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>Transport.send(message);</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>当然,方法是多样的。我们也可由Session获得相应协议对应的Transport实例。并通过传递用户名、密码、邮件服务器主机名等参数建立与邮件服务器的连接,并使用sendMessage()方法将信息发送,最后关闭连接:
<BR><BR>
<CENTER><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>message.saveChanges();
// implicit with send()
Transport transport =
session.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage
(message, message.getAllRecipients());
transport.close();</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>评论:上面的方法是一个很好的方法,尤其是在我们在同一个邮件服务器上发送多个邮件时。因为这时我们将在连接邮件服务器后连续发送邮件,然后再关闭掉连接。send()这个基本的方法是在每次调用时进行与邮件服务器的连接的,对于在同一个邮件服务器上发送多个邮件来讲可谓低效的方式。
<BR><BR>注意:如果需要在发送邮件过程中监控mail命令的话,可以在发送前设置debug标志: <BR><BR>
<CENTER><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>session.setDebug(true)</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>G.Store和Folder
<BR><BR>接收邮件和发送邮件很类似都要用到Session。但是在获得Session后,我们需要从Session中获取特定类型的Store,然后连接到Store,这里的Store代表了存储邮件的邮件服务器。在连接Store的过程中,极有可能需要用到用户名、密码或者Authenticator。
<BR><BR>
<CENTER><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>// Store store = session.getStore("imap");
Store store = session.getStore("pop3");
store.connect(host, username, password);</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>在连接到Store后,一个Folder对象即目录对象将通过Store的getFolder()方法被返回,我们可从这个Folder中读取邮件信息:
<BR><BR>
<CENTER><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>上面的例子首先从Store中获得INBOX这个Folder(对于POP3协议只有一个名为INBOX的Folder有效),然后以只读(Folder.READ_ONLY)的方式打开Folder,最后调用Folder的getMessages()方法得到目录中所有Message的数组。
<BR><BR>注意:对于POP3协议只有一个名为INBOX的Folder有效,而对于IMAP协议,我们可以访问多个Folder(想想前面讲的IMAP协议)。而且SUN在设计Folder的getMessages()方法时采取了很智能的方式:首先接收新邮件列表,然后再需要的时候(比如读取邮件内容)才从邮件服务器读取邮件内容。
<BR><BR>在读取邮件时,我们可以用Message类的getContent()方法接收邮件或是writeTo()方法将邮件保存,getContent()方法只接收邮件内容(不包含邮件头),而writeTo()方法将包括邮件头。
<BR><BR>
<CENTER><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>System.out.println
(((MimeMessage)message).getContent());</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>在读取邮件内容后,别忘记了关闭Folder和Store。
<BR><BR>
<CENTER><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>folder.close(aBoolean);
store.close();</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR></CENTER><BR><BR>传递给Folder.close()方法的boolean
类型参数表示是否在删除操作邮件后更新Folder。 <BR><BR>H.继续向前进! <BR><BR>在讲解了以上的七个Java
Mail核心类定义和理解了简单的代码片断后,下文将详细讲解怎样使用这些类实现JavaMail API所要完成的高级功能。
<BR><BR>(T117)
<P align=center><BR></P><BR><BR></SPAN></TD></TR></TBODY></TABLE><BR>
<TABLE class=p14 cellSpacing=0 cellPadding=3 width="95%" border=0>
<TBODY>
<TR>
<TD align=middle><A class=p14 href="http://blog.ccidnet.com/"
target=_blank><FONT
color=red><B>赛迪网推出“IT博客”,花不到一分钟就完成注册</B></FONT></A></TD></TR></TBODY></TABLE>
<TABLE class=content cellSpacing=0 cellPadding=3 width="95%" border=0>
<TBODY>
<TR>
<TD align=middle>【<A class=content01
href="http://tech.ccidnet.com/art/1112/20060105/408013_1.html#comment">评论</A>】
【<A class=content01
href="mailto:?subject=JavaMail API细节详细解析大全系列之二&body=http://tech.ccidnet.com/">推荐</A>】
【<A class=content01 href="javascript:doZoom(16)" target=_self>大</A>
<A class=content01 href="javascript:doZoom(14)" target=_self>中</A>
<A class=content01 href="javascript:doZoom(12)" target=_self>小</A>】
【<A class=content01 href="javascript:self.print()">打印</A>】 【<A
class=content01
href="javascript:window.close()">关闭</A>】</TD></TR></TBODY></TABLE><BR>
<TABLE class=content01 cellSpacing=0 cellPadding=0 width=530 border=0>
<TBODY>
<TR>
<TD class=p9 align=middle
background="J2EE,JAVA,JSP,SERVLET,EJB,WEB SERVICE,中间件,JAVA专区,RESIN,TOMCAT,WEBLOGIC,JBOSS,JAVA培训 赛迪网-技术天地.files/1103-bg-6.gif"
height=27><B><A class=p9
href="http://tech.ccidnet.com/col/301/301.html" target=_blank><FONT
color=#ffffff>·Linux专区·</FONT></A></B></TD>
<TD class=p9 align=middle
background="J2EE,JAVA,JSP,SERVLET,EJB,WEB SERVICE,中间件,JAVA专区,RESIN,TOMCAT,WEBLOGIC,JBOSS,JAVA培训 赛迪网-技术天地.files/1103-bg-6.gif"><B><A
class=p9 href="http://tech.ccidnet.com/col/1099/1099.html"
target=_blank><FONT color=#ffffff>·黑客攻防·</FONT></A></B></TD></TR>
<TR>
<TD align=middle><IMG height=5
src="J2EE,JAVA,JSP,SERVLET,EJB,WEB SERVICE,中间件,JAVA专区,RESIN,TOMCAT,WEBLOGIC,JBOSS,JAVA培训 赛迪网-技术天地.files/blank.gif"
width=30><BR>
<TABLE class=content cellSpacing=0 cellPadding=1 width=260
border=0><TBODY>
<TR>
<TD vAlign=top align=middle>·</TD>
<TD vAlign=top><A class=content
href="http://tech.ccidnet.com/art/302/20060113/413851_1.html"
target=_blank>循序渐进教你LINUX之软件配置方法</A> </TD></TR>
<TR>
<TD vAlign=top align=middle>·</TD>
<TD vAlign=top><A class=content
href="http://tech.ccidnet.com/art/302/20060112/412757_1.html"
target=_blank>解析Linux环境下的ReiserFS文件系统</A> </TD></TR>
<TR>
<TD vAlign=top align=middle>·</TD>
<TD vAlign=top><A class=content
href="http://tech.ccidnet.com/art/302/20060111/411757_1.html"
target=_blank>制作个版本Linux启动盘的四种通行方法</A> </TD></TR>
<TR>
<TD vAlign=top align=middle>·</TD>
<TD vAlign=top><A class=content
href="http://tech.ccidnet.com/art/302/20060110/410755_1.html"
target=_blank>新手入门:浅谈Linux的文件系统 </A></TD></TR>
<TR>
<TD vAlign=top align=middle>·</TD>
<TD vAlign=top><A class=content
href="http://tech.ccidnet.com/art/302/20060109/409611_1.html"
target=_blank>循序渐进学习系列之Linux的软件配置</A> </TD></TR>
<TR>
<TD vAlign=top align=middle>·</TD>
<TD vAlign=top><A class=content
href="http://tech.ccidnet.com/art/302/20060106/408699_1.html"
target=_blank><FONT color=red>实战讲解防范网络钓鱼技术大全</FONT></A>
</TD></TR></TBODY></TABLE><IMG height=5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -