2011-04-19 51 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