Posted at

【メール送信エラー】Net::SMTPAuthenticationError - 534-5.7.14 <https://accounts.google.com/ContinueSignIn ...

More than 3 years have passed since last update.

メール送信周りでちょっとはまりかけたのでメモ(上記エラー)

ponyというgemを使ってSMTPでメール送信をしようとしてました。

サイトからユーザーが申し込みしてきたら、申込完了メールをユーザーに送信するイメージです。

★環境

・Ruby

・pony on sinatra

・Gmailで送信(from @gmail.com)

たぶんRails(ActionMailer)でもあまり変わらないと思います。

普通にドキュメントに書かれてる通り実装すると、

Net::SMTPAuthenticationError - 534-5.7.14 <https://accounts.google.com/ContinueSignIn ...

というエラーが出てしまいました。

http://www.google.com/accounts/DisplayUnlockCaptcha

上記にアクセスして許可すればいいとう記事もありましたが、うまくいかず。

結論をいうと、送信したいGmailアカウントの設定から2段階認証を有効にして、

アプリ固有のパスワードを作り、実装にそのパスワードを組み込むのが手っ取り早いと思います。

スクリーンショット 2014-10-24 11.22.22.png



左上の「2段階認証プロセス」の設定を有効にすると「アプリパスワード」という項目が現れるので設定してください。

以上でうまくいくと思います。

※参考までにponyを使った実装を載せておきます。

def send_complete_mail

# charsetはデフォルトでutf-8なのですが、指定してないと怒られた気がします。
Pony.mail(
to: '送信先メールアドレス',
subject: '件名',
body: send_mail_body,
charset: 'utf-8',
via: :smtp,
via_options: {
address: 'smtp.gmail.com',
user_name: 'アカウント名@gmail.com',
password: 'アプリ固有のパスワード',
authentication: :plain,
domain: 'サイトのドメイン名'
}
)
end

def send_mail_body
# send_mail.erbというファイルを用意しておけばよいです。
# localsのハッシュでview内の変数に値を渡せます。
erb :send_mail, locals: {
hoge: session[:hoge],
fuga: session[:fuga]
}
end