我需要Outlook VBA上的一些幫助。從無法投遞的電子郵件正文中提取文本字符串到excel
我正試圖在Outlook中編寫一個宏,用於從每個單獨的undeliverables電子郵件正文中提取電子郵件地址。
有數以百計的電子郵件傳遞失敗,所以它會更好,如果他們可以自動提取比手動複製和粘貼。
電子郵件正文是這樣的:
----------------------------電子郵件---- ------------------------
傳遞失敗這些收件人或組:
[email protected](XXXX @ XXXXXX.XXX)
...不需要信息...
...沒必要信息...
------------------------ ----電子郵件-----------------------------
我是一個完全的Outlook VBA新手,所以大量的搜索和多徑後,我終於想出了下面的代碼:
Sub Test()
Dim myFolder As MAPIFolder
Dim Item As Outlook.MailItem 'MailItem
Dim xlApp As Object 'Excel.Application
Dim xlWB As Object 'Excel.Workbook
Dim xlSheet As Object 'Excel.Worksheet
Dim Lines() As String
Dim i As Integer, x As Integer, P As Integer
Dim myItem As Variant
Dim subjectOfEmail As String
Dim bodyOfEmail As String
'Try access to excel
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If xlApp Is Nothing Then
Set xlApp = CreateObject("Excel.Application")
xlApp.Application.Visible = True
If xlApp Is Nothing Then
MsgBox "Excel is not accessable"
Exit Sub
End If
End If
On Error GoTo 0
'Add a new workbook
Set xlWB = xlApp.Workbooks.Add
xlApp.Application.Visible = True
Set xlSheet = xlWB.ActiveSheet
Set myFolder = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
For Each myItem In myFolder.Items
subjectOfEmail = myItem.Subject
bodyOfEmail = myItem.Body
'Search for Undeliverable email
If bodyOfEmail Like "*Delivery*" & "*failed*" And indexOfEmail Like "*Undeliverable*" Then
x = x + 1
'Extract email address from email body
Lines = Split(myItem.Body, vbCrLf)
For i = 0 To UBound(Lines)
P = InStr(1, Lines(i), "@", vbTextCompare)
Q = InStr(1, Lines(i), "(", vbTextCompare)
If P > 0 Then
xlApp.Range("A" & x) = Trim$(Mid$(Lines(i), 1, Q - 1)) 'extract the email address
Exit For
End If
Next
End If
Next
End Sub
它完美地工作在我測試的電子郵件收件箱,開闢一個Excel工作表,並列出每個PA目標電子郵件中的特定電子郵件地址。
但是,當我在我的工作電子郵件帳戶上運行此代碼時,它並沒有給我一個東西。然後我發現它在閱讀「Undeliverables」電子郵件時遇到了麻煩,而且每次我運行它之後都會發生奇怪的事情,其中一個無法收集的電子郵件變成了繁體中文字符,根本無法讀取。
象下面這樣:
格浴㹬格慥㹤窪瑥瑨灴攭留癩∽潃瑮湥祔數•潣瑮湥㵴琢硥⽴瑨汭※檔牡敳㵴獵愭捳楩㸢⼼敨摡㰾潢祤ാ㰊㹰戼㰾潦瑮撓汯牯∽〣〰㘰:猠穩㵥㌢•慦散∽牁慩≬䐾汥癩牥⁹慨慦汩摥琠桴獥敲楣楰湥獴漠牧畯獰㰺是湯㹴⼼㹢⼼㹰晝湯⁴潣潬
我喜歡這種感覺代碼的工作就只能轉發無法投遞的郵件,這在我的測試郵件收件箱。但它從未從Microsoft Outlook發送的原始無法投遞的電子郵件中讀取並將這些電子郵件逐一轉換爲中文字符。
我用google搜索了一下,看起來他們是Outlook中的一些錯誤,因爲發送失敗的郵件。你們有沒有人知道如何解決這個問題?或者有什麼方法可以改進我的代碼?我願意改變任何事情。
電子郵件是否來自同一個發件人?哪個辦公室正在使用? – 0m3r
@ 0m3r其中大部分來自Microsoft Outlook,但其中一些來自[email protected] - 各種服務器,如hotmail或其他公司域名。我正在使用Microsoft Office 365 ProPlus,我認爲它的版本是1609. – dayaoyao