通过JavaMail访问Hotmail邮箱

jdav:适用于Java的DAV框架 达夫 适用于Java的DAV框架 该框架提供了一种方便且可扩展的方式来序列化和解析WebDAV中使用的XML文档以及基于WebDAV的标准。 要求 用于解析和序列化。 支持的RFC 实施状况 以下矩阵概述了当前支持哪些RFC。 缺少[X]表示已完成一些工作,但尚不支持所有XML元素。 RFC RFC标题 客户 服务器 WebDAV的版本扩展 [] [] WebDAV的访问控制协议扩展 [] [] WebDAV的日历扩展 [] [] WebDAV [] [] WebDAV搜索 [] [] WebDAV当前校长扩展 [X] [X] 用于Web分布式创作和版本控制(WebDAV)的扩展MKCOL [X] [X] 将扩展绑定到Web分布式创作和版本控制 [] [] 使用POST将成员添加到Web分布式创作和版本(WebDAV)集合 [X] [X] Ca 立即下载

刘冬 (winter.lau@163.com)
Java自由人,
2004 年 10 月

相信许多人都有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进行邮件的发送速度比较慢,差不多有几分钟后才能收到相应的信息,因此如果测试中发现该问题请耐心等待。

我想通过本文介绍如何利用JDAVMail收发Hotmail邮件,以及研究JDAVMail的源码,不仅可以更加深入了解JavaMail的体系结构,对编写JavaMail Provider也有更加具体的参照。另外希望为正困挠于如何在Java程序中访问Hotmail邮件的朋友们排忧解难。同时也非常欢迎通过我的网站 http://www.javayou.com 跟我交流在使用中遇到的问题。

参考资料

关于作者
刘冬,一直使用J2EE从事移动业务方面的开发。现在可以通过Java自由人网站来跟我联系,网址是:http://www.javayou.com;另外我的邮件地址是winter.lau@163.com

jdav-client:Java 的 DAV 客户端 jDAV-客户端 Java 的 DAV 客户端 要求 用于解析和序列化的 。 用于 DAV XML 元素的定义。 为 HTTP 客户端建模。 例子 以下示例显示了如何使用此库。 请注意:该示例保持简单,不包含异常处理。 在实际应用程序中,您始终需要为各种异常做好准备,例如连接或身份验证问题。 示例中使用的 Executor 需要实现 http-client-interfaces 库中的 IHttpExecutor 接口。 Executor 实现不是这个库的一部分。 // create a DavContext. This needs to be done only once. // Multiple requests can share the same DavContext, when executed consecutively. DavContext davContext 立即下载

相关推荐

workadventure-jdav

WorkAdventure Map入门套件 这是一个入门工具包,可帮助您为构建自己的地图。 要了解如何使用该入门工具包,请按照的教程进行操作。

简单JAVA类

对于简单JAVA类有如下基本开发要求: 类名称必须存在意义,例如:Book,Emp 类中所有属性必须private封装,封装后的属性必须提供setter、getter方法 类中可以提供任意多个构造方法,但是必须保留一个无参的构造方法 类中不允许出现任何输出语句,所有信息输出必须交给被调用处输出 类中需要提供有一个取得对象完整信息的方法,暂定为getInfo(),而且返回String类型 根据基本开发要求,定义开发Emp程序类 package oop;

Unique_LZ的博客 4547

STM32--基于STM32F103C8T6的OV7670摄像头显示

使用 STM32F103C8T6 微控制器驱动 OV7670 摄像头模组,并将图像数据显示在屏幕上,是嵌入式系统中常见的图像采集与显示应用。OV7670 是一款 CMOS VGA 图像传感器,具有高灵敏度、低电压等特点,适用于嵌入式应用。而 STM32F103C8T6 是一款常用的 MCU 控制器,具有丰富的管脚资源和较高的工作频率。

duierrorshuobu的博客 2145

sublime驼峰与蛇形互转

包地址:https://github.com/jdavisclark/CaseConversion 1.Install 1.1 Package Control Open the Command Palette, type pci to bring up Package Control: Install Package, hit Enter, then search for Case Convers...

阳水平的博客 9890

Windows server 2012R2安装Oracle11g

打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Database Configuration Assistant。打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Net Configuration Assistant。首先打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。选择仅安装数据库软件。

qq_74770105的博客 3596

曙光服务器RAID配置避坑指南:MegaRAID SAS 9361-8i实战(含Foreign状态处理)

本文详细解析了曙光服务器搭配MegaRAID SAS 9361-8i控制器的RAID配置全流程,包括RAID0和RAID5的创建、Foreign状态处理及性能优化策略。特别针对磁盘迁移中的Foreign状态问题,提供了系统化的解决方案和高级恢复技巧,助力企业级IT运维提升存储配置的稳定性和可靠性。

weixin_29200741的博客 412

通过JavaMail访问Hotmail邮箱 .

相信许多人都有msn聊天工具的帐号,例如abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址 http://www.hotmail.com 来访问和操作这个邮箱进行邮件的收发。但是这个邮箱有一个限制就是它并不提供pop3或者s

【郭林专刊】云哥中国 I T 民工 1万+

STM32 Proteu直流电机正反转控制系统限位开关-0035

