Получатели CC удаляются - PullRequest
0 голосов
/ 24 июня 2019

По какой-то причине приведенный ниже код перезаписывает существующих получателей в поле CC.Есть ли способ настроить этот код, чтобы позволить существующим получателям CC существовать при добавлении example@domain.com в конец?

Option Explicit

Private WithEvents oExpl As Explorer
Private WithEvents oItem As MailItem
Private bDiscardEvents As Boolean

Dim oResponse As MailItem
Dim WithEvents objInspectors As Outlook.Inspectors
Dim WithEvents objMailItem As Outlook.MailItem
Dim WithEvents myOlExp As Outlook.Explorer

'On Reply All
Private Sub oItem_ReplyAll(ByVal Response As Object, Cancel As Boolean)
   Cancel = True
   bDiscardEvents = True
   Set oResponse = oItem.ReplyAll

   afterReply
End Sub

Private Sub afterReply()
    oResponse.Display
 ' do whatever here with .to, .cc, .cci, .subject, .HTMLBody, .Attachements.Add, etc.
    oResponse.CC = "example@domain.com"
End Sub

РЕДАКТИРОВАТЬ: Благодаря @ProfoundlyOblivious мой код теперь выглядит следующим образом, но пример@domain теперь появляется в CC дважды (и три раза, если они были в CC для начала, возможно, тот факт, что их отображаемое имя может быть проблемой для последнего)

Option Explicit
Private WithEvents oExpl As Explorer
Private WithEvents oItem As MailItem
Private bDiscardEvents As Boolean
Dim oResponse As MailItem
Dim WithEvents objInspectors As Outlook.Inspectors
Dim WithEvents objMailItem As Outlook.MailItem
Dim WithEvents myOlExp As Outlook.Explorer

Private Sub Application_Startup()
    Initialize_handler
    Set oExpl = Application.ActiveExplorer
    bDiscardEvents = False
End Sub

Public Sub Initialize_handler()
    Set objInspectors = Application.Inspectors
    Set myOlExp = Application.ActiveExplorer
End Sub

Private Sub objInspectors_NewInspector(ByVal Inspector As Inspector)
    If Inspector.CurrentItem.Class = olMail Then
        Set objMailItem = Inspector.CurrentItem
        If objMailItem.Sent = False Then
            Call SetFromAddress(objMailItem)
        End If
    End If
End Sub

'The next 3 lines to enable Outlook 2013/2016/365 Reading Pane Reply
Private Sub myOlExp_InlineResponse(ByVal objItem As Object)
    Call SetFromAddress(objItem)
End Sub

Public Sub SetFromAddress(oMail As Outlook.MailItem)
    ' Set your preferred default From address below.
    ' Exchange permissions determine if it is actually stamped
    ' as "Sent On Behalf Of" or "Sent As".
    ' The address is not properly updated for the InlineResponse
    ' feature in Outlook 2013/2016/365. This is only a visual bug.
    oMail.SentOnBehalfOfName = "example@domain.com"
    oMail.CC = "example@domain.com"
End Sub

Private Sub oExpl_SelectionChange()
   On Error Resume Next
   Set oItem = oExpl.Selection.item(1)
End Sub

'on Reply
Private Sub oItem_Reply(ByVal Response As Object, Cancel As Boolean)
   Cancel = True
   bDiscardEvents = True

Set oResponse = oItem.Reply
 afterReply
End Sub

'on Forward
Private Sub oItem_Forward(ByVal Response As Object, Cancel As Boolean)
   Cancel = True
   bDiscardEvents = True

Set oResponse = oItem.Forward

 afterReply
End Sub

'On Reply All
Private Sub oItem_ReplyAll(ByVal Response As Object, Cancel As Boolean)
   Cancel = True
   bDiscardEvents = True

Set oResponse = oItem.ReplyAll

 afterReply
End Sub

Private Sub afterReply()
    oResponse.Display

    If oResponse.CC Like "example@domain.com" Then
        oResponse.CC = oResponse.CC
    Else
        oResponse.CC = oResponse.CC & "; example@domain.com"
    End If
End Sub

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

Ответ: oResponse.CC = oResponse.CC & "; example@domain.com"

Если в письме нет получателей CC, этот ответ создаст лишнюю точку с запятой и пробел "; example@domain.com". Я уверен, что Outlook хорошо это игнорирует, но вы можете проверить пример, предоставленный Дэвидом Земенсом в комментариях, если это вызывает проблему.

Важное примечание: MailItem.CC ссылается только на отображаемые имена CC, мой ответ не заменяет Recipients.Add .

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

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

Добавьте получателя CC, используя Recipients.Add:

set recip = oMail.Recipients.Add("example@domain.com")
recip.Type = olCC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...