仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 789|回复: 13
打印 上一主题 下一主题

[学习教程] JAVA网站制作之经由过程JavaMail会见Hotmail邮箱

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。会见信任很多人都有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.改写回护:HTTP1.1没法确保客户端能够回护资本,而且能够在其他客户端同时编纂它们的情形下举行变动。利用WebDAV,能够经由过程多种体例来锁定资本,以便让其他客户端晓得您对所会商的资本感乐趣,大概避免其他客户端会见该资本。

2.资本办理:HTTP只能间接会见单个资本。WebDAV供应一种更无效地构造数据的办法。WebDAV引进了可包括资本的汇合(相似于文件体系文件夹)观点。经由过程WebDAV举行的资本办理包含以下功效:创立、挪动、复制和删除汇合,和汇合中的资本或文件。

3.文档属性:分歧范例的数据具有独一的属性,这有助于形貌数据。比方,在电子邮件中,这些属性多是发件人的姓名和吸收邮件的工夫。在合作文档中,这些属性多是文档原始作者的姓名和最初一个编纂者的姓名。由于人们利用的文档范例各不不异,以是大概的属性范例列表也变得无穷年夜。XML是WebDAV所需的一种可扩大通信工具。

关于WebDAV的更多材料能够参阅本文最初的参考材料。

相对自行剖析Hotmail的扫瞄器页面而言,基于特定协定WebDAV的接口使Hotmail邮件客户端程序的完成加倍不乱和牢靠。在懂得了JavaMailAPI的基础接口和Hotmail所供应接口的协定,本文的标题就变得十分详细了,就是假如编写基于WebDAV的JavaMailProvider(JavaMail供应者)并利用这个供应者来完成Hotmail邮件收发功效,但这标题太年夜并且已凌驾了一篇文章所能叙说的局限,因而我们接上去将引进一个开放源码项目JDAVMail,并具体先容怎样经由过程这个项目完成Hotmail邮件的收发功效。

JDAVMail是一个开放源码的JavaMail的供应者项目,能够经由过程它来会见基于WebDAV协定的邮件服务,有如Hotmail邮箱。你能够到http://sourceforge.net/projects/jdavmail这个网址下载到最新版本的程序。JDAVMail利用了Jakarta上的commonshttpclient作为HTTP客户端组件与服务器举行通信,同时利用了jdom举行XML数据的剖析,别的因为httpclient项目用到了commonslogging举行日志的输入,因而commons-logging也是必需的,这三个组件都能够在JDAVMail的紧缩包中的lib目次中找到,紧缩包中同时还包含已编译的jar文件和一切的源码。

为了让人人对JDAVMail有个也许的熟悉,上面我们给出两段代码用于Hotmail邮件的收发:

1.邮件收取



/*
*文件名:HotmailDemo.java
*创立工夫:2004-9-14
*创立者:liudong
*/
packagecom.clickcom.mail;

importjava.util.Date;
importjava.util.Properties;

importjavax.mail.Folder;
importjavax.mail.Message;
importjavax.mail.Session;
importjavax.mail.Store;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeMessage;

/**
*Hotmail邮件的收发器
*@authorliudong
*/
publicclassHotmailDemo{
publicstaticvoidmain(String[]args){
receive();
}

/**
*邮件吸收
*/
protectedstaticvoidreceive(){
try{
Propertiesprop=newProperties();
Sessionses=Session.getInstance(prop);
//利用JDAVMailProvider
Storestore=ses.getStore("davmail");
//无需指定服务器地点
store.connect(null,"你的帐号","暗码");
if(store.isConnected()){
Folderinbox=store.getFolder("INBOX");
if(inbox.exists()){
inbox.open(Folder.READ_ONLY);
intnCount=inbox.getMessageCount();
System.out.println("Inboxcontains"+nCount+"messages");
//顺次显现收件箱中的每封邮件
for(inti=1;i<=nCount;i++){
MimeMessagemsg=(MimeMessage)inbox.getMessage(i);
System.out.println("Subject:"+msg.getSubject());
System.out.println("From:"+msg.getFrom()[0].toString());
System.out.println("Contenttype:"+msg.getContentType());
System.out.println(msg.getContent());
}
}
}
}catch(Exceptionex){
ex.printStackTrace();
}
}
}



