簡體   English   中英

Outlook VBA - 分別保存附件和電子郵件

[英]Outlook VBA - Save Attachments and Email separately

用戶將選擇一封電子郵件,我需要將其所有附件保存到一個文件夾+該電子郵件沒有附件在一個單獨的文件夾中。

我已經編寫了代碼,它似乎工作正常,除了一個大問題:

附件也會從我的收件箱中從原始電子郵件中刪除。 刪除附件后,我正在調用 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 重新打開它(返回 MailItem 對象)並從該對象中刪除附件。 然后調用 MailItem.Save。

要減小沒有附件的文件大小,您可以這樣做:

oSharedItem.SaveAs "filePath here"
oSharedItem.Close olDiscard

然后附件還在outlook explorer的原始郵件中,保存的文件變小了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM