hiroshi akutsuの日記

主にプログラミング関係のこと

PHPMailer【isHTML(false)にしてもtext/htmlで送信されてしまう】

あまりwebで検索しても情報が出てこなかったので備忘として残します。

PHPMailerを利用してSMTPサーバにつないでメール送信を行うケースは多いと思います。
でも、ちゃんと理解して使わないと、思った通りのメールが遅れないという事態になるので注意が必要です。

PHPMailerでメールを自動で送信する機能を搭載したシステムを作り運用しているのですが、ある日受信者からメールがおかしいといわれました。。。


調べてみると、text/plainで送る設定になっているはずなのに、メールのソース(ヘッダ)を見てみるとbodyがtext/htmlになっていたのです。

isHTML(false)としているのに。。。


なんでかなと思ってPHPMailer本体のphpのソースを見てみたところ、AltBodyプロパティにテキストが代入されていると、なんとisHTMLの設定は無視して強制text/htmlになってしまうようでした。

考えてみりゃそりゃそうだ、AltBodyは、text/htmlがクライアントの都合で使用できない場合に、text/plainの形式で送るメッセージを指定するところだった。
つまりtext/htmlで送信することを前提にしている。
なのでAltBodyがあるときはtext/htmlに強制的になってしまうという作りだった。

PHPMailer作者は良かれと思ってそうしてくれてるんだろうなあ。。。

ということで、AltBodyに代入している行をコメントアウトして、解決しました。