2011-04-19 54 views
0

我試圖找到一種方式來獲得郵件附件(programaticaly),然後打開它......有人可以告訴我如何做到這一點或點我到正確的方向?獲得的前景/打開郵件附件

+0

你將不得不與.NET中的前景COM /互操作的圖書館合作,你會看到它添加在COM引用,並有大量的資源在網絡上 – 2011-04-19 08:20:45

+0

我使用Microsoft.Office。 Interop.Outlook(用C#),但我不能讓mail.Attachments.Item ......唯一的選擇就是加... – Wolfy 2011-04-19 11:01:08

+0

OK,我的錯誤:),現在它的偉大工程... TNX所有 – Wolfy 2011-04-21 17:49:46

回答

1

這是一個VBA腳本(在Outlook中的宏用),這將循環遍歷當前文件夾中的所有選擇項的所有附件,並將它們保存到磁盤。

它應該讓你開始,我不認爲這會花費太多添加某種進程啓動,而不是保存邏輯吧。

Public Sub SaveAttachments() 

    'Note, this assumes you are in the a folder with e-mail messages when you run it. 
    'It does not have to be the inbox, simply any folder with e-mail messages 

    Dim Exp As Outlook.Explorer 
    Dim Sel As Outlook.Selection 

    Dim AttachmentCnt As Integer 
    Dim AttTotal As Integer 
    Dim MsgTotal As Integer 

    Dim outputDir As String 
    Dim outputFile As String 
    Dim fileExists As Boolean 
    Dim cnt As Integer 

    'Requires reference to Microsoft Scripting Runtime (SCRRUN.DLL) 
    Dim fso As FileSystemObject 

    Set Exp = Application.ActiveExplorer 

    Set Sel = Exp.Selection 
    Set fso = New FileSystemObject 

    outputDir = "C:\Path" 
    If outputDir = "" Then 
    MsgBox "You must pick an directory to save your files to. Exiting SaveAttachments.", vbCritical, "SaveAttachments" 
    Exit Sub 
    End If 

    Dim att As Attachment 

    'Loop thru each selected item in the inbox 
    For cnt = 1 To Sel.Count 
    'If the e-mail has attachments... 
    If Sel.Item(cnt).Attachments.Count > 0 Then 
     MsgTotal = MsgTotal + 1 

     'For each attachment on the message... 
     For AttachmentCnt = 1 To Sel.Item(cnt).Attachments.Count 
     'Get the attachment 

     Set att = Sel.Item(cnt).Attachments.Item(AttachmentCnt) 
     outputFile = att.FileName 

     outputFile = Format(Sel.Item(cnt).ReceivedTime, "yyyy-mm-dd_hhmmss - ") + outputFile 

     fileExists = fso.fileExists(outputDir + outputFile) 

     'Save it to disk if the file does not exist 
     If fileExists = False Then 
      att.SaveAsFile (outputDir + outputFile) 
      AttTotal = AttTotal + 1 
     End If 

     Set att = Nothing 

     Sel.Item(cnt).Close (Outlook.OlInspectorClose.olDiscard) 

     Next 
    End If 
    Next 

    'Clean up 
    Set Sel = Nothing 
    Set Exp = Nothing 
    Set fso = Nothing 

    'Let user know we are done 
    Dim doneMsg As String 
    doneMsg = "Completed saving " + Format$(AttTotal, "#,0") + " attachments in " + Format$(MsgTotal, "#,0") + " Messages." 
    MsgBox doneMsg, vbOKOnly, "Save Attachments" 

    Exit Sub 

ErrorHandler: 

    Dim errMsg As String 
    errMsg = "An error has occurred. Error " + Err.Number + " " + Err.Description 
    Dim errResult As VbMsgBoxResult 
    errResult = MsgBox(errMsg, vbAbortRetryIgnore, "Error in Save Attachments") 
    Select Case errResult 
    Case vbAbort 
     Exit Sub 

    Case vbRetry 
     Resume 

    Case vbIgnore 
     Resume Next 

    End Select 

End Sub