さくらサーバの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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
.gitignoreを更新しても反映されないときは「git rm -r –cached .」でキャッシュを削除
gitの.gitignoreを変更しても記述内容が反映されない時がある。それはGitのキャッシュが残っているため。そんなときは「git rm」コマンドを使ってキャッシュを削除すれば解決する。
-
-
PythonでURLの有無、存在をチェックするスクリプト
PythonでURLが存在するか否かのチェックスクリプト。ライブラリ「urllib2」を使い、指定のURLにアクセスしそのレスポンスコードを判別するという仕組み。
-
-
コピーコンテンツ・直リンクの3つの対策Google通報などのまとめ
コピーコンテンツを発見したときにやること!Googleに通報、画像の直リンクを禁止、RSSの全文配信を停止。この対策をしないとあなたのサイトの評価も下がるかも!
-
-
Beautiful Soupを利用してPythonでスクレイピングを行う環境構築方法の解説
BeautifulSoupはPythonでスクレイピングを行う際に便利なツール。インストール方法も簡単。ただ、事前にpipのインストールが必要でその解説もしてます。
-
-
エックスサーバーで独自SSLは永久無料で取り放題。利用方法と理由を解説!
エックスサーバーでは独自SSLが無料でいくつでも設置できるように!しかも、国、都道府県などの数項目の入力と数クリックだけという超簡単!SSL化しない理由がない!
-
-
Gitで「fatal: Authentication failed for ‘https://example.com/git_repositories/example.git/’」のエラーが出た場合の対処方法の一つ
Gitのリモートリポジトリにアクセスする際、Authentication failedのエラーが。しかし、ID、PASSが間違っているのではなく、リモートリポジトリのURLが間違っている場合もあるので再度確認を。
-
-
ロリポップからX-Serverに引越し。サーバの月額費用が増えても求めた理由は?
ロリポップからX-Serverに引越すその理由とは?SEOの観点からも少しでもサーバレスポンスが早いサーバが求められロリポップでは限界を感じたからです。
-
-
EストアのショップサーブのWordPressサービスにメリット無し
ショップサーブのオプションサービスのWordPressを使ってみましたがデータベースには直接触れず使えないサービスでした。
-
-
直リンクとは何か?直リンクとディープリンクの違いと著作権問題
直リンクは著作権違反なのか?議論の前にまず「直リンク」の意味を正しく理解しよう。直リンクは他のサイトの画像を読み込む、ディープリンクなど多様な意味がある。
-
-
Selenium WebDriver、Pythonをインストールし Chromeの自動操作の環境構築手順のまとめ
Selenium WebDriverを使ってChromeを自動操作する環境を構築する手順のまとめ。使用するPythonのインストールから、サンプルスクリプトの動作確認までを詳細解説。