web-dev-qa-db-ja.com

PHPMailerを使用してGmailAPIのMIMEメッセージをフォーマットするときにBCCアドレスに送信するにはどうすればよいですか?

私はPHPMailerを使用して電子メールメッセージを作成しています。 PHPMailerをMIMEメッセージのフォーマットにのみ使用しており、送信は行っていません。

次に、PHPMailerオブジェクトから生のメッセージを抽出してから、GmailAPIに渡して処理します。

//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("[email protected]", "From Name");

//Set an alternative reply-to address
$mail->addReplyTo("[email protected]", "Reply Name");

//Set to address
$mail->addAddress("[email protected]", "Some Name");

//Set CC address
$mail->addCC("[email protected]", "Some CC Name");

//Set BCC address
$mail->addBCC("[email protected]", "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);

PHPMailerのドキュメントによると、CCとBCCはWin32環境で送信する場合にのみ機能します。

ただし、MIME形式のメッセージは、Gmail APIを介して「TO」アドレスと「CC」アドレスに正常に送信されますが、「BCC」アドレスには送信されません。

要約すると、このコードを使用してメールを送信し、Gmail APIに「BCC」アドレスを提供すると、しない送信されたメッセージヘッダーの「undisclosed-recipients」を参照してください。メッセージis not BCCアドレスに送信されます。

Gmail Webインターフェイスを使用してメールを送信し、そこに「BCC」アドレスを指定すると、do送信されたメッセージヘッダーの「undisclosed-recipients」を参照してください。メッセージis BCCアドレスに送信されます。

この問題の回避策を知っている人はいますか?

6
cloudxix

PHPMailerはBCC受信者を内部で追跡し、PHPMailerでメッセージを送信する場合は、 SMTPエンベロープ の間にBCC受信者を指定します。

ただし、PHPMailerから生のメッセージを抽出すると、PHPMailerが追跡していた内部受信者リストが失われます。 生のメッセージ にはBCC情報は含まれていません。 To:およびCc:ヘッダーには適切な受信者が含まれ、GMAILAPIはおそらくこれらのヘッダーを使用して目的の受信者を推測します。

BCC受信者を追加するには、メッセージを送信する前に、GMAILAPIを使用してこれらの受信者を追加する必要があります。

GMAIL APIコードを提供していませんが、次の概要に従う可能性があります。

$message = new Message();

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

# *** add the BCC recipients here ***
$message->addBcc("[email protected]");

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

この質問を見つけたが、Gmail APIを使用して送信せず、PhpMailerを使用して生のMIMEメッセージを作成した人に:

$ phpMailer-> isMail()を設定すると(そうです、それはセッターです)、生のMIMEメッセージにBCC:が含まれます。

PhpMailerオブジェクトがSMTPまたはmailメソッドに設定されていても、実際に電子メールを送信するために使用することはないので、違いはないと思います。

0
Matheus Valin

追加するだけです

$mail->addBCC('[email protected]');
0
user12220234