PHP PHPMailerで宛先の名前が、undisclosed-recipientsになってしまう。

2018.1.30

undisclosed-recipients を出力している個所を探る

PHPMailer.php の中を検索すると下記のような箇所が見つかりました。

if (count($this->to) > 0) {
    $this->mailHeader .= $this->addrAppend('To', $this->to);
} else {
    $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;');
}

$this->toの中身が0件だったときに、undisclosed-recipientsになるということなので、$this->to の中身を getToAddresses()で見てみると確かに空になっていました。

どうやらこのメールアドレスがなぜか設定されていないのが問題だと思われます。

原因

to と bcc に同じメールアドレスを入れたのがマズかったようです。

仕様なのかバグなのかわかりませんが、Reply-To 以外に同じメールアドレスを登録することはできないようです。

PHPMailer.php の中を読み進めていくと、addAddress(),addCC(),addBCC(),addReplyTo()が内部で、addOrEnqueueAnAddress()を共通的に呼び出していて、$this->RecipientsQueue[]にメールアドレスをキーにして値を格納しているのですが、addReplyTo()以外は、同じメールアドレスを登録できないようです。

私がはまったケースとしては、下記のように同じメールアドレスを先に BCC に入れてしまっていたため、hogehoge が設定されていなかったようです。

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

$mail->AddAddress('xxxxx@example.com','hogehoge');

違うメールアドレスにするか、設定するのをやめるか・・・