2013-03-27 36 views
2

我試圖製作一個腳本來收取電子郵件,因爲他們進來,重新格式化他們,然後轉發到身體的電子郵件,但我不知道如何閱讀電子郵件正文。我目前有:收到消息的Outlook VBA腳本

Sub Confirmation() 
myMessage = "You recently made a request on the IT website, the details of your 
request can be seen below:" & vbCr & vbCr & "Thank you, " & vbCr & "IT Support" 

Dim itmOld As MailItem, itmNew As MailItem 

Set itmOld = ActiveInspector.CurrentItem 
Set itmNew = itmOld.Forward 

itmNew.Body = myMessage & vbCr & vbCr & itmOld.Body 
itmNew.Subject = "IT Web Request Confirmation" 
itmNew.Display 

Set itmOld = Nothing 
Set itmNew = Nothing 
End Sub 

這打開電子郵件向它添加一些文本並轉發它。

我想要腳本打開電子郵件,從身體中讀取電子郵件地址,將其用作字段並將現有電子郵件重新格式化爲更好的格式。 這是從電子郵件中的HTML:

<html><body><br /><br /><table><tr><td><b>Fullname: </b></td><td>Alex Carter</td></tr><tr><td><b>OPS_Access: </b></td><td>Yes</td></tr><tr><td><b>Email_Account_Required: </b></td><td>Yes</td></tr><tr><td><b>Office_Email_Required: </b></td><td>Yes</td></tr><tr><td><b>Website_Access_Required: </b></td><td>Yes</td></tr><tr><td><b>Web_Access_Level: </b></td><td>Staff</td></tr><tr><td><b>Forum_Access_Required: </b></td><td>Yes</td></tr><tr><td><b>Date_Account_Required: </b></td><td>03/08/2013</td></tr><tr><td><b>Requested_By: </b></td><td>Alex Carter</td></tr><tr><td><b>Requestee_Email: </b></td><td>[email protected]</td></tr><tr><td><b>Office_Requesting: </b></td><td>Swindon</td></tr></table></body></html> 

這表明,電子郵件進入現場是表的第10行中,但我也不太清楚如何去從身體選擇此? 我該如何去閱讀身體,重新格式化它,然後選擇被請求者的電子郵件並將其用作字段?

在此先感謝!

+1

你有控制在傳入電子郵件的一代?如果是這樣,您可以在感興趣的地址周圍製作自己的標籤,並搜索相關信息。 – PowerUser 2013-03-27 18:14:42

回答

0

這應該幫助您開始(修改代碼),但你必須要更具體的方面,你想什麼格式的改進,看看...:

Sub Confirmation() 
    myMessage = "You recently made a request on the IT website, the details of your request can be seen below:" & vbCr & vbCr & "Thank you, " & vbCr & "IT Support" 
    Dim sAddress As String ' Well need this to store the address 
    Dim itmOld As MailItem, itmNew As MailItem 

    Set itmOld = ActiveInspector.CurrentItem 
    Set itmNew = itmOld.Forward 

    sAddress = GetAddressFromMessage(itmOld) ' This is our new function 
    If Len(sAddress) > 0 Then 
     itmNew.To = sAddress ' If our new function found a value apply it to the To: field. 
     '!!! This should be checked as a valid address before continuing !!! 
    End If 

    itmNew.Body = myMessage & vbCr & vbCr & itmOld.Body 
    itmNew.Subject = "IT Web Request Confirmation" 
    itmNew.Display 

    Set itmOld = Nothing 
    Set itmNew = Nothing 
End Sub 

Private Function GetAddressFromMessage(msg As MailItem) As String 
    ' Grabs the email from the standard HTML form described in the SO question. 
    Dim lStart As Long 
    Dim lStop As Long 
    Dim sItemBody As String 
    Const sSearchStart As String = "Requestee_Email: </b></td><td>" ' We will look for these tags to determine where the address can be found. 
    Const sSearchStop As String = "</td>" 

    sItemBody = msg.HTMLBody ' Read the body of the message as HTML to retain TAG info. 

    lStart = InStr(sItemBody, sSearchStart) + Len(sSearchStart) 
    If lStart > 0 Then ' Make sure we found the first TAG. 
     lStop = InStr(lStart, sItemBody, sSearchStop) 
    End If 

    GetAddressFromMessage = vbNullString 

    If lStop > 0 And lStart > 0 Then ' Make sure we really did find a valid field. 
     GetAddressFromMessage = Mid(sItemBody, lStart, lStop - lStart) 
    End If 

End Function 
+0

非常感謝,目前這個工作非常好,我可以將它設置爲一個自定義腳本,以便在規則嚮導中使用而不做任何更改? 我想在電子郵件中添加邊框當前表周圍,更改字段名稱如下: 全名 - 用戶名: OPS_Access - 訪問dhOps要求: Email_Account_Required - 電子郵件帳戶所需: Website_Access_Required - 網站訪問所需: Web_Access_Level - 的網站訪問級別: Forum_Access_Required - 論壇訪問所需: Date_Account_Required - 需要時間賬: Requested_By - 通過要求: – 2013-03-28 11:12:06

+0

REQUESTEE_EMAIL - 請求用戶的電子郵件: office_requesting - 請求的辦公室: 非常感謝你對此的幫助,你一直很棒! – 2013-03-28 11:12:45

+0

@AlexCarter您可能想考慮開放一個新問題作爲後續獲取這些細節;該解決方案比迄今爲止提供的要多一點。但是,您應該可以像'GetAddressFromMessage'中那樣使用InStr()掃描MailItem的'HTMLBody'。不同之處在於將數據重新放入HTMLBody中。請張貼另一個問題,我會看看我可以提供哪些幫助。 – Gaffi 2013-03-28 11:44:35