エス技研

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.

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

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

  関連記事

Gitはフォルダ自体を管理対象にはできない。空のフォルダを設定する手順
Gitはフォルダ自体を管理対象にはできない。空のフォルダを設定する手順

Gitはフォルダだけを管理対象にすることはできない。そのため空の.gitkeepファイルを作成し管理対象にすることで、それが入っているフォルダも管理対象にする、と言う手順で管理を行う。

直リンク禁止の.htaccessを超分かりやすく解説。日本語じゃなくてPHPで説明

直リンクを禁止する.htaccessの記述内容を日本語ではなくPHPで解説!私自身もこの方法ですっかり理解できました。.htaccessって簡単!って思えますよ。

X Serverへの引越しの注意点まとめ。ロリポップとの違いと対処方法 6事例

ロリポップからX Serverに引越し。ロリポップとX Serverの違いに注目することでX Serverの設定方法を明確にします。またX Serverならではの設定ポイントなども解説。

Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説
Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説

開発進行中の環境、公開中の環境にGitを導入する。その基本的な手続きを解説。Gitの導入、ローカルリポジトリを作成。リモートリポジトリを利用し、本番環境にデプロイする手続きを解説。

Apacheの起動しているかの確認方法と起動、再起動、終了のコマンド
Apacheの起動しているかの確認方法と起動、再起動、終了のコマンド

Apacheが起動しているかを確認する方法の解説に加え、Apacheの起動、停止、再起動のコマンドを解説。再起動のコマンドには restart、condrestart、reload、gracefulがあり、違いを解説。

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

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

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

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

SyntaxHighlighterを導入してソースコードを見やすくしてみました

PHP、HTMLなどのソースコードをブログで紹介するとき、SyntaxHighlighterを利用することで見やすく提供することが出来ます。

サイト更新、引越時に.htaccessでリダイレクトする方法解説

サイト更新,引越しなどでサイトのURLが変わった場合のリダイレクトを.htaccessのRewriteEngineを使って処理する方法の解説です。

EストアのショップサーブのWordPressサービスにメリット無し

ショップサーブのオプションサービスのWordPressを使ってみましたがデータベースには直接触れず使えないサービスでした。