1. ホーム
  2. php

[解決済み] PHPMailer で Gmail API 用の MIME メッセージをフォーマットする場合、 BCC アドレスに送信するにはどうすればよいですか?

2022-03-04 13:39:53

質問

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

その後、PHPMailer オブジェクトから生のメッセージを取り出してから Gmail API に渡し、処理を行います。

//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' を参照し、メッセージ はありません。 がBCCアドレスに送信される。

を使用してメールを送信する場合 gmail ウェブインタフェース で、そこに「BCC」アドレスを指定すると、私は する 送信済みメッセージヘッダの 'undisclosed-recipients' を参照してください。 がBCCアドレスに送信されます。

この問題の回避策をご存知の方はいらっしゃいますか?

解決方法は?

PHPMailer は BCC の受信者を内部で追跡しており、PHPMailer でメッセージを送信する場合、BCC 受信者を SMTPエンベロープ .

しかし、PHPMailer から生のメッセージを取り出すと、 PHPMailer が追跡していた内部の受信者リストが失われます。 そのため 生メッセージ には、BCC 情報が含まれません。 また To:Cc: ヘッダは適切な受信者を含み、GMAIL APIはおそらくこれらのヘッダを使って意図された受信者を推測するのでしょう。

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

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();