我每天所收到的e-mail中,订阅的电子杂志占了很大的比例。其中既有新闻也有电脑技术或娱乐性文章,加在一起竟有上百封。后来我知道单位里许多人同我一样也喜欢看,而且有的人还订了同样的杂志,所以我就每天收到邮件后把它们整理到局域网上去。只是这么多的邮件,整理起来工作量可不小,怎么解决一下呢?

   这些邮件通常都是HTML格式的,用Outlook通常的方法不能正确的导出,而且分布在许多下层子夹中,导出很麻烦。我在OUTLOOK中,用VBA实现了HTML邮件导出并自动发布到网络上。

   要对邮件箱里的邮件进行操作,首先要取得Outlook MAPI名字空间。可以使用下面的语句:

Dim mobjOutlook As Outlook.NameSpace
   Dim objOutlook As New Outlook.Application
   mobjOutlook=objoutlook.GetNameSpace(“MAPI”)

   用mobjOutlook的GetDefaultFolder方法。可以取得收件箱的MAPIFolder对象:

Dim objFolder As Outlook.MAPIFolder
   ObjFolder=mobjOutlook.GetDefaultFolder(6)

   其中参数6代表收件箱,其他参数的意义如下表:

常量

数值

描述

   OlFolderDeletedItems

3

已删除邮件

OlFolderOutbox

4

发件箱

OlFolderSentMail

5

已发件邮件

olFolderInbox

6

收件箱

OlFolderCalendar

9

日历

OlFolderContacts

10

联系人

olFolderJournal

11

日记

olFolderNotes

12

便笺

olFolderTasks

13

任务

olFolderDrafts

16

草稿

   在objFolder的属性包含邮件项集合即ITEMS,也包含所有下一级子夹的集合Folders。

   对每一个邮件,首先取得邮件的接收时间,如果是当天收到的就创建并打开一个HTML文件,以其主题Subject为文件名,把它的HTML格式的内容,即HTMLBody属性的值写入这个文件,然后关闭并处理下一个。

   对下一级子夹,用递归调用的方式,可以遍历收件箱中每一层夹中的所有邮件。在生成邮件文件时,还同时生成索引文件。

完整的程序如下:

  

Private mobjOutlook As Outlook.NameSpace
   Private fs, fo
   Private Sub GetOutlook()
   Dim objOutlook As New Outlook.Application
   Set mobjOutlook = objOutlook.GetNamespace("MAPI")
   End Sub
   Sub ListMailFolders(objFolder As Outlook.MAPIFolder)
   Dim objItem As Object
   Dim f
   Dim str1, str2, str3 As String
   For Each objItem In objFolder.Items
   If (FormatDateTime(objItem.ReceivedTime, vbShortDate) = FormatDateTime(Date, vbShortDate)) Then
   str2 = objItem.Subject
   str1 = "j:wwwrootnews" + str2 + ".htm"
   Set f = fs.OpenTextFile(str1, 2, True, TristateFalse)
   f.Write objItem.HTMLBody
   f.Close
   str3 = "< p>< a href='" + objItem.Subject + ".htm'>" + objItem.Subject + "< /a>< /p> "
   fo.Write str3
   End If
   Next
   Dim objf As Outlook.MAPIFolder
   For Each objf In objFolder.Folders
   ListMailFolders objf
   Next
   Set objItem = Nothing
   End Sub
   Sub ListMailItems(longFolder As Long)
   Dim objFolder As Outlook.MAPIFolder
   Dim f
   If mobjOutlook Is Nothing Then
   GetOutlook
   End IF
   Set objFolder = mobjOutlook.GetDefaultFolder(longFolder)
   ListMailFolders objFolder
   End Sub
   Private Sub storemail()
   Set fs=CreateObject(“Scripting.FileSystemObject”)
   Set fo=fs.OpenTextFile(“j:wwwrootnewsindex.html”,2,True,TristateFalse)
   fo.Write “< HTML>< HEAD>< META content=’text/html; charset=gb2312’ http-equiv=Content-Type> < TITLE>< /TITLE>< /HEAD>< BODY>
   ListMailItems(6)
   fo.Write “< /BODY>< /HTML>”
   fo.Close
   End Sub

   在Outlook2000中创建一个新的宏,用VB编辑器编辑它,把上面的程序拷贝到同一模块,注意把生成文件的目录名改为自己WEB服务器上的WWW服务根文件夹名。在宏中调用storemail,执行宏,就可以导出当天收到的所有邮件。

   所有指向这些HTML文件的链接放在同一目录下的index.html中,这样每个人都可以在网上浏览这些文章了。