首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 图形图象-> Authorware教程
通过JavaMail访问Hotmail邮箱-JSP教程,Java技巧及代码
作者:网友供稿 点击:530
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
相信许多人都有msn聊天工具的帐号,例如abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址 http://www.hotmail.com 来访问和操作这个邮箱进行邮件的收发。但是这个邮箱有一个限制就是它并不提供pop3或者smtp服务,也就是说一般的邮件客户端工具无法使用这个邮箱,虽然现在有不少的邮件工具可以支持hotmail邮箱,但是如果我们需要在我们的java项目中增加对hotmail邮箱的支持,那往往会不知从什么地方开始入手,因为sun公司提供的javamail 本身并不提供对除了pop3/imap以及smtp外其他协议的支持。
但事实上,javamail只是定义了一组平台无关、独立于通讯协议的邮件程序框架,或者说是接口,它是作为java的可选包存在的。因此可以这样说:javamail并不关心所使用的协议,不管是pop3、smtp、imap当然还有hotmail用的http协议。对于javamail的客户端而言也是这样的,下图就是一个最简单的javamail结构图,通过transport进行邮件的发送,通过store实现对邮件的收取,而不同协议的实现,javamail里的概念叫做provider,只需要根据javamail定义的接口实现自己的provider即可。




为了实现通过javamail访问hotmail邮箱,我们就需要架起javamail接口与hotmail服务所提供的访问接口之间的桥梁。在这之前我们必须首先了解hotmail所使用的接口协议。

hotmail通过地址 http://services.msn.com/svcs/hotmail/httpmail.asp 提供基于http协议的服务,它不同于我们通过浏览器访问 http://www.hotmail.com 的这个地址,后面这个地址是提供给用户一个基于浏览器的访问界面以便对邮箱进行操作,你当然可以通过编写http客户端程序来解析页面并获取邮件的信息,但是这样做不仅实现的复杂程度非常高,而且每次页面风格发生变化后程序都要做相应的调整,因此不具备通用性,显然是不可行的。而地址 http://services.msn.com/svcs/hotmail/httpmail.asp 则不同,它提供了固定的应用程序接口。当你使用浏览器访问该地址的时候,会弹出下面要求登录的窗体:




而当输入正确的用户名和口令后会再弹出一次或两次该提示窗口,但提示信息不同,操作完成后出现页面无法显示的错误,错误码是 405 (资源不允许)。因此该服务并不允许通过浏览器来访问。

事实上hotmail使用的是webdav来提供基于http协议的应用编程接口,webdav(web 分布式创作和版本控制)已经成为重要的 web 通讯协议。webdav所要解决的问题是:

1.改写保护:http 1.1 无法确保客户端可以保护资源,并且可以在其他客户端同时编辑它们的情况下进行更改。 使用 webdav,可以通过多种方式来锁定资源,以便让其他客户端知道您对所讨论的资源感兴趣,或者防止其他客户端访问该资源。

2.资源管理:http 只能直接访问单个资源。 webdav 提供一种更有效地组织数据的方法。 webdav 引入了可包含资源 的集合(类似于文件系统文件夹)概念。 通过 webdav 进行的资源管理包括如下功能:创建、移动、复制和删除集合,以及集合中的资源或文件。

3.文档属性:不同类型的数据具有唯一的属性,这有助于描述数据。 例如,在电子邮件中,这些属性可能是发件人的姓名和接收邮件的时间。 在协作文档中,这些属性可能是文档原始作者的姓名和最后一个编辑者的姓名。 因为人们使用的文档类型各不相同,所以可能的属性类型列表也变得无限大。 xml 是 webdav 所需的一种可扩展通讯工具。

关于webdav的更多资料可以参阅本文最后的参考资料。

相对于自行解析hotmail的浏览器页面而言,基于特定协议webdav的接口使hotmail邮件客户端程序的实现更加稳定和可靠。在了解了javamail api的基本接口以及hotmail所提供接口的协议,本文的题目就变得非常具体了,就是如果编写基于webdav的javamail provider(javamail提供者)并使用这个提供者来实现hotmail邮件收发功能,但这题目太大而且已经超过了一篇文章所能叙述的范围,因此我们接下来将引入一个开放源码项目jdavmail,并详细介绍如何通过这个项目实现hotmail邮件的收发功能。

jdavmail 是一个开放源码的javamail的提供者项目,可以通过它来访问基于webdav协议的邮件服务,有如hotmail邮箱。你可以到 http://sourceforge.net/projects/jdavmail 这个网址下载到最新版本的程序。jdavmail使用了jakarta上的commons httpclient 作为http客户端组件与服务器进行通讯,同时使用了jdom进行xml数据的解析,另外由于httpclient项目用到了commons logging进行日记的输出,因此commons-logging也是必须的,这三个组件都可以在jdavmail的压缩包中的lib目录中找到,压缩包中同时还包括已编译的jar文件以及所有的源码。

为了让大家对jdavmail有个大概的认识,下面我们给出两段代码用于hotmail邮件的收发:

1. 邮件收取



/*
* 文件名:hotmaildemo.java
* 创建时间:2004-9-14
* 创建者:liudong
*/
package com.clickcom.mail;

import java.util.date;
import java.util.properties;

import javax.mail.folder;
import javax.mail.message;
import javax.mail.session;
import javax.mail.store;
import javax.mail.transport;
import javax.mail.internet.internetaddress;
import javax.mail.internet.mimemessage;

