今回は技術ネタです。
経緯
PHPを使って、メールを送信したかったのですが、PHPで実装されているメーラー?を使うとよく迷惑メールに入れられてしまいます。
そこで調べたところ、GmailのSMTP経由で送ると大丈夫っぽかったので、新規でGmailアカウントを作成し、そのアカウントを経由して送信することにしました。
外部のSMTPを使って送れるライブラリを調べた
下記の二つが見つかりました。
初めは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