Gmailの二重認証を利用するとsendmailが送れなくなる場合の対処法


投稿日:2013年3月15日
  • 5
  • 2
  • 7



二重認証に対応していないアプリケーションでGmailを利用する方法

gmail_sendmail

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」をダウンロード。

gmail_sendmail01

解凍したフォルダを「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.一番下の「接続済みのアプリケーションとサイト」にある「アクセスを管理する」ボタンをクリック。
すると再びパスワードの入力を求められるので、入力します。

gmail_sendmail02

3.下にある「アプリケーション固有のパスワード」にある「ステップ 1/2: 新しいアプリケーション固有のパスワードを生成する」で、「名前」に適当な名前(今回はsendmailにしました)をつけて「パスワードを生成する」ボタンをクリック。

gmail_sendmail03

4.すると「ステップ 2/2: 生成したアプリケーション固有のパスワードを入力する」の欄に表示されるパスワードをコピーして、「完了」ボタンをクリックします。

gmail_sendmail04

アプリケーション固有パスワードをsendmailに設定する

再び「C:\xampp\sendmail\sendmail.ini」を編集します。

41行目

auth_password」に先ほど取得した「アプリケーション固有パスワード」を入力。

auth_username=hoge@gmail.com
auth_password=取得したアプリケーション固有パスワード

以上でsendmailでもGoogleのSMTPサーバを利用することができます。同じように二重認証に対応していないサービスを利用している場合は「アプリケーション固有パスワード」で対応が可能です。



現在のページを共有する



現在のページに関連する記事


おすすめの記事