インターネット老人おぢさん

PHPでメールを送るならmb_send_mail?PHPMailer?

最終更新:2021年03月11日 04時57分38秒(初公開:2021年03月08日 14時56分11秒

PHPでメールを送るならmb_send_mail?PHPMailer?

ごたくはいいからメールを送りたい

PHPMailerを採用したケース を参照してください。
ただし、後述の問題があるので実務で使用する場合は必ず把握しておいてください。
当たり前ですが、本サイトのスクリプトを使用したことにより生じた問題には一切関知しません ので予めご了承ください。

ただメールを送るだけならmb_send_mail

まず、そもそもPHPは公式mb_send_mail を標準で用意しています。
ただ単純にメールを送るという処理をさせるだけなら、せっかく公式が用意している mb_send_mail を使うのが最も手早いです。

また、PHPMailerでローカル環境(XamppやMAMPなど)からメールを送信する、という記事が氾濫していますが、蓋を開けてみれば別のSMTPサーバーに送ってもらっているので「それはローカル環境でメールを送信しているのではない」 と何度ツッコミを入れたことか。
同様に、mb_send_mail もローカル環境でメールを送信しているのではありません。

sendmailの仕組みとPHPMailerの仕組み

本質的には同じです。
違うのは、PHPMailerはsendmailのラッパーも兼ねているということです。
この辺りは私が色々言うよりは、PHPMailerのソースコードを読んでもらったほうがいいです。

mb_send_mailを使うとスパム扱いをされてしまう

これは何を根拠に言っているのでしょうか?
実際にやってみてもらえば分かりますが、そんな事はないです。
そういう時もあったね、ぐらいだと思うのですが、mb_send_mail が悪いのではなく、SMTPサーバーを迷惑メールサーバー扱いされていたために起こった問題だと思います。
極端に言うとドメインの問題である可能性が高いため、問題指定されたサーバーからメールを送れば何をやっても迷惑メールです。

ただし、sendmailはセキュリティ面で問題があるため「sendmailを使っていたらある日突然迷惑メールとして処理される」という事は考えられます。

「PHPMailer 脆弱性」で探せばヤバい情報がボロボロ出てきます…

まず一番最初に、PHPMailer自体もですがメール送信の仕組み自体の脆弱性が指摘されています。
(リリース当時は問題がなかったが、アーキテクチャが移り変わって対応しきれなかったため発生したものもありますので、一概に言えませんが)結局の所オープンソースなので新しい(未知の)脆弱性が見つかってしまいます。
オープンソースは開発速度を爆速にしますが、脆弱性も公開しています。

脆弱性について

sendmail自体の脆弱性とPHPMailerの脆弱性は別物ですが、PHPMailerはsendmailを使っているので、必然的にsendmailの脆弱性はPHPMailerの脆弱性と言
ただし、PHPMailerが必ずしもsendmailだとは限りません。
むしろpostfixの方がポピュラーでしょうか。
他のMTA(メール送信エージェント)は知らないので何とも言えませんが、この辺りは自前のサーバーでどちらを使っているか確認する必要がありそうです。

メールヘッダーインジェクション

解説が分かりやすかったです。
これはsendmailの脆弱性ではなく、Webアプリケーション側で対策すべき問題です。

© 2020-2021のむらやごろう(@elder_uncle)

当サイトの全てのコンテンツを転載・無断での引用もお断りしています。