How to send to BCC address when using PHPMailer to format MIME message for Gmail API?

徘徊边缘 提交于 2019-12-10 15:57:04

问题


I am using PHPMailer to build an email message. I am using PHPMailer only for MIME message formatting, not sending.

I then extract the raw message from the PHPMailer object before passing it on to the Gmail API for processing.

//Create a new PHPMailer instance
$mail = new PHPMailer;

//Tell PHPMailer to use SMTP
$mail->isSMTP();
$mail->IsHTML(true);

//Disable SMTP debugging
// 0 = off (for production use)
$mail->SMTPDebug = 0;

//Set who the message is to be sent from
$mail->setFrom("fromaddress@domain.com", "From Name");

//Set an alternative reply-to address
$mail->addReplyTo("replyaddress@domain.com", "Reply Name");

//Set to address
$mail->addAddress("address@domain.com", "Some Name");

//Set CC address
$mail->addCC("ccaddress@ccdomain.com", "Some CC Name");

//Set BCC address
$mail->addBCC("bccaddress@ccdomain.com", "Some BCC Name");

//Set the subject line
$mail->Subject = "Test message";

//Set the body
$mail->Body = file_get_contents("/messagestore/some.html");

//Attach a file
$mail->addAttachment("/messagestore/some.pdf","some.pdf","base64","application/pdf");

//generate mime message
$mail->preSend();

//get the mime text
$mime = $mail->getSentMIMEMessage();

//do the google API dance
$newMailMessage = new Google_Service_Gmail_Message();
$data = base64_encode($mime);
$data = str_replace(array('+','/','='),array('-','_',''),$data); // url safe
$newMailMessage->setRaw($data);
$gmailService = new Google_Service_Gmail($google_client);
$gmailService->users_messages->send('me', $newMailMessage);

According to PHPMailer docs, CC and BCC only function for sending in the Win32 environment.

However, my MIME formatted messages transmit successfully via the Gmail API to the "TO" and "CC" addresses, but not the "BCC" address.

To summarize, When I send email using this code and I provide a 'BCC' address to the Gmail API, I do not see 'undisclosed-recipients' in the sent message header, and the message is not transmitted to the BCC address.

When I send email using the gmail web interface and I provide a 'BCC' address there, I do see 'undisclosed-recipients' in the sent message header, and the message is transmitted to the BCC address.

Does anyone know of a workaround for this issue?


回答1:


PHPMailer will track the BCC recipients internally and if you were to send the message with PHPMailer it would specify the BCC recipients during the SMTP envelope.

However, when you extract the raw message from PHPMailer you lose the internal recipient list that PHPMailer was tracking. The raw message does not include the BCC information. The To: and Cc: headers will include the appropriate recipients and the GMAIL API probably uses these headers to infer the intended recipients.

To add in the BCC recipients you will need to use the GMAIL API to add these recipients before sending the message.

You didn't provide your GMAIL API code but it might follow this outline:

$message = new Message();

# construct message using raw data from PHPMailer
$message->setSubjectBody(...);
$message->setTextBody(...);
$message->setHtmlBody(...);

# *** add the BCC recipients here ***
$message->addBcc("secret.recipient@google.com");

# send the message
$message->send();



回答2:


Just add

$mail->addBCC('bcc@example.com');


来源:https://stackoverflow.com/questions/28779854/how-to-send-to-bcc-address-when-using-phpmailer-to-format-mime-message-for-gmail

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!