さくらサーバのmb_send_mailでメール送信時にmalformed header from script ‘xxx.php’: Bad header: xxxのエラーが
2019/03/02
さくらサーバで PHP「mb_send_mail」関数を使ってメールを送信したときに Internal Server Errorが発生。その原因と解決方法を解説
Internal Server Errorが発生した経緯
NTT系のサーバからさくらインターネットのレンタルサーバにシステムを移行する作業をしていました。
その際の、メールフォームの動作確認中に「Internal Server Error」が発生しました。
その原因を調べ、解決した内容について情報を残しておきます。
mb_send_mail()関数でエラーが発生していると確認
メールフォームは、PHPで作成されており、メールアドレスとタイトル、本文を入力させて、その内容をメールで送信する、という非常にシンプルなお問い合わせフォームでした。
元のサーバでは全く問題なく動作していたのですが、さくらインターネットのレンタルサーバに乗せ換えて動作確認をしたところ、「Internal Server Error」が表示されるのです。
(PHPのバージョンの統一や DBの接続などを含め、他に発生していたエラーはおおよそ対応を終わらせていました。)
そして、エラーの発生個所を調べてみた結果、「mb_send_mail()」関数で実際にメールを送信している処理でエラーが発生していることが分かりました。
また、さくらレンタルサーバのサーバコントロールパネルから確認できる「エラーログ」を見ると下記のエラーが出力されていました。
|
1 |
[Sun Jan 01 01:01:01.010101 2018] [cgi:error] [pid 99999] [client 001.001.001.001:0] malformed header from script 'complete.php': Bad header: /home/example/dead.lette, referer: http://example.com/confirm.php |
エラーログを見てもよく分からなかったのですが、ググったら原因が判明しました。
さくらインターネットで mb_send_mailでメール送信で Internal Server Errorになる原因
原因は、利用しているサーバにメールアドレスが設定されていないことでした。
今回は、さくらインターネットのレンタルサーバへのサーバ移転でしたので、作業をしている時点ではドメインの引っ越しもしておらず、メールアカウントの設定も行っていませんでした。
そのため、サーバの設定としては、以下のような感じでした。
- ドメインをさくらインターネットで運用するを設定
- でも、まだ DNSを切り替えていないので .hostsを利用して、ドメインでアクセスして検証
- メールアカウントは未設定
この状態でメールを送信すると以下のような流れでエラーが発生していたと考えられます。
- PHPの「mb_send_mail()」関数でメールを送信しようとすると
- サーバ内の同一ドメイン内へのメール送信処理のため DNSを見に行かずに内部処理としてメール送信処理を実行する
- サーバ内に指定のメールアカウントがないので sendmailがエラーを発行
- その結果、Internal Server Errorが発生
さくらインターネットのメール送信で Internal Server Errorになった場合の解決方法
前項で書いた原因で、メール送信が Internal Server Errorとなった場合の解決方法は、「利用しているサーバにメールアドレスを設定すること」です。
同一サーバ内にあるはずのメールアドレスがないことが原因でエラーとなっているわけですので、メールアドレスを設定すれば解決します。
DNSがそのサーバに向いていなくても問題ありません。
サーバコントロールパネルから、送信先のメールアドレスを設定すれば解決します。
今回は、メールアドレスを設定していなかったことが原因ですので、この方法で対応できましたが、メールサーバを外部のサーバを利用する場合は、外部の SMTPサーバを経由してメールを送信する処理に変更する必要がある場合もあるかと思います。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
コピーコンテンツ対策.htaccessで直リンク禁止しリダイレクトで対応
不正なコピーコンテンツからの直リンクを拒否する.htaccessの設定方法。拒否するサイトを指定、許可するサイトを指定する方法、単純な拒否と画像の差し替えを解説。
-
-
mod_pagespeedでWebサイトを超簡単高速化・Google謹製の最終兵器
Webサイトの表示スピード高速化の最終兵器、Google謹製mod_pagespeedの解説です。レンタルサーバではX-Serverでしか利用できませんが、ワンクリックで高速化します。
-
-
CentOS環境に ntpdをインストールして自動的に時刻を取得して合わせる設定にする
VirtualBoxに構築した CentOSの環境の時計がずれているとき、ntpdをインストールし、時計を合わせる方法を解説。NTPサーバを指定する方法や ntpdを自動起動する設定も解説。
-
-
本当に?GMO系ロリポップ・ヘテムルを無料で運用する方法があった!
ロリポップ、ヘテムルを株主優待を利用して実質無料で運営しよう!という解説記事です。株主優待で提供されるサービスの内容を解説し、無料になる仕組みを解説します。
-
-
直リンクとは何か?直リンクとディープリンクの違いと著作権問題
直リンクは著作権違反なのか?議論の前にまず「直リンク」の意味を正しく理解しよう。直リンクは他のサイトの画像を読み込む、ディープリンクなど多様な意味がある。
-
-
Git管理のソースを元に新しく構築する環境に反映させる手順
Gitで管理しているソースを使って環境を構築する方法を解説。CakePHPを使う想定で、環境を構築したのちpullして、重複ファイルを削除して、改めてpullすれば出来上がる。
-
-
X Serverへの引越しの注意点まとめ。ロリポップとの違いと対処方法 6事例
ロリポップからX Serverに引越し。ロリポップとX Serverの違いに注目することでX Serverの設定方法を明確にします。またX Serverならではの設定ポイントなども解説。
-
-
コピーコンテンツ・直リンクの3つの対策Google通報などのまとめ
コピーコンテンツを発見したときにやること!Googleに通報、画像の直リンクを禁止、RSSの全文配信を停止。この対策をしないとあなたのサイトの評価も下がるかも!
-
-
XSERVERにCakePHP3をインストール。コマンドラインのPHPのバージョンを変更する方法で解決
XSERVERにCakePHP3をインストールするときに問題となるのはサーバーパネルとSSH接続の時とで認識されるPHPのバージョンの違いがあるため。その解消方法を解説する。
-
-
Selenium WebDriver、Pythonをインストールし Chromeの自動操作の環境構築手順のまとめ
Selenium WebDriverを使ってChromeを自動操作する環境を構築する手順のまとめ。使用するPythonのインストールから、サンプルスクリプトの動作確認までを詳細解説。