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

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

関連トピック

Language

PHPのmb_send_mail関数やmail関数で文字化け問題を解消する

PHPのmb_send_mail関数やmail関数で文字化けに悩んでいませんか? 正直、色々な原因があるので特効薬のような対処法はあり

php-cannot

PHPで配列のエラー「Cannot use string offset as an array」がでる場合の対処法

PHPで「Cannot use string offset as an array」が出たら確認したいポイントをまとめました。 このエ

sjis_utf_mbnk

文字コードが違う!SJISのページをUTF-8に変更したらクエリ付URLが死んだ話

ガラケーサイトからスマホやPC向けサイトへとサイトを拡大する場合、 SJISだった文字コードを「この際だからUTF-8に一括で変更して

Question

PHPのdate関数で「年」が文字化けした時の対処方法

PHPのエラーについて「PHP date 年 文字化け」です。 PHPで日付を表示する時に欠かせないdate関数ですが「Y年」が文字化

mysql

MySQL カラム名・テーブル名などに使ってはいけないキーワード

MySQLでテーブル名やカラム名に使用できないワードの一覧まとめ 予約語を使うのは危険なので回避しましょう。 バッククオートで囲って

Database

MySQLでTAG機能としてタグ付けを実装するデータベース設計を考える

ブログなどでも「タグ機能」って便利ですよね。カテゴライズとはまた違うタグ機能をMySQLを使って設計する時に、どのように実装するかを検討

mysql_limit_pf

MySQLのlimitで大量データのパフォーマンスが遅い重い!

MySQLのlimitを使用した場合、オフセット部分が増えるとパフォーマンスが低下する場合の対処方法メモ。 データベースからlimit

php

PHPでランダムに範囲内から重複しない数字を取り出す

1.とりあえず一つだけランダムで抜き出す。 [code] $num= mt_rand(1,100); [/code] 1から

公開日:2012/04/26