/**
* hotmail邮件的收发器
* @author liudong
*/
public class hotmaildemo {
public static void main(string[] args) {
receive();
}

/**
* 邮件接收
*/
protected static void receive() {
try {
properties prop = new properties();
session ses = session.getinstance(prop);
//使用jdavmail provider
store store = ses.getstore("davmail");
//无需指定服务器地址
store.connect(null, "你的帐号","密码");
if (store.isconnected()) {
folder inbox = store.getfolder("inbox");
if (inbox.exists()) {
inbox.open(folder.read_only);
int ncount = inbox.getmessagecount();
system.out.println("inbox contains " + ncount + " messages");
// 依次显示收件箱中的每封邮件
for(int i=1;i<=ncount;i++){
mimemessage msg = (mimemessage) inbox.getmessage(i);
system.out.println("subject : " + msg.getsubject());
system.out.println("from : " + msg.getfrom()[0].tostring());
system.out.println("content type : " + msg.getcontenttype());
system.out.println(msg.getcontent());
}
}
}
} catch (exception ex) {
ex.printstacktrace();
}
}
}



从上面这段代码我们发现除了 store store = ses.getstore("davmail"); 这个语句,同时不需要指定服务器地址外,其他的都跟一个普通的javamail应用程序没有两样,也没有引入任何跟jdavmail有关的类。没有指定服务器地址这个比较容易理解,因为hotmail提供httpmail服务的地址是固定的。事实上仅有getstore这个语句跟常规邮件客户端程序有点不同的是它使用davmail字符串作为参数,而我们在使用javamail连接pop3服务器的时候指定参数值为pop3。怎么回事呢?因为javamail是通过协议名来加载provider类的。打开jdavmail.0.9.006.jar这个jar文件就会发现在meta-inf目录下有一个文件javamail.providers,该文件内容如下:



protocol=davmail; type=store; class=com.posisoft.jdavmail.jdavmailstore; vendor=positive software;
protocol=davmail_xmit; type=transport; class=com.posisoft.jdavmail.jdavmailtransport; vendor=positive software;



因此当我们指定协议名为davmail时,javamail就会自动加载com.posisoft.jdavmail.jdavmailstore类进行处理,因此通过传入davmail字符串所得到的store实例实际上是类com.posisoft.jdavmail.jdavmailstore的一个实例,这样我想大家应该了解了前面这段程序的工作原理。

我们再来看jdavmail发送邮件的代码片段:



/**
* 邮件发送
*/
protected static void send() {
try {
properties prop = new properties();
//邮件发送者地址
prop.setproperty("mail.davmail.from","abc@hotmail.com");
session ses = session.getinstance(prop);
//获得jdavmail的邮件发送实例
transport transport = ses.gettransport("davmail_xmit");
//连接到hotmail服务器,请替换为自己的用户名和口令
transport.connect(null, "用户名","口令");

// 准备要发送的邮件
mimemessage txmsg = new mimemessage(ses);
txmsg.setsubject("this is the subject");

//邮件发送者地址
internetaddress addrfrom = new internetaddress("abc@hotmail.com");
txmsg.setfrom(addrfrom);

//邮件接收者地址
internetaddress addrto = new internetaddress("cdef@hotmail.com", "cdef");
txmsg.addrecipient(message.recipienttype.to, addrto);

//邮件内容
txmsg.settext("hello world !");
txmsg.setsentdate(new date());

//发送邮件
transport.sendmessage(txmsg, txmsg.getallrecipients());
} catch (exception ex) {
ex.printstacktrace();
}
}




同样这段代码使用了davmail_xmit协议来获取jdavmail的邮件发送实例,通过前面提到的javamail.providers文件不难知道jdavmail使用类com.posisoft.jdavmail.jdavmailtransport进行邮件的发送处理。

在实际测试中发现不管是jdavmail还是其他的邮件工具,使用hotmail进行邮件的发送速度比较慢,差不多有几分钟后才能收到相应的信息,因此如果测试中发现该问题请耐心等待。


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·Java面试中的陷阱-JSP教程,Java技巧及代码
·通过JavaMail访问Hotmail邮箱-JSP教程,Java技巧及代码
·ASP.NET中使用自定义验证控件-.NET教程,Asp.Net开发
·燃气轮机发电机组的开发与应用——张树治
·有数据绑定、排序、查找功能的ListView(二):-.NET教程,数据库应用
·显示日期格式的几个函数-ASP教程,ASP应用
·在.NET下获取硬盘序列号的问题-.NET教程,.NET Framework
·use MSAgent in C#-.NET教程,C#语言
·利用光缆传输有线电视信号
·电信级宽带应用网站并发性承载均衡研究
最新文章
·photoshop照片处理:色彩的强化及优化_photoshop教程
·献给想我一样初基础网站优化的朋友们_seo网站优化
·百度联盟认证计划 与合作伙伴互惠共赢_网赚技巧
·如何去选择广告联盟和联盟广告_网赚技巧
·专业的网站流量快速提升的方法_站长心得
·改进网络营销的10种方法_站长心得
·教你最大限度地提高 google adsense 收入的技巧_google推广
·如何建立网站地图(site map)_站长心得
·seo偏门绝技之关键词隐身大法_seo网站优化
·265步hao123后尘被清空数据,谁来代替alexa排名?_alexa排名
相关主题
  • 通过java认证 scjp 考试之精辟总结_java认证
  • 通过javascript实现页面自适应_javascript教程
  • 通过javamail访问hotmail邮箱_邮件服务器
  • 通过java提供的URL类包读取网上的文件-JSP教程,Java技巧及代码
  • 通过java.net.Socket 类抓取网页内容-JSP教程,Java技巧及代码
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