ニートの言葉

元ニートがやってみたこと・その過程で学んだこと・考えたこと・技術メモあたりを主に書いています。情報革命が起きた後に訪れるであろう「一億総ニート時代」の生き方を考え中です。

【技術記事】PHPMailerでGmailのSMTP経由でメールを送信する際にSMTP connect() failed.と出て困った

今回は技術ネタです。

 

経緯 

PHPを使って、メールを送信したかったのですが、PHPで実装されているメーラー?を使うとよく迷惑メールに入れられてしまいます。

 

そこで調べたところ、GmailのSMTP経由で送ると大丈夫っぽかったので、新規でGmailアカウントを作成し、そのアカウントを経由して送信することにしました。

 

外部のSMTPを使って送れるライブラリを調べた

下記の二つが見つかりました。

 

・qdmail

・PHPMailer

 

初めはqdmailを使おうと思いましたが、随分前に更新が止まっていたのと、PHP5.5だと警告が出るという情報があった上に、軽く試した結果いろいろエラーが出た(詳細はメモし忘れました)ので、PHPMailerを使うことにしました。

 

参考にした情報

・Phpmailerでスパム回避!Gmail等のSMTPを経由するPHPのメールフォーム解説 | エス技研

・PHPMailer で GMail 送信 – Airwhite Memo

 

直面した問題

上記サイトのソースを参考に動かしてみたのですが、SMTP connect() failed.と表示され、送信できませんでした。

 

上記のサイトを見比べてもらえるとわかるのですが

・ポートが465だったり587だったり

・SSLだったりTLSだったり

この組み合わせを間違っているのが原因なのかなと推測したのですが、違ったようです。

ちなみに 

公式サイトには

ポート 465(SSL)とポート 587(TLS)

と書いてあるので、

・SSLを選択する場合はポート465を

・TLSを選択する場合は587を

選択するべきなようです。

 

解決方法

Gmailにはセキュリティの関係上、外部のサービスを使えないようにするような対策がされていたようです。

 

こちらにアクセスして安全性の低いアプリのアクセスをオンにするを選択してください。

https://www.google.com/settings/security/lesssecureapps

 

反映されるまで時間がかかる可能性も?

これは推測なのですが、この設定が反映されるまで時間がかかるかもしれません。

というのも、動かなかったソースが上記の設定変更してすぐは相変わらず動かなかったのに、半日ほど放置して再度確認すると動くようになっていたからです。

 

この設定が反映まで時間がかかるものなのか、それとも新規で作成したアカウントだったからなのか 原因はわかりませんが…情報として記載しておきます。

 

最後に動作したソースを貼っておきます

準備

この三つを同一フォルダに入れておきます。

・PHPMailerAutoload.php

・class.smtp.php

・class.phpmailer.php

 

ソース