Макрос Outlook для удаления адреса - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь разработать макрос в Outlook, чтобы ответить исходному отправителю электронной почты, а также хранить и отвечать в CC на все письма, которые находятся в CC в исходном письме.Пока у меня есть это:

Sub estimate()
    Dim origEmail As MailItem
    Dim replyEmail As MailItem

    Set origEmail = Application.ActiveWindow.Selection.Item(1)
    Set replyEmail = Application.CreateItemFromTemplate("C:\Utils\Outlook_Templates\Estimate.oft")

    replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody
    replyEmail.Subject = "RE: " + origEmail.Subject
    replyEmail.To = origEmail.Sender
    replyEmail.CC = origEmail.CC + ";" + replyEmail.CC
    replyEmail.Display

End Sub

Это работает нормально.Однако в СЦ у меня часто есть какой-то контакт (например, Джон Доу), который я хотел бы удалить, когда отвечаю на электронное письмо.

Так что я хотел бы сохранить все электронные письма, кромедля Джон Доу (в СС)Как я могу это подтвердить?

РЕДАКТИРОВАТЬ: Кроме того, когда я использую это, чтобы ответить на электронное письмо, оно повторяет адрес электронной почты в «до» и в «CC».Это потому, что у меня уже есть определенный адрес электронной почты в «to» в «шаблоне». В любом случае, допустим, это повторяет «Мой босс» в «to» и «CC».Как я могу удалить его из "CC"?

Ответы [ 3 ]

1 голос
/ 02 июля 2019

Это должно работать:

Sub estimate()
    Dim origEmail As MailItem
    Dim replyEmail As MailItem
    Dim s() As String
    Dim add As String
    Dim i As Integer

    Set origEmail = Application.ActiveWindow.Selection.Item(1)
    Set replyEmail = Application.CreateItemFromTemplate("C:\Utils\Outlook_Templates\Estimate.oft")

    s = Split(origEmail.CC & ";" & replyEmail.CC, ";")

    For i = LBound(s) To UBound(s)

        If InStr(1, s(i), "John Doe") = 0 Then
            add = add & ";" & s(i)

         End If
    Next


    replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody
    replyEmail.Subject = "RE: " + origEmail.Subject
    replyEmail.To = origEmail.Sender
    replyEmail.CC = add
    replyEmail.Display


End Sub
0 голосов
/ 02 июля 2019

Прежде всего, вместо настройки каждого свойства вручную, я бы рекомендовал использовать метод Reply класса MailItem, который создает ответ, предварительно адресованный исходному отправителю, изОригинал сообщения.Затем вы можете настроить свойства, как вам нужно.

Во-вторых, я бы порекомендовал работать с коллекцией Recipients, если вам нужно настроить получателей (изменить, добавить или удалить).Соответствующее свойство класса MailItem возвращает коллекцию Recipients , которая представляет всех получателей для элемента Outlook.

Наконец, вы можете найти How To: Fill TO,Поля CC и BCC в Outlook программно статья полезна.

0 голосов
/ 02 июля 2019

На самом деле, согласно официальному справочнику , вы не должны изменять свойство .CC напрямую:

Это свойство содержит только отображаемые имена. Коллекция Получатели должна использоваться для изменения получателей CC.

Правильный способ сделать это тогда будет:

Dim i as Long

' If the address could occur multiple times, start at the end & work backwards
For i = replyEmail.Recipients.Count To 1 Step -1
    If LCase(replyEmail.Recipients(i).Name) = LCase("John Doe") Then
        replyEmail.Recipients.Remove(i)
    End If
Next

replyEmail.Display
...