blog
古いPHPMailerからうまくメールが届かなくなった時に試したい「Sender設定」
Writer
玉木 柚衣
Web Developer
PHPからのメールを送信するのに便利なPHPMailerというライブラリがあります。
フォーム制作などと相性が良いこのライブラリは、世界中の多くのWebコンテンツに用いられています。
ところが最近、古いPHPMailerを使っているフォームからの送信メールが、相手に正しく届けられないという報告が増えてきました。
リリース当初は問題なく使えていたメールが、なぜ最近になって届かなくなってきたのでしょうか?
それは恐らく、Gmailを筆頭に世の中のメールセキュリティのハードルがどんどん上がってきたからです。
年々上がるメール到着ハードルの高さを、古いバージョンのPHPMailerでは超えられなくなってきた。というわけです。
(最新のPHPMailerでは問題なく届くケースが多いです)
なぜ古いPHPMailerだけ届かない?
ではどうして新旧のPHPMailerで到着率が変わるのでしょうか?
基本的にメールの到着率は「そのメールが信用に足りるかどうか」の度合いで変わってきます。
つまり、PHPMailerの新旧バージョンによってメールの信頼度に関わる機能に違いがある、という事情が見え隠れします。
原因はなに?
最近のトラブルを調査する中で、Senderというものの扱いがPHPMailerの新旧バージョンで異なっており、これがメールの到着率に影響していることがわかりました。
新しいPHPMailerではSenderを自動的に配慮して設定してくれるけれども、古いPHPMailerは明示的に指定しないと意図しないSenderになってしまう場合がある。
といった具合です。
※これは必ずしも正確な表現ではありませんが、イメージとしてはこんな具合です。
Senderとは
Senderとは、「Send」+「er」つまり最終的なメールの送り手を意味します。
これはメールの作者「From」とは異なる概念です。
(手紙を書いたのがAさんでも、ポストに投函したのはBさん、みたいなイメージです。)
基本的にSenderとFromは同じケースが多いのですが、古いバージョンのPHPMailerだと両者の内容が違う状態でメールが送信される場合があります。
そしてこれが受け取り手のメーラーに警戒心を与えてしまうようです。
送信者のメルアドが[email protected]になっているのにSenderがbbb.comだと、メーラーとしては
「おや?ドメインが違うぞ?aaa.comの名前を語って送信された偽装メールかもしれないな」
となるわけです。
これがメールの信頼度を下げるファクターの1つになるようです。
※この辺りのロジックは明確に開示されていないので、あくまでも現場レベルでの経験的な推測です。
他にも、Senderの不一致が間接的に悪影響を及ぼす要素もあります。
それはSPF認証です。
メールの送信元サーバをチェックする機能であるSPF機能は、Senderの設定状況次第ではDNSから必要な情報をうまく参照できない場合があります。
つまり、Senderを正しく伝達できないと、SPFが効かない場合があるのです。
これが、メールの信頼度を下げる2つめのファクターとなります。
解決策
メール不達の原因は千差万別ですが、今回のようにPHPMailerのバージョンが古いなどの理由でメールのSenderが意図しないものになっている場合、メール送信時のSenderを明示することで解決する場合があります。
実はある程度古いPHPMailerでも、メール生成ロジック部に以下の命令を加えてやることでSender名を任意のものに変更できる機能が備わっています。
$email->Sender = "[email protected]";
※「$email」部はメール設定に用いる任意の変数
※Senderに指定する文字列(ダブルクォートに囲まれた部分)は、メール送信元メルアドと同じにするのがオススメです
問題のPHPMailerのバージョンは?
最近だとPHPMailerバージョン5.1でこのトラブルを確認したのですが、どのタイミングでSender周りの設定が自動的に変わるようになったのか詳しく把握できていません^^;
弊社では「フォームからのメールが届かなくなった。」「SPFがうまく設定できない。」といったケースが発生したら今回紹介した問題を疑ってみる。といった流れで対応しています。
ただし、新しいPHPMailerでも届かないことはある
昨今のメールセキュリティ意識の向上に伴い、PHPMailerのバージョンの新旧とは無関係にSPFを設定していないメールは迷惑メールやブロックの対象になる機会が非常に増えています。
なので、メール不達の問題解決をしようとアプローチする時の流れは
- メールが上手く届かない
- まずはSPF設定を実施
- SPFがなぜか機能しなかったらSender設定を疑う
こんな感じになると思います。
おわりに
今回はなかなかマニアックな内容の投稿になりました。
メールトラブルは千差万別ですが、うっかりこのケースに該当しそうな方がいらっしゃいましたら参考にしてみてください。
実際には「Senderを設定する命令文自体が動かない」というパターンもあって、このあたりはPHPMailerのバージョンが更に古いと発生するのかな?という体感です。
もちろん、PHPMailerのバージョンが古い時の問題を解消するのに最も有効な手段は「PHPMailerをバージョンアップする」なのですが、ちょっと作業が大掛かりになってしまうので、先程ご紹介した「命令文を1行追加する」で解決できたらラッキーくらいの感覚で試してみるといいかもしれません。
「やってみたけど上手くいかない」「そもそも難しすぎてわからない」といった場合には弊社までお気軽にご連絡くださいませ!