每月自动将Outlook收件箱中的特定电子邮件保存在硬盘上。
我希望每个月都可以自动保存来自Outlook收件箱的特定电子邮件,这些电子邮件的关键字为“批准”或“已批准”,并且不区分大小写并由特定发件人发送。
Option Explicit
Sub outlooksavefile()
Dim o As Outlook.Application
Set o = New Outlook.Application
Dim ons As Outlook.Namespace
Set ons = o.GetNamespace("mapi")
Dim fol As Outlook.Folder
Set fol = ons.GetDefaultFolder(olFolderInbox).Folders("Test")
Dim omail As Outlook.MailItem
Set omail = o.CreateItem(olMailItem)
For Each omail In fol.Items
omail.SaveAs "H:\2019" & omail.Subject & ".msg"
Next omail
End Sub
答案 0 :(得分:0)
通过检查Class
,您必须确保文件夹中找到的每个项目都是电子邮件。
关于错误:可能您不允许在此处书写,或者-更可能的是-文件系统中禁止电子邮件主题中的某些字符。我添加了一些代码来替换禁止的字符。
如果您遍历每封电子邮件,则无需在CreateItem
之前再生成一封新电子邮件。
Option Explicit
Sub outlooksavefile()
Dim o As Outlook.Application
Set o = New Outlook.Application
Dim ons As Outlook.NameSpace
Set ons = o.GetNamespace("mapi")
Dim fol As Outlook.Folder
Set fol = ons.GetDefaultFolder(olFolderInbox).Folders("Test")
Dim omail As Object
For Each omail In fol.Items
If omail.Class = olMail Then ' olMail = 43
Debug.Print omail.Sender
Debug.Print omail.Subject
Debug.Print omail.Sender
Debug.Print Left(omail.Body, 20)
omail.SaveAs Environ("USERPROFILE") & "\Documents\" & _
AllowedChars(omail.Subject) & ".msg", olMSG ' olMSG = 3
End If
Next omail
End Sub
Private Function AllowedChars(ByRef s As String) As String
Dim i As Long
Dim myChar As String
AllowedChars = s
For i = 1 To Len(AllowedChars)
myChar = Mid$(AllowedChars, i, 1)
If myChar Like "[<>:""/\|?*]" Or Asc(myChar) < 32 Then
Mid$(AllowedChars, i, 1) = "_"
End If
Next i
End Function
关于您的问题2:请在运行此命令后提出另一个问题。
关于问题3:我添加了一些调试信息,以查看发件人和其他电子邮件项目的存储方式。基于此,您可能会生成一些If条件。
答案 1 :(得分:0)
您有责任确保文件名不包含无效字符(例如“:”或“ \”)-您的代码按原样使用消息主题。