从Outlook中提取正文文本

时间:2013-09-13 22:15:29

标签: outlook-vba

我正在使用vba宏来提取每天在指定电子邮件地址发送给我的电子邮件中包含的文本 我想生成一个vba宏,当它到达时触发。 文本需要保存到文本文件“c:\ temp \ email.txt”

我已经整理了各种代码,但没有真正有效。

有人可以建议使用简单的vba方法吗?

1 个答案:

答案 0 :(得分:2)

您可能会发现我对How to copy Outlook mail message into excel using VBA or Macros的回答为您提供了一个开始。

该答案显示了如何运行收件箱从每封电子邮件中提取所选信息,包括发件人,主题和文本正文。以此为开始,您可以编写一个宏,在收件箱中搜索感兴趣的电子邮件并将其导出到文本文件。

你真正想要的是一个事件例程,当项目被添加到收件箱时触发,但是更高级,所以得到一个搜索收件箱工作的宏。

Outlook拥有强大的安全系统,因此您在运行搜索宏时会发现必须授予其访问电子邮件的权限。您可以对自己的宏进行自我认证,但我从未完成过阻止“宏正在访问您的电子邮件”消息的最后一步。如果您每天运行一次宏,则授予权限不是问题,但如果您想要事件例程,则必须每10分钟确认一次权限。

访问以下网站以获取相关信息或在其他地方寻求帮助:

我可以在第一个工作中获得指示,但不能在第二个工作中获得指示。

如果您可以破解管理受信任的根证书问题,添加事件例程并不困难。在Outlook的Visual Basic编辑器中,项目资源管理器将如下所示:

-  Project1(VbaProject.OTM)
   +  Microsoft Office Outlook Objects
   +  Forms
   +  Modules

根据需要点击加号:

-  Project1(VbaProject.OTM)
   -  Microsoft Office Outlook Objects
      *  ThisOutlookSession
   +  Forms
   +  Modules

选择ThisOutlookSession。这就像一个模块,但有额外的特权。将下面的代码复制到ThisOutlookSession,您就可以了解所寻找的事件例程。

Option Explicit
Public WithEvents MyNewItems As Outlook.Items
Private Sub Application_MAPILogonComplete()

  Dim NS As NameSpace

  Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")

  With NS
    Set MyNewItems = NS.GetDefaultFolder(olFolderInbox).Items
  End With

End Sub
Private Sub myNewItems_ItemAdd(ByVal Item As Object)

  Dim text As String

  Debug.Print "--------------------"
  Debug.Print "Item added to Inbox"
  With Item
    Debug.Print "Subject: " & .Subject
    Debug.Print "Sender name: " & .SenderName
    Debug.Print "Sender address: " & .SenderEmailAddress
    text = Mid(.Body, 1, 100)
    text = Replace(text, vbLf, "{lf}")
    text = Replace(text, vbCr, "{cr}")
    text = Replace(text, vbTab, "{tb}")
    text = Replace(text, Chr$(160), "{nbsp}")
    Debug.Print "Start of body: " & text
  End With