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


投稿日:2013年3月15日
  • 10
  • 0



二重認証に対応していないアプリケーションで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サーバを利用することができます。同じように二重認証に対応していないサービスを利用している場合は「アプリケーション固有パスワード」で対応が可能です。


現在のページを共有する



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

joyful.cgiで投稿があったときにメールで知らせる joyful.cgiで投稿があったときにメールで知らせる
Gmailの二重認証を利用するとsendmailが送れなくなる場合の対処法 Windowsローカル環境にXAMPPでサーバを構築して、WordPressをインストールする方法
Gmailの二重認証を利用するとsendmailが送れなくなる場合の対処法 GMO系列のホスティングサービスでGmailへメールが送信できない不具合が発生中
Gmailの二重認証を利用するとsendmailが送れなくなる場合の対処法 WordPress、XAMPP、WindowsXPで.htaccessがエラーになる場合の対処法
Gmailの二重認証を利用するとsendmailが送れなくなる場合の対処法 XAMMP導入時にApacheのVirtualHostを設定する方法
Gmailの二重認証を利用するとsendmailが送れなくなる場合の対処法 XAMPP1.8.2でCGIプログラムを実行する方法
Gmailの二重認証を利用するとsendmailが送れなくなる場合の対処法 LaravelでOAuthを利用してTwitter、Facebook、Googleアカウントでログインを実装

おすすめの記事

最新のXAMPPをインストールし、安全・高速に運用する方法

最新のXAMPPをインストールし、安全・高速に運用する方法

サーバリソースをリアルタイムに監視するdstatのインストールと使い方

サーバリソースをリアルタイムに監視するdstatのインストールと…

自前の国別IPv6、IPv4アドレス割当リストを作成しよう

自前の国別IPv6、IPv4アドレス割当リストを作成しよう

標準のアンインストーラーで消えないソフトを徹底的に削除する方法

標準のアンインストーラーで消えないソフトを徹底的に削除する…

5段階評価プラグインを通して学ぶPukiWikiのプラグインを作成する方法

5段階評価プラグインを通して学ぶPukiWikiのプラグインを作成す…

ページ編集の手間を劇的に減らす、Custom Field Templateでカスタムフィールドを作る方法

ページ編集の手間を劇的に減らす、Custom Field Templateでカス…

Web Fontの使い方とGoogle Fontsのオススメフォント 10選

Web Fontの使い方とGoogle Fontsのオススメフォント 10選

Google Feed APIの代替手段としてjQueryだけでRSSを表示する方法

Google Feed APIの代替手段としてjQueryだけでRSSを表示する方法


いただいたコメントなど

  1. ピンバック: 2013.03.15 の気になる記事 | MISEKAKE Blog

コメントを残す

コメントは認証制のため、すぐには反映されません。

プログラミングに関する質問は「日本語でプログラミングの悩みを解決するQ&Aサイト sukegra」をご利用ください。