PHPMailer導入とトラブル対策

PHP

PHPMailerの導入とトラブルシューティング

 PHPMailerは、PHPからメールを送信できる便利なライブラリですが、初期導入時にいろいろ動かなかったりすることがあるみたいなので、今回は導入からトラブルシューティングまでをカバーしていきたいと思います。


  

Composerの導入

PHPMailerを入れる前に、便利なコマンドラインツールComposerを導入しておきましょう。下記の例は、CentOSで実行しています。



  

Composerを使ってPHPMailerを導入する

 Composerを導入したら、次はこのComposerを使ってPHPMailerをインストールします。まず、PHPのライブラリサーチパスの通っているフォルダに移動して作業するのが良いのですが、そんなもの知らないという人は、まずはPHPMailerを確実に動かすためのヒントとして、以下のようにすると良いかもしれません(あくまでも実験用の方法です。本番ではちゃんとライブラリの保存場所に入れたほうが良いです)。

 ここでは、仮にサンプルソースを入れるフォルダが(/home/websrc/www/)だったと仮定します。

 上記のコマンドを実行すると、サンプルソースがある場所(/home/websrc/www/)の直下に、PHPMailerがダウンロードされます。これは、本番環境では好ましくないですが、初期トラブルでよくある require_oncesしているのにPHPMailerがうまく動作しない場合等の状態になってしまったときにデバッグを簡単にするための措置です。まずはとにかくPHPMailerを動かすことを最優先した配置です。

 この(/home/websrc/www/)フォルダの直下に、「vendor」という名前のフォルダが出来ているはずです。このvendorフォルダのなかにPHPMailerがあります。

 ここで、後述するサンプルソース(仮にsample.phpという名前だとします)も入れたとすると、フォルダの構成は以下のようになっているはずです。



  

Gmailのアカウントを作成しておく

 ここで、Gmailのアカウントを持っていない人は作っておきます。ここで作成したアカウントのユーザーIDとパスワードは下記のサンプルソースを動かすために必要ですので、メモしておきます。


  

サンプルソース

 では、今回実際に使用して動作確認したサンプルソースを示しておきます。



  

実際に使ってみる

 サンプルソースをサーバーにアップロードして、phpコマンドで起動するか、もしくはウェブサーバにアップロードして、ウエブブラウザから開いてみてください。本サンプルはどちらでも動作するはずで、筆者も両方のケースで動作確認しました。

 実行後に、「Email Sent Successful」と表示され、実際に電子メールが受信者のアドレスに届けば成功です。おめでとうございます。

 しかし、不運にもメールが送られず、エラー表示が出た場合が多々あるかと思います。次の章からトラブルシューティングの方法をいくつか挙げていきたいと思います。


  

PHPMailerのデバッグスイッチを入れる

 PHPMailerのトラブルシューティングで、まず初めにやらなければならないのは、PHPMailerのデバッグ機能を有効にすることです。これは、上記のサンプルソースの13行目の「$mail->SMTPDebug = 0; 」の数値を変更することで行います。

また、php.iniファイル内の「log_errors」を「On」にして、PHPのエラーもキャッチできるようにしておきます。


  

PHPMailerクラスが見つからない

 サンプルソースを起動すると、こんなエラーが出力されます。

   Fatal error: Class ‘PHPMailer’ not found in ….

 かなり多くの人が、この問題で苦しんでいるようです。まず、動作させることを最優先にしてComposerでサンプルソースと同じフォルダにPHPMailerを入れた人で、上記のサンプルソースをコピペしてソースを作った人は、このエラーに陥らないような気もしますが、このエラーの要点を書いておきますと、まず、このエラーは、require_onceで「vendor/autoload.php」を導入できているのであれば、PHPMailerのクラスファイル自体は読み込めています。ですので、ここを疑う必要はありません。もしも、サンプルソースと同じフォルダではない場所にPHPMaierを入れたのであれば、autoload.phpが正しくrequireされていることを確かめなくてはいけません。

 この問題の要点は、実はサンプルソースの2行目にあります。これを実際のエディタで開いてみたところが下記の通りです。

php-sample

 そうなんです、クラス名とネームスペースを区切っている文字が「円マーク」つまりバックスラッシュなんです。Linuxでも円マークなんです。ここを間違えて、スラッシュ(/)にしてしまうと・・・「PHP Fatal error: Class ‘PHPMailer’ not found in … 」エラーが出てしまいます。これではまる人も多いと思うので注意が必要です。


  

Gmailに接続できない

 次によくあるトラブルが、Gmailのアカウントのユーザー名とパスワードはちゃんと入れているはずなのに、ログに、「SMTP ERROR: Password command failed」とか、「SMTP connect() failed. 」といった内容のものが出てきてしまい、Gmailに接続できないというものです。

 これは、Gmail側で、未知の外部アプリからのアクセスを遮断しているからで、Gmailの設定を変更して、外部アプリからでもGmailのSMTPサーバにアクセスできるようにしてあげれば解決します。

 これをするには、Gmailの「安全性の低いアプリによるアクセスを許可する」設定をしてあげればOKです。

gmail settings

 この設定は、ONにしてもすぐには反映されないようで、しばらく時間がかかります。

また、しばらくしてもアクセスできなかったり、「Please log in with your web browser and then try again」のような文字列を含むエラーが出るような場合は、ここのページにアクセスしてデバイスを許可してあげると、通るようになったりしますので、試してみて下さい。


  

php_mbstringが導入されていない

 あまりないケースだとは思いますが、一応、日本語を扱う場合は、php_mbstringが導入されていなければなりません。これがないと、文字化けしたり動作しなかったりします。もしも導入していない場合は、こちらも導入してください。


  

おわりに

 PHPMailerは非常に便利なライブラリで、筆者もよく利用させてもらっていますが、けっこうたくさんエラーで悩んでいる人をみかけたために、今回はPHPMailerのカンタンな導入方法と、よくあるトラブルの対処方法をブログで情報共有してみました。如何でしたでしょうか。またこのような情報の共有もしていきたいと思いますので、よろしくお願い致します。



  
 

spankyjpnビデオライブラリー
Spankyjpn Youtube Video Library

Destiny2でのコインについて Destiny2でのパワー値UPについて
Destiny2でのコインについて Destiny2でのコインの3と奇妙なコインの扱いについて
犬の共食い 白犬、茶犬を食べる ((((;゚Д゚))))ガクガクブルブル
White Small Dog eats Big Brown Dog
イワシ・トルネード セブ・マクタン島でイワシ・トルネード!
Sardine Tornado at Cebu Mactan
与那国島ダイビング 沖縄県与那国島の海底遺跡ダイビング!
Scuba Diving in Okinawa
(Yonaguni Monument)
チゲ鍋 日本人とフィリピン人がチゲ鍋を作る!
Spanky&Ericka cooks Korean Food
Manta Night Diving ハワイ島のマンタナイトダイビング
Manta Night Diving at Hawaii Island
minecraft マインクラフト!水中神殿の水抜き
minecraft マインクラフト!最初の夜の過ごし方



このカテゴリのページリンク