摘要:Duncan Mackenzie 介绍如何构建一种工具,使用 Microsoft .NET Framework 的 System.Net 命名空间来检查 POP3 电子邮件帐户中的未读邮件。
妻子带给我的软件设计灵感
毫无目的的编码就像不带购物清单到商店购物一样。当然,您可能过得很愉快,而且买到了一些东西(某个人在将来的某一天会用到的东西)但却不能解决今天的晚饭问题。这就是我撰写这一专栏的初衷(当然是为了编码,而不是为了购物)。但后来我却把编码的事抛在脑后,写了一些很酷的东西(您不得不照我的思路读下去),因此当最终期限越来越近时,我还没有任何东西可以发表。幸运的是,当我为我的妻子 Laura 设置一台运行 Microsoft? Windows? XP Home 的“新”计算机(其实是我的旧计算机)后,我从中获得了一些灵感。
迄今为止,我从未运行过安装了 XP Home 的计算机(我的计算机通常运行的是连接到域中的 Windows XP Pro),因此 XP Home 的欢迎屏幕(请参见图 1)给我留下了深刻的印象。Laura 也是一样,她甚至还注意到一个我从未发现的功能:如果登录后长时间不使用系统,系统将切换回登录屏幕(或者按 Windows 键 + L),这时屏幕将显示未读的电子邮件数目!这对她来说真是太妙了,因为她可以在经过计算机时快速扫一眼,看看是否有新的电子邮件,而不必输入密码。啊!原本平淡无奇的计算机或电子解决方案却给我的妻子带来这么大的帮助,这种感觉真是好极了!

图 1:欢迎使用 Windows XP!
令人沮丧的是,屏幕上总是显示同样的内容:7 封未读电子邮件,即使 Laura 根本没有任何未读的电子邮件时也是如此。这种设置可太叫人失望了:本来,系统通知您有七封可能会让您非常激动的新邮件,登录后却发现没有任何新邮件。原本欣喜的感觉一扫而光,我要尽快研究研究解决方案。
那七封未读邮件原来在她的 hotmail 收件箱中,而登录屏幕上显示的值是通过具有明确名称的 SHSetUnreadMailCount(英文)API 调用设置的。Laura 现在使用 hotmail 只是接收 MSN? Messenger(英文),因此知道她有多少封未读的 hotmail 邮件并不是很有用。在这个现实面前,我脑子里的那个充满 Microsoft 观念的思维机器立刻飞速运转起来,而且我相信我的朋友们也会如此。突然我有了灵感:我可以创建一个小应用程序,使登录屏幕显示更有用的值。
现在,我要澄清几个细节:Microsoft? Outlook? Express 也可以设置这个值,因此如果使用此应用程序接收电子邮件,则可以设置值,但 Outlook 却不行。我要构建的应用程序应该能够处理几个操作:连接一组 POP3 服务器、获取新邮件的数量并填充相应的注册表值。但是,在应用程序的开发完成之后,我才意识到如果忽略 Outlook,一切努力都将付之东流,因为 Laura 的邮件客户端就是 Outlook,所以我把 Outlook 作为一种附加功能添加到程序中。
根据我的习惯,我将整个工作划分成一系列可以独立完成的任务:
连接 POP3 服务器,并检查当前的邮件数量。
允许您使用主机和用户 ID/密码信息来配置一组 POP3 服务器。
以可靠的方式保存服务器配置信息(包括用户 ID/密码)。
编写在后台运行的应用程序,并使该应用程序每 n 分钟对已配置的每台服务器进行检查。
只要邮件数量发生改变,就更新 Windows XP 登录屏幕设置。
另外,为了更有意思一些,可以使用 Outlook 2000 或 XP 来执行所有相同的任务。
您可以获得全部代码,但我会按顺序介绍各个项目并说明代码是如何在各种情况下工作的。