エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


さくらサーバの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()」関数で実際にメールを送信している処理でエラーが発生していることが分かりました。
 
また、さくらレンタルサーバのサーバコントロールパネルから確認できる「エラーログ」を見ると下記のエラーが出力されていました。
 

 
エラーログを見てもよく分からなかったのですが、ググったら原因が判明しました。
 


 

さくらインターネットで 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サーバを経由してメールを送信する処理に変更する必要がある場合もあるかと思います。

 - プログラミング・Web関連技術

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

Selenium WebDriverでFirefoxをプライベートウィンドウ/Chromeをシークレットモードで起動する方法・言語はpython

Seleniumでは初期状態でブラウザを起動する   Seleniumでブラウザ …

mod_pagespeedでWebサイトを超簡単高速化・Google謹製の最終兵器

Webサイトの表示スピード高速化の最終兵器、Google謹製mod_pagespeedの解説です。レンタルサーバではX-Serverでしか利用できませんが、ワンクリックで高速化します。

PythonでURLの有無、存在をチェックするスクリプト

PythonでURLが存在するか否かのチェックスクリプト。ライブラリ「urllib2」を使い、指定のURLにアクセスしそのレスポンスコードを判別するという仕組み。

Selenium WebDriver、Pythonをインストールしブラウザ自動操作の環境構築手順のまとめ

ブラウザを自動操作しテストを実行するロボットをselenium WebDriver+Pythonの環境を構築し、動作確認までの手順のまとめ。初心者向けに詳細解説。サンプルソースも。

直リンクとは何か?直リンクとディープリンクの違いと著作権問題

直リンクは著作権違反なのか?議論の前にまず「直リンク」の意味を正しく理解しよう。直リンクは他のサイトの画像を読み込む、ディープリンクなど多様な意味がある。

PythonでUTF-8など日本語(全角文字)を使う方法。コメントにも必要。

Pythonの標準では日本語(全角文字)を利用できないので、利用する際は文字コードを宣言する必要がある。「# coding: utf-8」の様に記述すればOK。

ロリポップからX-Serverに引越し。サーバの月額費用が増えても求めた理由は?

ロリポップからX-Serverに引越すその理由とは?SEOの観点からも少しでもサーバレスポンスが早いサーバが求められロリポップでは限界を感じたからです。

Git管理のソースを元に新しく構築する環境に反映させる手順
Git管理のソースを元に新しく構築する環境に反映させる手順

Gitで管理しているソースを使って環境を構築する方法を解説。CakePHPを使う想定で、環境を構築したのちpullして、重複ファイルを削除して、改めてpullすれば出来上がる。

.htaccessのmod_expiresでブラウザキャッシュで高速化でSEO対策!

Page Speed Insightsの指摘事項のファイルのブラウザキャッシュの設定方法。解説もしてるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!

借りてはいけないレンタルサーバ実例4社・アルファメール・WEBアリーナ

餅は餅屋。サーバはサーバ屋が提供するサービスを利用するべきという記事で、具体例 4サービスを例にこんなサーバはNGと紹介しています。