保存Outlook邮件

时间:2015-07-24 19:25:25

标签: vba outlook-vba

我尝试使用以下代码在桌面上的tempfolder上保存Outlook中的选定邮件。

Public Sub SaveMessageAsMsg1()
    Dim oMail As Outlook.MailItem
    Dim objItem As Object
    Dim sPath As String
    Dim dtDate As Date
    Dim sName As String
    Dim enviro As String

    enviro = CStr(Environ("USERPROFILE"))

    For Each objItem In ActiveExplorer.Selection
        If objItem.MessageClass = "IPM.Note*" Then
            Set oMail = objItem
            sName = oMail.Subject
            ReplaceCharsForFileName sName, "-"
            dtDate = oMail.ReceivedTime
            sName = Format(dtDate, "yyyymmdd", vbUseSystemDayOfWeek,vbUseSystem) & Format(dtDate, "-hhnnss", vbUseSystemDayOfWeek, vbUseSystem) & "-" & sName & ".msg"
            sPath = "C:\Users\XBBLC1C\Desktop\TempEmail\"

            Debug.Print sPath & sName

            oMail.SaveAs sPath & sName, olMSG
        End If
    Next
End Sub

问题是某些邮件已在Enterprise Vault中存档,而保存这些邮件objItem.MessageClass会生成值IPM.Note.EnterpriseVault.Shortcut

为了适应这种情况,我尝试在上面的代码中添加一个带有IPM.Note的astrisk。但它没有用。

2 个答案:

答案 0 :(得分:2)

我不确切地知道你要做什么,但行:

If objItem.MessageClass = "IPM.Note*" Then

可能不会进行您希望的比较。虽然' *'在某些情况下是一个通配符,它​​不是像这样的字符串比较。

我建议尝试:

If inStr(objItem.MessageClass, "IPM.Note") <> 0 Then

如果&#34; IPM.Note&#34;在消息类中的任何位置

OR

If InStr(objItem.MessageClass, "IPM.Note") = 1 Then

如果&#34; IPM.Note&#34;在消息类的开头。

同样可以使用

If objItem.MessageClass like "IPM.Note*" Then

如果你想要更接近你最初写作的东西。

答案 1 :(得分:2)

您可以执行OpiesDad建议并检查MessageClass属性,或者您可以检查MailItem.Class属性 - 对于常规MailItem对象,它将是43(OlObjectClass.olMail):

If objItem.Class = 43 Then
  ...