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

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