Получить первую строку текста из тела письма с Outlook VB - PullRequest
0 голосов
/ 25 апреля 2018

Я украл функцию где-то в сети, которая позволяет мне брать HTML из буфера обмена и помещать в электронную почту Outlook 2013.

Это прекрасно работает, но я также хотел бы изменить его так, чтобы он извлекал первую строку текста из тела письма и использовал ее в качестве строки темы.

Таким образом, все может быть включено в HTML.Однако у меня почти нет опыта работы с VB, и, проведя некоторое время в Интернете, изучая API и документацию, я все еще не могу понять это.Вот что у меня так далеко.

Sub PrependClipboardHTML()
    Dim email As Outlook.MailItem
    Dim cBoard As DataObject
    Dim lines() As String

    Set email = Application.ActiveInspector.CurrentItem
    Set cBoard = New DataObject

    cBoard.GetFromClipboard

    email.HTMLBody = cBoard.GetText + email.HTMLBody
    lines = Split(email.Body, vbNewLine)
    ' this does not produce anything
    email.subject = lines(0)

    'remove first line of email

    Set cBoard = Nothing
    Set email = Nothing

End Sub

Повторюсь, я хочу удалить первую строку тела письма после форматирования и использовать его в качестве темы.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Я провел еще несколько исследований и перечитал API. В конце концов я понял это. Мое решение опубликовано ниже. Спасибо за помощь от других комментаторов.

Sub PrependClipboardHTML()
   Dim email As Outlook.MailItem
   Dim cBoard As DataObject

   Set email = Application.ActiveInspector.CurrentItem
   Set cBoard = New DataObject

   cBoard.GetFromClipboard

   Dim sText As String
   Dim headerStart As Integer
   Dim headerEnd As Integer
   Dim HTMLPre As String
   Dim HTMLPost As String
   Dim subject As String
   Const headerStartLen = 20
   Const headerEndStr = "</h2>"

   sText = cBoard.GetText
   headerStart = InStr(sText, "<h2 id=")

   If headerStart > 0 Then
       headerEnd = InStr(headerStart, sText, headerEndStr)
       If headerEnd > 0 Then
           subject = Mid(sText, _
               headerStart + headerStartLen, _
               headerEnd - headerStart - headerStartLen)
           HTMLPre = Mid(sText, 1, headerStart - 1)
           HTMLPost = Mid(sText, headerEnd + Len(headerEndStr))
       End If
   End If

   email.HTMLBody = HTMLPre + HTMLPost + email.HTMLBody
   If Len(email.subject) = 0 Then
       email.subject = subject
   End If

   Set cBoard = Nothing
   Set email = Nothing

End Sub
0 голосов
/ 25 апреля 2018

Это быстро и грязно, нужно потратить несколько минут здесь и там, чтобы построить, но что-то вроде этого должно помочь вам начать:

Public Sub PrependClipboardToHTML()
    Dim email As Outlook.MailItem
    Dim cBoard As DataObject
    Dim cText, strLine As String
    Dim strArray() As String
    
    Set email = Application.CreateItem(olMailItem)
    Set cBoard = New DataObject
    cBoard.GetFromClipboard
    cText = cBoard.GetText
    strArray = Split(cText, vbCrLf)
    strLine = CStr(strArray(0))
    
     With email
      .To = "someone@domain.com"
      .Subject = strLine
      .BodyFormat = olFormatHTML ' olFormatPlain == send plain text message
      .HTMLBody = cText + email.HTMLBody
     
      .Display
    End With
    
    Set email = Nothing
    Set cBoard = Nothing

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...