2013-03-27 3 views
2

Я попытался создать сценарий для получения электронных писем по мере их поступления, переформатировать их и затем переслать по электронной почте в теле, но я не могу понять, как читать тело письма. В настоящее время у меня есть:Outlook VBA Script для входящих сообщений

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

ответ

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 - ответ на просьбу: –

+0

Requestee_Email - Адрес электронной почты запрашивающего пользователя: office_requesting - Запрошенный офис: Большое вам спасибо за помощь в этом, вы были здорово! –

+0

@AlexCarter Возможно, вы захотите рассмотреть вопрос о новом вопросе в качестве продолжения, чтобы получить эти детали; это решение немного больше, чем то, что я представил до сих пор. Тем не менее, вы должны иметь возможность сканировать через 'HTMLBody' вашего' MailItem' с помощью 'InStr()', как у меня в 'GetAddressFromMessage'. Разница заключается в том, чтобы вернуть данные в HTML-код. Пожалуйста, отправьте еще один вопрос, и я посмотрю, с чем я могу помочь. – Gaffi

Смежные вопросы