【メール送信エラー】Net::SMTPAuthenticationError
メール送信周りでちょっとはまりかけたのでメモ。
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段階認証を有効にして、
アプリ固有のパスワードを作り、実装にそのパスワードを組み込むのが手っ取り早いと思います。
↑ 左上の「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