Как я могу ответить более раннему человеку в цепочке переписки?

Мои коллеги часто пересылают мне электронные письма, чтобы ответить на более раннее лицо в цепочке. Обычно я нажимаю вперед, а затем настраиваю свой ответ.

Я работаю над макросом VBA, который будет

  1. Удалить сообщение моего коллеги
  2. Скопируйте новый адрес электронной почты в поле «Кому», а затем
  3. Вставьте предварительно напечатанное сообщение, например

"Здравствуйте,
и т.д.
С уважением"

Я собрал шаг 1 с помощью другого пользователя.

Sub DeleteBeforeText_not_olFormatHTML()

Dim currMail As MailItem
Dim msgStr As String

Dim endStr As String
Dim endStrStart As Long
Dim endStrLen As Long

Set currMail = ActiveInspector.CurrentItem
endStr = "Dear"
endStrLen = Len(endStr)

If currMail.BodyFormat = olFormatHTML Then
    currMail.BodyFormat = olFormatRichText
End If

msgStr = currMail.Body
endStrStart = InStr(msgStr, endStr)

If endStrStart > 0 Then
currMail.Body = Right(msgStr, Len(msgStr) - (endStrStart - 1))
End If

End Sub

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

От: First Last [mailto:[email protected]]
Отправлено: вторник, 9 мая 2017 г., 5:29

В этом примере я пытаюсь ввести «[email protected]» в поле «Кому».


person Steben    schedule 09.05.2017    source источник
comment
Можете ли вы опубликовать пример изображения тела электронного письма?   -  person 0m3r    schedule 10.05.2017


Ответы (1)


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

^[F][r][o][m][:].*[\[][m][a][i][l][t][o][:](\w+\@.*\..*)[\]].*$

Вам просто нужно немного настроить часть, чтобы удалить начало тела.

Полный код:

Sub DeleteBeforeText_not_olFormatHTML()
    Dim currMail As MailItem
    Dim msgStr As String
    Dim endStr As String
    Dim endStrStart As Long
    Dim endStrLen As Long
    Dim regEx As New RegExp

    Set currMail = ActiveInspector.CurrentItem
    If currMail.BodyFormat = olFormatHTML Then
        currMail.BodyFormat = olFormatRichText
    End If

    msgStr = currMail.Body

    With regEx
        .Global = True
        .MultiLine = False
        .IgnoreCase = True
        .Pattern = "^[F][r][o][m][:].*[\[][m][a][i][l][t][o][:](\w+\@.*\..*)[\]].*$"
    End With

    If regEx.test(msgStr) Then
        endStr = CStr(regEx.Execute(msgStr)(0))
        Debug.Print endStr 
        endStrLen = Len(endStr)
        endStrStart = InStr(msgStr, endStr)

        If endStrStart > 0 Then
            currMail.Body = Right(msgStr, Len(msgStr) - (endStrStart - 1))
        End If
    Else
    End If
End Sub
person R3uK    schedule 10.05.2017
comment
Ой! Я думал о том же :-), Regex делает это - person 0m3r; 10.05.2017