PHPエラー対処方法「malformed header from script. Bad header=No recipient addresses found i」


PHPからメールを送信する際に「malformed header from script. Bad header=No recipient addresses found i ~」というエラーの原因と対処方法メモです。
「No recipient addresses」なので第1引数で指定されたメールアドレスがありませんよ~というエラーになります。
アドレスの記入方法でなく関数の書き方も影響する部分なので、小さなミスの可能性が大きいエラー内容ですね。

SPONSORED LINK

No recipient addressesの原因と対処方法

エラー内容は「送信先が見つからない」という意味なので、「基本的な記述ミス」と「ファイルの文字コードと記述コード」のあたりが原因となる場合が多いです。
ここで間違えやすいのは、間違ったアドレスかの確認ではないということです。
いや、もちろんアドレスの確認も重要ですけど、そうじゃなくて記述に問題があると思った方がいいでしょう。

No recipient addressesの対処方法

クォーテーションを見直す

mb_send_mailを使った例

mb_send_mail("hogehoge@hogehoge.jp",subject,$body,"From: hoge@hoge.com");

これでエラーが出ますが、

mb_send_mail('hogehoge@hogehoge.jp',subject,$body,"From: hoge@hoge.com");

これだとエラーはでません。

つまり、クォーテーションの扱いで起こるエラーになります。
PHPの基本ですが、ダブルクォーテーションで囲まれた文字列は変数処理など色々な処理がバックグラウンドで走ります。
もちろん文字列に使用することが間違いだということではありませんが、完全に文字列だという場合にはシングルクォーテーションを使う方がいいですね。

ファイルの文字コードを見直す

PHPの文字コード、mail関数を使っているファイルの文字コードなど、でエラーが出ている可能性があります。
どこが違うのかという部分を追及していくととんでもない量の解説になってしまいますので、メール関数に的を絞って見直すべき文字コードを一覧で紹介します。

  • サーバの文字コード
  • PHPの文字コード
  • ファイルの文字コード
  • mail関数の文字コード
  • 外部取得データの文字コード

などを一から見直せば幸せになれるかもしれません。

まとめ

mail関数のデリケートさに嫌気がさしているあなたの気持ちはとてもわかります。でも苦労すればするほどメールがばっちり送れて、受信できた瞬間は感動できるはずです。
当たり前のように使えていたメール関数もサーバー環境が変わっただけで急にエラーを吐いたりしてしまいますので、解決できた方法を覚えておけばスキルアップもできて一石二鳥ですね。

今日も知識欲は止まらない。

SPONSORED LINK
トップへ戻る