从下面这段代码我们发明除Storestore=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=PositiveSoftware;
protocol=davmail_xmit;type=transport;class=com.posisoft.jdavmail.JDAVMailTransport;vendor=PositiveSoftware;



因而当我们指定协定名为davmail时,JavaMail就会主动加载com.posisoft.jdavmail.JDAVMailStore类举行处置,因而经由过程传进davmail字符串所失掉的store实例实践上是类com.posisoft.jdavmail.JDAVMailStore的一个实例,如许我想人人应当懂得了后面这段程序的事情道理。

我们再来看JDAVMail发送邮件的代码片断:



/**
*邮件发送
*/
protectedstaticvoidsend(){
try{
Propertiesprop=newProperties();
//邮件发送者地点
prop.setProperty("mail.davmail.from","abc@hotmail.com");
Sessionses=Session.getInstance(prop);
//取得JDAVMail的邮件发送实例
Transporttransport=ses.getTransport("davmail_xmit");
//毗连到Hotmail服务器,请交换为本人的用户名和口令
transport.connect(null,"用户名","口令");

//筹办要发送的邮件
MimeMessagetxMsg=newMimeMessage(ses);
txMsg.setSubject("Thisisthesubject");

//邮件发送者地点
InternetAddressaddrFrom=newInternetAddress("abc@hotmail.com");
txMsg.setFrom(addrFrom);

//邮件吸收者地点
InternetAddressaddrTo=newInternetAddress("cdef@hotmail.com","cdef");
txMsg.addRecipient(Message.RecipientType.TO,addrTo);

//邮件内容
txMsg.setText("Helloworld!");
txMsg.setSentDate(newDate());

//发送邮件
transport.sendMessage(txMsg,txMsg.getAllRecipients());
}catch(Exceptionex){
ex.printStackTrace();
}
}




一样这段代码利用了davmail_xmit协定来猎取JDAVMail的邮件发送实例,经由过程后面提到的javamail.providers文件不难晓得JDAVMail利用类com.posisoft.jdavmail.JDAVMailTransport举行邮件的发送处置。

在实践测试中发明不论是JDAVMail仍是其他的邮件工具,利用Hotmail举行邮件的发送速率对照慢,差未几有几分钟后才干收到响应的信息,因而假如测试中发明该成绩请耐烦守候。


Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-20 21:58:33 | 只看该作者
是一种使用者不需花费很多时间学习的语言
老尸 该用户已被删除
板凳
发表于 2015-1-25 18:14:08 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
柔情似水 该用户已被删除
地板
发表于 2015-2-1 11:53:02 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
谁可相欹 该用户已被删除
5#
发表于 2015-2-4 15:15:06 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
若天明 该用户已被删除
6#
发表于 2015-2-6 20:29:55 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
乐观 该用户已被删除
7#
发表于 2015-2-13 08:48:11 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
灵魂腐蚀 该用户已被删除
8#
发表于 2015-2-25 20:21:42 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
爱飞 该用户已被删除
9#
发表于 2015-3-4 11:22:23 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
简单生活 该用户已被删除
10#
发表于 2015-3-7 13:16:13 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
小妖女 该用户已被删除
11#
 楼主| 发表于 2015-3-8 11:10:18 | 只看该作者
是一种使用者不需花费很多时间学习的语言
山那边是海 该用户已被删除
12#
发表于 2015-3-13 00:08:21 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
兰色精灵 该用户已被删除
13#
发表于 2015-3-20 06:26:52 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
小女巫 该用户已被删除
14#
发表于 2015-4-12 06:59:12 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 08:12

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表