开源Gmail API与.NET框架集成应用

在当今这个信息爆炸的时代,电子邮件服务已经成为日常工作和生活中不可或缺的一部分。Gmail作为谷歌推出的一款广受欢迎的电子邮件服务,以其简洁的界面和强大的功能赢得了用户的青睐。随着Gmail功能的不断更新和完善,开发者们也希望能够通过编程的方式更深入地利用Gmail的功能。本文将介绍一个基于.NET框架开发的开源Gmail API,以及一个基于该API构建的概念验证Windows应用程序,该程序提供了基础的远程Gmail功能。

开发这些工具的初衷是鼓励其他开发者创造有趣的Gmail服务。虽然这个项目可能不会长久,因为谷歌已经暗示可能会增加邮件转发和RSS支持等功能,更不用说Gmail最近列出的即将推出的功能了。通讯录导入目前被列为“不久的将来”,但实际上现在已经在联系人窗口中可用。正如Sergey所提到的,企业版的Gmail将会非常受欢迎,相信也会有一个与之配套的API(最近集成了一个Google Search Appliance,可以证明其可扩展性)。谷歌是否有兴趣为公众追求这些功能还有待观察。尽管如此,希望这个项目能够继续进行,并且不介意加入Gmail团队——有很多功能希望能够实现在Gmail中。

Gmail Agent Applet介绍

相信大多数人对applet更感兴趣,所以这里是它的一些特性:

  • 支持多个账户
  • 新消息的气球通知和消息预览
  • 通讯录视图和导入(来自制表符分隔的文本文件)

系统要求:

  • Windows 2000或更高版本
  • Microsoft .NET Framework v1.1
没有在Mono上尝试过这个,怀疑它不起作用,但如果它起作用,请告诉。如果对Gmail的POP访问感兴趣,请查看Pop Goes the Gmail(也是一个.NET项目)。

这是一个概念验证应用程序,有很多特殊之处。它对来说工作得很好,但体验可能会有所不同。欢迎任何想要为这个应用程序的完善做出贡献的人。

Gmail Agent API介绍

API的目标是提供一个可扩展的基础,用于与Gmail接口。这个命名空间中的对象应该足够抽象,能够适应Gmail未来可能做出的任何更改。

阅读Gmail Agent API 0.5的文档,看看有什么可用的。这个类的主要工作是GmailAdapter。它负责与Gmail通信,并在应用程序的持续时间内维护登录和会话信息。GmailSession对象保存单个Gmail账户的所有状态信息,包括GmailThreadCollection的GmailThread对象。GmailContact对象代表单个Gmail地址簿条目。再次,GmailAdapter提供了填充GmailContact的方法,以从Gmail获取信息。

连接概述

API的一个奇怪之处是它使用TLS而不是SSL作为加密层。出于未知原因,SSL提供者非常不稳定,经常无法建立安全链接,所以手动设置了ServicePointManager以使用TLS 1.0。这似乎是.NET开发者中的一个常见问题,如果有人有稳定的解决方案,会很乐意听到。

以下是如何使用API与Gmail建立连接的简单示例: C# // init new adapter GmailAdapter gmail = new GmailAdapter(); // create new session and assign username and password GmailSession myAccount = new GmailSession(); myAccount.Username = "googler"; myAccount.Password = "showmethemoney"; // login and retrieve mailbox info GmailAdapter.RequestResponseType loginResult = gmail.Refresh(myAccount); // display mailbox info if (loginResult == GmailAdapter.RequestResponseType.Success) { // show new inbox count Console.WriteLine("New Threads: " + myAccount.DefaultSearchCounts["Inbox"]); // if new threads exist, show the subject of the first one if (myAccount.UnreadThreads.Count > 0) { GmailThread newThread = (GmailThread)myAccount.UnreadThreads[0]; Console.WriteLine("Latest thread subject: " + newThread.SubjectHtml); } }

Gmail引擎和协议

可能已经注意到,与Yahoo! Mail和Hotmail等其他基于Web的电子邮件系统相比,Gmail的界面非常快。这是因为Gmail将UI引擎放置在客户端作为JavaScript模块。每当登录Gmail时,UI引擎的副本就会加载到HTML页面框架中的一个,并在整个会话期间保留在那里(Oddpost是第一个完善这个想法的人)。随后,Gmail界面的操作通过浏览器中的Gmail UI引擎进行路由,该引擎反过来通过XmlHttpRequest对象向Gmail服务器发送HTTP请求,解释DataPack(稍后详细介绍),并动态更新UI。相比之下,Hotmail和Yahoo! Mail遵循传统的Web应用程序模型,在几乎每次操作后都会重新加载整个UI。

与这个项目最相关的项目是所称的“DataPack”,这是一个只包含JavaScript数组声明的基础HTML文件,UI引擎解析这些数组声明,然后决定更新什么。这样做的好处应该是显而易见的:减少了流量负载,并增加了功能——特别是对于不再需要使用粗糙的“屏幕抓取”技术来与Web应用程序接口的开发者来说。虽然外部开发者的理想情况是XML基础的DataPack,但JavaScript版本已经足够了(怀疑它也是出于性能原因被选择的)。

DataPack格式由单独的“DataItems”组成,或者是包裹在信封函数中的JavaScript数组。示例: D(["ts",0,50,106,0,"Inbox","fd36721220",154]); 函数D()引用Gmail引擎中的运行时评估器,然后解释附加的数组参数。元素"ts"表示这是一个线程列表摘要项,随后的元素表示起始索引、每页线程数、估计总数、线程列表标题、线程列表时间戳和总线程数。这是通过DataPack发送的所有数组参数应用的相同格式: [(,)] 所有DataItems的映射都可以在引擎代码源中找到(/gmail?view=page&name=js)。例如,qu包含配额信息,而ct包含类别(即标签)定义。如果真的想从Gmail中得到所有的东西,请阅读该文件。

确定检索DataPack的正确URL相当直接,因为大多数请求将返回相同的基本信息,如配额、类别计数和收件箱计数。主要变化的是线程列表摘要,这取决于正在查看的页面。所有主要文件夹——收件箱、星标、垃圾邮件、垃圾邮件等——实际上只是Gmail中预定义的搜索。例如,收件箱DataPack URL是: /gmail?search=inbox&view=tl&start=0&init=1&zx= 所有未读线程的搜索查询是: /gmail?search=query&q=is%3Aunread&view=tl&start=0&init=1&zx= 主要参数是search=和q=,它们定义了用户请求的线程集。zx=参数是一个代理缓存破坏者,在这里省略了,以简洁起见。有关更多信息,请参见GmailAdapter.MakeUniqueUrl()。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485