2017-09-04 136 views
1

我需要提取Outlook電子郵件並將其用發件人電子郵件地址的一部分(在「@」之後和「.com」之前)命名。我的代碼工作正常,但對於重命名部分,一些文件沒有正確分配,尤其是線程內的電子郵件。過去兩週我曾嘗試尋找解決方案,但未能如願。希望有人能幫我解決這個問題。謝謝!提取/分配錯誤的發件人電子郵件地址

[已更新]: 在一個線程內:它是從原始電子郵件開始的所有後續回覆的運行列表。

我已經編寫了代碼將電子郵件提取到指定位置,並且在提取後,該電子郵件應該被命名爲「公司的名稱_日期時間received_title電子郵件」。用戶名假設從發件人電子郵件地址中提取。例如,如果我收到來自[email protected]的電子郵件,主題標題爲「項目」,當我運行提取時,重命名方式應爲「公司A_12-08-2017 09:30 AM_Project」。

但是,使用這個當前的代碼,一些電子郵件將被命名爲不同的公司名稱,特別是線程中的電子郵件。例如,[email protected]發送標題爲「項目」的電子郵件,我([email protected])回覆,標題現在變成「RE:Project」。當我運行提取時,電子郵件「項目」的電子郵件重命名方式是正確的,而對於電子郵件「RE:Project」,重命名結果竟然是「companyC_datetime received_RE:Project」,公司C甚至不存在於該電子郵件中。 (公司C來自其他電子郵件)。

Set SubFolder = OutlookApp.Session.GetFolderFromID(EntryID(i), StoreID(i)) 
    On Error Resume Next 
    For j = 1 To SubFolder.Items.Count 
     Set MItem = SubFolder.Items(j) 
     strEmail = Split(SubFolder.Items(j).SenderEmailAddress, "@")(1) 
     If (InStr(1, strEmail, ".") > 0) Then 
      strFullName = Split(strEmail, ".")(0) 
     End If 
     StrReceived = Format(MItem.ReceivedTime, "dd-mm-yyyy H.MMAMPM") 
     strSubject = MItem.Subject 
     'Rename file as Bank name_Date_Title 
     StrName = StripIllegalChar(strSubject) 
     StrFile = StrSaveFolder & strFullName & "_" & StrReceived & "_" & StrName & ".msg" 
     StrFile = Left(StrFile, 256) 
     MItem.SaveAs StrFile, 3 
    Next j 
    On Error GoTo 0 
Next i 
+0

請編輯問題,並寫下你過去兩週試過的東西。同時解釋你的意思是「在一個線程內」。請提供所需輸入和匹配輸出的例子。最後,請閱讀:https://stackoverflow.com/help/mcve –

+1

@MaciejJureczko我上面編輯了我的問題。謝謝! – Cheese

回答

0

On Error Resume Next是針對預期的錯誤。

我建議有一個意外的錯誤,可能當MItem對象不是mailitem。

如果是這樣,這條線會失敗。

strEmail = Split(SubFolder.Items(j).SenderEmailAddress, "@")(1) 

現在由於誤操作錯誤繼續下一步,您沒有機會修復錯誤。 strEmail仍然是錯誤發生之前的狀態。

Dim MItem as object 
If MItem.class = olMail then 
相關問題