Outlook VBA - 分别保存附件和电子邮件
Outlook VBA - Save Attachments and Email separately
用户将 select 一封电子邮件,我需要将其所有附件保存到一个文件夹 + 将没有附件的电子邮件保存在一个单独的文件夹中。
我已经编写了代码,它似乎工作正常,除了一个大问题:
附件已从原始电子邮件中删除,也已从我的收件箱中删除。删除附件后,我调用了 SaveAs 方法,所以我认为这不应该发生。
这是我写的代码:
Dim objMailItemOriginal As Outlook.MailItem
Dim objMailItemNew As Outlook.MailItem
Dim objNameSpaceUserNS As Outlook.namespace
Dim emailPath$, tmpFolder$
Set objMailItemOriginal = Application.ActiveExplorer.Selection(1)
Set objMailItemNew = Application.CreateItem(olMailItem)
Set objNameSpaceUserNS = Application.GetNamespace("MAPI")
tmpFolder = Environ("Temp") & "\" & Format$(Now, "hh_mm_ss")
MkDir tmpFolder
emailPath = Environ$("Temp") & "\tmpEmail.msg"
Dim attachPath$
For i = objMailItemOriginal.Attachments.Count To 1 Step -1
attachPath = tmpFolder & "\" & objMailItemOriginal.Attachments(i)
objMailItemOriginal.Attachments(i).SaveAsFile attachPath
objMailItemNew.Attachments.Add attachPath
objMailItemOriginal.Attachments.Remove (i)
Next
objMailItemOriginal.SaveAs emailPath
objMailItemOriginal.Close olDiscard
有前景专家吗?
我能想到的唯一方法是保存包含附件的电子邮件,然后从磁盘打开保存的电子邮件并处理其中的附件。
Sub workwithmail(pathfile As string)
Dim oNamespace As Outlook.NameSpace
Set oNamespace = Application.GetNamespace("MAPI")
Dim oSharedItem As Outlook.mailitem
Dim pathfile As String
Set oSharedItem = oNamespace.OpenSharedItem(pathfile)
'''here Comes your code
oSharedItem.Close (olSave)
Set oSharedItem = Nothing
Set oNamespace = Nothing
End Sub
不要删除原始项目的附件。使用 MailItem.SaveAs 将邮件保存为 MSG 文件,使用 Application.Session.OpenSharedItem(returns MailItem 对象)重新打开它并从该对象中删除附件。然后调用 MailItem.Save.
用户将 select 一封电子邮件,我需要将其所有附件保存到一个文件夹 + 将没有附件的电子邮件保存在一个单独的文件夹中。
我已经编写了代码,它似乎工作正常,除了一个大问题:
附件已从原始电子邮件中删除,也已从我的收件箱中删除。删除附件后,我调用了 SaveAs 方法,所以我认为这不应该发生。
这是我写的代码:
Dim objMailItemOriginal As Outlook.MailItem
Dim objMailItemNew As Outlook.MailItem
Dim objNameSpaceUserNS As Outlook.namespace
Dim emailPath$, tmpFolder$
Set objMailItemOriginal = Application.ActiveExplorer.Selection(1)
Set objMailItemNew = Application.CreateItem(olMailItem)
Set objNameSpaceUserNS = Application.GetNamespace("MAPI")
tmpFolder = Environ("Temp") & "\" & Format$(Now, "hh_mm_ss")
MkDir tmpFolder
emailPath = Environ$("Temp") & "\tmpEmail.msg"
Dim attachPath$
For i = objMailItemOriginal.Attachments.Count To 1 Step -1
attachPath = tmpFolder & "\" & objMailItemOriginal.Attachments(i)
objMailItemOriginal.Attachments(i).SaveAsFile attachPath
objMailItemNew.Attachments.Add attachPath
objMailItemOriginal.Attachments.Remove (i)
Next
objMailItemOriginal.SaveAs emailPath
objMailItemOriginal.Close olDiscard
有前景专家吗?
我能想到的唯一方法是保存包含附件的电子邮件,然后从磁盘打开保存的电子邮件并处理其中的附件。
Sub workwithmail(pathfile As string)
Dim oNamespace As Outlook.NameSpace
Set oNamespace = Application.GetNamespace("MAPI")
Dim oSharedItem As Outlook.mailitem
Dim pathfile As String
Set oSharedItem = oNamespace.OpenSharedItem(pathfile)
'''here Comes your code
oSharedItem.Close (olSave)
Set oSharedItem = Nothing
Set oNamespace = Nothing
End Sub
不要删除原始项目的附件。使用 MailItem.SaveAs 将邮件保存为 MSG 文件,使用 Application.Session.OpenSharedItem(returns MailItem 对象)重新打开它并从该对象中删除附件。然后调用 MailItem.Save.