2015-03-25 9 views
2

Пользователь выберет адрес электронной почты, и мне нужно сохранить все его вложения в папку + этот адрес электронной почты без вложения в отдельной папке.Outlook VBA - Сохранение вложений и электронной почты отдельно

Я написал код, и это, кажется, работает хорошо, за исключением одного большого выпуска:

Вложений удаляются из оригинальной электронной почты также из моей папки Входящие. После удаления вложений я вызываю метод 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 

Любой прогноз эксперта, пожалуйста?

ответ

1

Единственный способ, о котором я могу думать, это сохранить электронную почту, включая вложения, а затем открыть сохраненный E-Mail с диска и работать с вложениями там.

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 
+0

Спасибо! Это сработало – Tejas

1

Не удалять вложения из оригинала. Сохраните сообщение в виде файла MSG с помощью MailItem.SaveAs, снова откройте его с помощью Application.Session.OpenSharedItem (возвращает объект MailItem) и удалите вложения из этого объекта. Затем вызовите MailItem.Save.

+0

Спасибо! Это сработало. – Tejas

Смежные вопросы