メモ:AndroidでGmailを送信で「javax.mail.AuthenticationFailedException」

Androidアプリからメールを送信するといえばGmailを使ってadditional.jarとmail.jarとactivation.jarをダウンロードしてAndroidStudioで開発するプロジェクトのapp直下のlibsディレクトリにセットして使う方法がポピュラー。

だだ追加した後に、build.grandleに以下のように設定

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
    compile files('libs/ additionnal.jar')
    compile files('libs/ mail.jar')
    compile files('libs/ activation.jar')
}

後は、サンプルプログラムを調べていけば良いのですが、そのままだと上手く行かず、たいていjavax.mail.AuthenticationFailedExceptionが発生してまう。

普通にデバッグしてもAuthenticationFailedExceptionがでるだけで今ひとつわからない。そんなときのデバッグがこちら。sessionでID(Gmail)とパスワードを認証するのですが、そのときにデバッグを設定をするとけっこう詳細にログがでできます。

// セッション
final Session session = Session.getInstance(property, new javax.mail.Authenticator() {
     @Override
     protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication('senderのメールアドレス', 'senderのパスワード');
     }
});
session.setDebug( true );  // デバッグモードにする

これで結構いろいろ表示される。AuthenticationFailedExceptionということで認証エラーですが。。。それでログの中に「Please log in via your web browser…」のようなエラーが。

これが原因ぽい。大抵の場合、Gmailのセキュリティに引っかかってるようで、ひとつは、アプリのGmailアカウントへのアクセスを許可する、もうひとつは、安全性の低い(開発中のアプリ)アプリのアクセスをONにする。この2点らしい。

くわしくはこちら
①アプリのGmailのアカウントへのアクセスをON
https://accounts.google.com/DisplayUnlockCaptcha
②安全性の低いアプリのアクセスをON
https://www.google.com/settings/security/lesssecureapps