硬件组成:STM32F103C6单片机 +L298N电机控制电路+直流电机+3个按键(正转、反转、停止)+LED指示灯(正转、反转、停止)+限位开关(正限位 反限位) 1.通过3个按键(正转、反转、停止)控制电机的正转、反转、停止。 2.有3个LED指示灯,正转时正转指示灯亮。反转停止对应反转停止指示灯亮。 3.有自动正转反转停止功能,正转时当正限位按键按下时说明正转到最大距离。此时自动停止。反转一样。

zhaxiaobian_er的博客 2002

通过 JavaMail 访问 Hotmail 邮箱(hotmail不提供smtp和pop3服务)

简介: 相信许多人都有 MSN 聊天工具的帐号,例如 abc@hotmail.com ,这个账号其实也是一个邮件地址,可以进行正常的邮件收发功能,你可以通过网址 http://www.hotmail.com 来访问和操作这个邮箱进行邮件的收发。但是这个邮箱有一个限制就是它并不提供 POP3 或者 SMTP 服务,也就是说一般的邮件客户端工具无法使用这个邮箱,虽然现在有不少的邮件工具可以支持 Hot

dac55300424的专栏 9万+

Linux系统下奥比中光Astra Pro相机SDK部署与避坑指南

本文详细指导了在Linux系统下部署奥比中光Astra Pro深度相机SDK的全过程,涵盖系统准备、SDK安装、设备权限配置及常见问题排查。重点解析了USB设备规则配置这一关键步骤,并提供了Python与C++项目的集成方法,旨在帮助开发者快速完成相机配置,避免常见陷阱。

weixin_28455801的博客 300

语言模型推理能力与计算表达力深度解析

语言模型的推理能力本质上是一种知识迁移与泛化应用的过程,其核心在于Transformer架构中的自注意力机制和前馈网络的协同作用。计算表达力作为衡量模型能力的关键指标,涉及函数逼近、组合泛化和上下文理解等多个维度。随着模型规模的扩大,涌现能力现象揭示了参数规模与推理能力之间的非线性关系。在实际应用中,通过提示工程和微调策略可以有效激活和优化模型的推理表现。当前研究正探索模块化架构和世界模型整合等方向,以突破长程推理和因果关系建模等前沿挑战。本文深入探讨了语言模型推理泛化的技术原理与实践方法,为理解计算表达力

weixin_42521032的博客 343

javamail以hotmail作为发件人时报错SMTPSendFailedException:STOREDRV.Submission.Exception:OutboundSpamException

 我已经彻底服了hotmail邮箱,用javamail收发件时,总是有各种问题。可能是国外的邮箱安全做的太好了吧。今天又收到用户的反馈,发件失败了。在后台看了报如下的错。 com.sun.mail.smtp.SMTPSendFailedException: 554 5.2.0 STOREDRV.Submission.Exception:OutboundSpamException; Failed...

qq_26797239的博客 2万+

rk3399开发环境的介绍

由于Bluez的介绍文档有限,以及对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度,学习曲线也相对较陡,所以我有了这个想法,专门对Bluez做一个系统性的介绍,尽可能的涵盖所有内容。

朝气蓬勃 711

java发送hotmail邮件_利用javamail收取Hotmail的退信

利用javamail收取Hotmail的退信(2007-04-05 23:44:19)Hotmail 是我最常用的Email Client。虽然时下hotmail的容量是小了些,速度也常常慢得让人不禁问候盖茨的母亲。但不可否认,它功能相当丰富,也比较稳定。尤其它的页面设计更是我等web编程人员的重要参照。不象很多的POP3服务器,hotmail 实现了邮件传送状态通知(multipart/repo...

weixin_39817122的博客 610

MounRiver Studio(MRS)使用技巧:添加头文件目录;增加代码分组

MounRiver Studio(MRS)使用技巧:添加头文件目录

cheng___yi的博客 1809

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

JavaMail使用Hotmail的SMTP

最近在研究如何用JavaMail来发邮件,其中碰到一个问题就是美国的远程机无法连接126邮箱的SMTP,因为万恶的GFW。于是开始寻找国外邮箱的SMTP,最终发现了Hotmail的使用方法,代码如下 [code="java"] try { String sender="metricsdart@hotmail.com"; //hotmail 邮箱 String reci...

magicfow的专栏 1544

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JavaMail 访问Hotmail

Hotmail使用的是WebDAV来提供基于HTTP协议的应用编程接口,WebDAV(Web 分布式创作和版本控制)已经成为重要的 Web 通讯协议。WebDAV所要解决的问题是:  1.改写保护:HTTP 1.1 无法确保客户端可以保护资源,并且可以在其他客户端同时编辑它们的情况下进行更改。 使用 WebDAV,可以通过多种方式来锁定资源,以便让其他客户端知道您对所讨论的资...

weixin_34281477的博客 502

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java 发送邮件 退信,操作javamail收取Hotmail的退信[Java编程]

赞助商链接本文“操作javamail收取Hotmail的退信[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:Hotmail是我最常用的Email Client.固然时下hotmail的容量是小了些,速度也常常慢得让人不由问候盖茨的母亲.但不可否定,它功效相当丰富,也对比安定.尤别的的页面计划更是我...

weixin_39605840的博客 661
上一篇: Rational XDE Developer for Java 入门指南
下一篇: EJB 最佳实践:工业强度的 JNDI 优化
hlplusplus
博客等级 码龄22年 0粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值