二重認証に対応していないアプリケーションでGmailを利用する方法
Gmailのアカウント乗っ取りを防止に効果のある二重認証。少し前に私の友人もアカウントを乗っ取られたため、慌てて設定しました。対策が功を奏して不正アクセスはされていません。
問題はここからです。とあるサービスでsendmailを利用していました。そのsendmailではメールの送信にGmailのSMPTサーバを利用していたので、二重認証設定後、認証に失敗してメール送信ができなくなりました。IDとPasswordだけだとログインできないように設定したので、当たり前といえば当たり前の話ですね。
もちろんGoogleでは解決策を用意してくれています。また、せっかくなので今回実際に設定した「ローカルのXAMPP環境でsendmailのSMTPサーバにGmailを利用する方法」も合わせて解説します。
今回はローカルですが、もちろん実サーバ用に設定すれば同じように利用できます。
最新版のfake sendmailのインストール
XAMPPにデフォルトで導入されているsendmailはTLS通信に対応しておらず、「Must issue a STARTTLS command first.」というエラーが出ます。そのため最新版をインストールする。
「sendmailの公式サイト」へアクセスして「sendmail.zip」をダウンロード。
解凍したフォルダを「C:\xampp」に置きます。(元のフォルダは「sendmail.org」とでも名前をつけてバックアップしておいてください)
PHPの設定
「C:\xampp\php\php.ini」の1149行目あたりにあるコメントアウトを削除
;sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
このコメントアウトを以下のように設定(sendmailの場所は上記で設置したもののパスに合わせてください)
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
sendmailの設定
「C:\xampp\sendmail\sendmail.ini」を編集します。
14行目
smtp_server=localhost
となっている部分を以下のようにGmailのSMTPサーバへ変更。
smtp_server=smtp.gmail.com
18行目
smtp_port=25
サブミッションポートへ変更
;smtp_port=25 smtp_port=587
31行目
;error_logfile=error.log
ここは設定しなくても構いませんが、後に問題が起きた時のためにエラーログを有効にしておきます。
error_logfile=error.log
41行目
;auth_username= ;auth_password=
Gmailログイン用のユーザー名とパスワードの設定(自身のものと置き換えてください)
auth_username=hoge@gmail.com auth_password=hugahuga
最終行に追記
smtp_ssl=auto
と、ここまで設定するとGmailのSMTPサーバ経由でメール送信ができます。
しかし二重認証を有効にしている場合、error.logに以下のようなエラーが出ます。
Application-specific password required. Learn more at<EOL>http://support.google.com/accounts/bin/answer.py?answer=185833
これは二重認証が有効の場合には「アプリケーション固有パスワード」が必要だというエラーです。
「アプリケーション固有パスワード」とは二重認証を利用したログインに対応していないアプリケーション用に発行される専用のパスワードです。
例え「アプリケーション固有パスワード」が外部に漏れたとしても本丸であるGoogleのアカウントを推察することは不可能なため、安全性が高まります。(アプリケーション自体の安全性は、アプリに依存します。)
以下ではアプリケーション固有パスワードを取得する方法と、sendmailへの設定方法を解説します。
追記
上記の設定で送信可能だったのが、「force_sender」を設定しないとエラーで送信できなくなったようです。sendmailのerror.logに「Message is missing sender’s address」と記載されます。
送信者のアドレスを設定する項目のようですが、GmailのSMTPサーバから送信されれば、そちらが送信元となるため、実質あまり意味のない項目ですが、設定しないとエラーになリます。適当にGmailのメールアドレスでも設定しておいてください。
force_sender=hoge@example.com
Gmailのアプリケーション固有パスワードを取得する方法
1.Gmailにログインしたら「アカウント」を開きます。もしくは「https://www.google.com/settings/account」へアクセス。(2013年7月現在:https://security.google.com/settings/securityへ移動しているようです)
2.一番下の「接続済みのアプリケーションとサイト」にある「アクセスを管理する」ボタンをクリック。
すると再びパスワードの入力を求められるので、入力します。
3.下にある「アプリケーション固有のパスワード」にある「ステップ 1/2: 新しいアプリケーション固有のパスワードを生成する」で、「名前」に適当な名前(今回はsendmailにしました)をつけて「パスワードを生成する」ボタンをクリック。
4.すると「ステップ 2/2: 生成したアプリケーション固有のパスワードを入力する」の欄に表示されるパスワードをコピーして、「完了」ボタンをクリックします。
アプリケーション固有パスワードをsendmailに設定する
再び「C:\xampp\sendmail\sendmail.ini」を編集します。
41行目
「auth_password」に先ほど取得した「アプリケーション固有パスワード」を入力。
auth_username=hoge@gmail.com auth_password=取得したアプリケーション固有パスワード
以上でsendmailでもGoogleのSMTPサーバを利用することができます。同じように二重認証に対応していないサービスを利用している場合は「アプリケーション固有パスワード」で対応が可能です。
ピンバック: 2013.03.15 の気になる記事 | MISEKAKE Blog