Использование поля CC: Field и / или BCC: без поля To: адреса электронной почты, помещенные в поле To: - PullRequest
0 голосов
/ 05 ноября 2018

У меня проблемы с отправкой писем из VBA в Outlook. Когда я назначаю адреса электронной почты полям To:, CC: и BCC: они не помещаются в правильные поля в письме, в зависимости от порядка, в котором эти поля назначены. Я должен назначить поле To: последним, или он поместит cc или bcc в поле To:

С кодом в этом порядке (К, BCC, CC) -

'These have to be 3, 2, 1 or else the BCC: or CC: shows up in the To: field of the email
' Add the To recipient(s) to the message.
Set objOutlookRecip = .Recipients.Add(RecipientList)
objOutlookRecip.Type = 1  ' 1 = olTo  
'Add those who are being bcc'd on this email
Set objOutlookRecip = .Recipients.Add(bccList)
objOutlookRecip.Type = 3  ' 3 = olBCC 
'Add those who are being cc'd on this email
Set objOutlookRecip = .Recipients.Add(ccList)
objOutlookRecip.Type = 2  ' 2 = olCC 

Письмо выглядит так:

To: = cc@cc.com
CC: = ""
BCC: = bcc@cc.com

С кодом в этом порядке (К, ЦК, ВСС)

'These have to be 3, 2, 1 or else the BCC: or CC: shows up in the To: field of the email
' Add the To recipient(s) to the message.
Set objOutlookRecip = .Recipients.Add(RecipientList)
objOutlookRecip.Type = 1  ' 1 = olTo 
'Add those who are being cc'd on this email
Set objOutlookRecip = .Recipients.Add(ccList)
objOutlookRecip.Type = 2  ' 2 = olCC  
'Add those who are being bcc'd on this email
Set objOutlookRecip = .Recipients.Add(bccList)
objOutlookRecip.Type = 3  ' 3 = olBCC  

Письмо выглядит так:

To: = bcc@cc.com
CC: = cc@cc.com
BCC: = ""

С кодом в этом порядке (BCC, CC, To)

'These have to be 3, 2, 1 or else the BCC: or CC: shows up in the To: field of the email
'Add those who are being bcc'd on this email
Set objOutlookRecip = .Recipients.Add(bccList)
objOutlookRecip.Type = 3  ' 3 = olBCC 
'Add those who are being cc'd on this email
Set objOutlookRecip = .Recipients.Add(ccList)
objOutlookRecip.Type = 2  ' 2 = olCC 
' Add the To recipient(s) to the message.
Set objOutlookRecip = .Recipients.Add(RecipientList)
objOutlookRecip.Type = 1  ' 1 = olTo 

электронная почта выходит правильно, как это:

To: = ""
CC: = cc@cc.com
BCC: = bcc@cc.com

Кроме того, если я хочу отправить электронное письмо с cc: и / или bcc: без To :, я получаю "Ошибка 440: в поле To, Cc или Bcc должно быть хотя бы одно имя или группа контактов «. Там написано "к, cc ИЛИ ОЦК", а у меня есть два других, так почему я получаю эту ошибку?

Я добавил этот фрагмент кода перед тем, как избавиться от ошибки:

If Len(RecipientList) = 0 Then
    RecipientList = " "
End If

Это процедура вызова:

SendTestHTMLMessages "to@to.com", "cc@cc.com:", "bcc@bcc.com", "Test Message Subject", "Test Message Body"

Это рабочий код:

Sub SendTestHTMLMessages(RecipientList As String, Optional ccList As String, Optional bccList As String, Optional Subject As String, Optional Body As String)

   Dim objOutlook As Object ' Outlook.Application
   Dim objOutlookMsg As Object ' Outlook.MailItem
   Dim objOutlookRecip As Object ' Outlook.Recipient

   Dim Signature As String

   ' Create the Outlook session.
   Set objOutlook = CreateObject("Outlook.Application")
   objOutlook.Session.Logon

   ' Create the message.
   Set objOutlookMsg = objOutlook.CreateItem(0)   '0 = olMailItem  (Late Binding)

If Len(RecipientList) = 0 Then
    RecipientList = " "
End If

With objOutlookMsg

    'These have to be 3, 2, 1 or else the BCC: or CC: shows up in the To: field of the email
    If Len(bccList) > 0 Then
        'Add those who are being bcc'd on this email
        Set objOutlookRecip = .Recipients.Add(bccList)
        objOutlookRecip.Type = 3  ' 3 = olBCC
    End If
    If Len(ccList) > 0 Then
        'Add those who are being cc'd on this email
        Set objOutlookRecip = .Recipients.Add(ccList)
        objOutlookRecip.Type = 2  ' 2 = olCC
    End If
    If Len(RecipientList) > 0 Then
        ' Add the To recipient(s) to the message.
        Set objOutlookRecip = .Recipients.Add(RecipientList)
        objOutlookRecip.Type = 1  ' 1 = olTo
    End If

     ' Set the Subject & Body of the message.
     .Subject = Subject
     .htmlBody = Body
     '.BodyFormat = 3   '3 = olFormatRichText
    Set .SendUsingAccount = objOutlook.Session.Accounts.Item(1)

       .Display

   End With


End Sub 

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

Заранее спасибо! Ким

1 Ответ

0 голосов
/ 06 ноября 2018

Следуйте objOutlookRecip.Type = с objOutlookRecip.Resolve

или objOutlookMsg.Recipients.ResolveAll сразу после End With.

...