2013-04-22 3 views
2

Сначала я создать электронную почту через Outlook:VBA извлечь HTMLBody из Outlook Mail

Sub CreateHTMLMail() 
'Creates a new e-mail item and modifies its properties. 

Dim olApp As Outlook.Application 
Dim objMail As Outlook.MailItem 
Set olApp = Outlook.Application 
'Create e-mail item 
Set objMail = olApp.CreateItem(olMailItem) 

Dim sHTML_Open    As String 
Dim sHTML_Introduction  As String 
Dim sHTML_Goodbye   As String 
Dim sHTML_Close    As String 
Dim sHTML_Process_Date  As String 
Dim sHTML_Processor   As String 
Dim sHTML_Issuer   As String 
Dim sHTML_Details   As String 

Dim sHTML_Body    As String 

sHTML_Open = "<HTML><BODY>" 
sHTML_Introduction = "Hi team,<BR/><BR/>" & _ 
         "Data is ready to process. Please find details as below.<BR/>" 
sHTML_Process_Date = "<P ID='PROCESSDATE'>28 February 2013</P>" 
sHTML_Processor = "<P ID='PROCESSOR'>AKSHAY</ID></P>" 
sHTML_Issuer = "<P ID='ISSUER'>DATAGROUP.COM</ID></P>" 
sHTML_Details = "<P ID='DETAILS'>" & _ 
        "<UL>" & _ 
         "<LI>Fimta23456 09:00:00 flor345</LI>" & _ 
         "<LI>Fimta23456 09:00:00 flor345</LI>" & _ 
        "</UL>" & _ 
       "</P><BR/>" 
sHTML_Goodbye = "Thanks" 
sHTML_Close = "</BODY></HTML>" 

sHTML_Body = sHTML_Open & sHTML_Introduction & sHTML_Process_Date & sHTML_Processor & sHTML_Issuer & _ 
      sHTML_Details & sHTML_Goodbye & sHTML_Close 

With objMail 
    'Set body format to HTML 
    .BodyFormat = olFormatHTML 
    .To = "Kim Gysen" 
    .Subject = "data remit file" 
    .HTMLBody = sHTML_Body 
    .Display 
End With 
End Sub 

через код, я хочу, чтобы получить значение, основанное на ID. Это казалось самым чистым способом для меня, я не особенно люблю «расщепленный» метод, потому что это своего рода жесткое кодирование; не очень динамичный и ненадежный.

К сожалению, когда я извлекать HTML тело, я не могу получить исходный HTML, так как она искажается Outlook:

Sub Get_OL() 

Dim oFolder     As MAPIFolder 
Dim oItem     As Variant 

Dim sHTML_Body    As String 
Dim sHTML_Process_Date  As String 
Dim sHTML_Processor   As String 
Dim sHTML_Issuer   As String 
Dim sHTML_Details   As String 

Dim oExcel    As Object 
Dim oBook    As Workbook 

Set oExcel = CreateObject("Excel.Application") 
Set oBook = oExcel.Workbooks.Add 


'Access the outlook inbox folder 

Set oFolder = GetNamespace("MAPI").PickFolder 

'On error resume next usually not to use, but feteching emails may give unexpected errors 
On Error Resume Next 
For Each oItem In oFolder.Items 
    If TypeOf oItem Is Outlook.MailItem Then 
     If oItem.Subject Like "*data remit file*" Then 
      'Turn off on error resume next asap 
      On Error GoTo 0 
      sHTML_Body = oItem.HTMLBody 
      Debug.Print sHTML_Body 

      Exit For 
     End If 
    End If 
Next oItem 

End Sub 

На Debug.Print, это то, что я получаю (только поставив последнюю строку Формат):

</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Hi team,<br><br>Data is ready to process. Please find details as below.<br><br><o:p></o:p></p><p>28 February 2013<o:p></o:p></p><p id=PROCESSOR>AKSHAY<o:p></o:p></p><p id=ISSUER>DATAGROUP.COM<o:p></o:p></p><ul type=disc><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1'>Fimta23456 09:00:00 flor345<o:p></o:p></li><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1'>Fimta23456 09:00:00 flor345<o:p></o:p></li></ul><p class=MsoNormal><br>Thanks<o:p></o:p></p></div></body></html> 

Я хотел бы получить исходный HTML-код, который я ввел в HTML-код.

+0

Адрес электронной почты, где это письмо находится между 'CreateHTMLMail' и когда вы смотрите на него? Есть шаги, которые отсутствуют в вашем коде выше. – enderland

+0

Извините за поздний ответ. Я создаю почту с CreateHTMLMail, я отправил ее себе, затем я получаю ее с помощью Get_OL. Мне бы хотелось получить тот же HTML-код, который я изначально создал. – Trace

+0

Причина, по которой я прошу, - это проверить ваш точный код и получить HTML-код именно так, как он был создан. Вы на бирже? Или использовать что-то вроде gmail и т. Д.? – enderland

ответ

1

2 пути:

1) разбор текста - несколько вещей, чтобы сделать (не рекомендуется: жесткое кодирование)

Все, что вам нужно, это parse text, но MSDN показывает, как это сделать он использует InStr функция. Я бы настоятельно рекомендовал использовать RegEx для разбора html-текста. Примечание: ссылка на MS VBScript Регулярные выражения x.x.

Simple Regular Expression Tutorial for Excel VBA

2) использованием UserProperites объекта MailItem (рекомендуется)

Если MailItem не содержит ваш Свойс (у) х годов прошлого века, чем там нечего делать;)

How to: Add custom property

+0

Спасибо за ваш ответ, хотя я больше не имею дело с этой проблемой. Возможно, ваш ответ может быть полезен для других людей. – Trace

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