11

PHPMailer を使用して電子メール メッセージを作成しています。送信ではなく、MIME メッセージのフォーマットにのみ PHPMailer を使用しています。

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

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

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

しかし、私の MIME 形式のメッセージは、Gmail API を介して "TO" および "CC" アドレスには正常に送信されますが、"BCC" アドレスには送信されません。

要約すると、このコードを使用してメールを送信し、「BCC」アドレスを Gmail API に提供すると、送信されたメッセージ ヘッダーに「undisclosed-recipients」が表示されず、メッセージBCCアドレスに送信されません。

gmail Web インターフェイスを使用してメールを送信し、そこで「BCC」アドレスを指定すると、送信済みメッセージ ヘッダーに「undisclosed-recipients」が表示され、メッセージBCCアドレスに送信されます。

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

4

3 に答える 3

28

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

ただし、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("secret.recipient@google.com");

# send the message
$message->send();
于 2015-04-15T21:55:47.170 に答える