2016-09-06 66 views
0

下面是從Outlook郵件中下載附件的腳本。下載具有相同名稱的附件而不覆蓋

Public Sub SaveAttachmentsToDisk(MItem As Outlook.MailItem) 
    Dim oAttachment As Outlook.Attachment 
    Dim sSaveFolder As String 
    Dim dateFormat 

    dateFormat = Format(Now, "yyyy-mm-dd") 
    sSaveFolder = "c:\My\temp\" 
    For Each oAttachment In MItem.Attachments 
     oAttachment.SaveAsFile sSaveFolder & oAttachment.DisplayName 
    Next 
End Sub 

它僅在附件名稱不同時下載並存儲在我的代碼中提及的路徑中。

例如,我收到附件爲'List.csv'的郵件。我用同樣的名字收到了大約10次的郵件。

但是隻有一個文件(最近一個)被保存在路徑中。


最終代碼爲我工作。

Public Sub saveAttachtoDisk(itm As Outlook.MailItem) 
    Dim objAtt As Outlook.Attachment 
    Dim saveFolder As String 
    Dim dt30daysAgo As Date 

    dt30daysAgo = DateAdd("d", -30, Now) 
    saveFolder = "c:\My\temp" 

    For Each objAtt In itm.Attachments 
     If itm.ReceivedTime > dt30daysAgo Then 
      If objAtt.FileName <> "list.csv" Then 
       objAtt.SaveAsFile saveFolder & "\" & objAtt.FileName 
      Else 
       objAtt.SaveAsFile saveFolder & "\" & itm.Subject & objAtt.FileName 
      End If 
     End If 
    Next 
End Sub 
+0

如果這些附件具有相同的名稱,我猜測它們將被覆蓋,請嘗試在文件名的末尾添加類似計數器的內容。或者可能是電子郵件的發送日期 – gizlmo

+0

因此,請在保存前檢查文件是否存在,如果確實存在,則更改副本的文件名。 –

回答

1

您只是覆蓋具有相同名稱的任何現有文件。

一個非常簡單的解決方案是在保存之前將當前日期/時間追加到文件名。

要僅從過去30天內下載附件,請在過程的開始處添加一個檢查以比較郵件的ReceivedTime與30天前的日期,並在收到時間較短時退出該過程。

Public Sub SaveAttachmentsToDisk(MItem As Outlook.MailItem) 
    Dim oAttachment As Outlook.Attachment 
    Dim sSaveFolder As String 
    Dim dt30daysAgo As Date 

    dt30daysAgo = DateAdd("d", 30, Now) 

    If MItem.ReceivedTime < dt30daysAgo Then Exit Sub 

    sSaveFolder = "c:\My\temp\" 
    For Each oAttachment In MItem.Attachments 
     oAttachment.SaveAsFile sSaveFolder & Format(Now, "YYYY-MM-DD_hh-nn-ss") & oAttachment.DisplayName 
    Next 
End Sub 

但在ReceivedTime檢查是沒有得到很好的放置,你最好應該做這個的調用過程。

+0

謝謝。它的工作。我附上了郵件的主題。但是,如何僅從最近30天內下載附件。 – Azarudeen

+0

@Azarudeen您的意思是隻有在過去30天內發送的電子郵件的附件? –

+0

是的,我在一個月內做了這個任務。所以我不需要上個月已經下載的附件。 – Azarudeen

相關問題