いつもお世話になっております。
RailsでWebアプリを作成しています。
rails runnerで
エクセルファイル内のリストからデータを読み込んで、Webアプリ内で利用するアカウントを作成し、その後、リスト内データのメールアドレスにメールを送信して送信が成功したらトランザクションを確定するようなコードを組みました。
メール送信に失敗したら、トランザクションをロールバックしています。
lang
1row = # エクセルから読み込んだデータ 2flag = false 3begin 4 ActiveRecord::Base.transaction do 5 # Userの生成 6 new_user = User.new(row) 7 new_user.skip_confirmation_notification! # メールをsave時に自動で送らない 8 new_user.save! 9 # MemberとStudentの生成 10 member_and_student_create(row,new_user) 11 # メール送信処理 12 send_password_instrunction_mail(new_user) 13 flag = true 14 end 15rescue Net::SMTPFatalError => e 16 # ログへの書き込みと画面出力 17 log_writer_and_puts(e) 18rescue => e 19 # その他例外処理 20end 21if flag 22 # アカウント生成成功処理 23else 24 # アカウント生成失敗処理 25end
正しいメールアドレスなら送信出来るというのは当然ですが、間違ったメールアドレスのとき、例外が発生する場合と、例外が発生しない場合があります。
lang
1config.action_mailer.raise_delivery_errors = true
configフォルダ内で上記のように設定してあるので、
外部のメールサーバーが即時配信を行っている場合はちゃんと例外が発生してくれています。
ただ、誤ったメールアドレスの場合に例外が返ってこないので、困っています。
(例:xxxxxxx@gmail.com.kikiki のような明らかに誤ったメールアドレスでも例外が発生しません。)
Deviseで生成したトークンを付与したリンク先から、ユーザ様自身でパスワードを設定してログインという流れを想定しているので、メール送信とアカウント作成で同期を取りたいという思いがあります。
telnetを叩いてメールアドレスの死活情報を取得なども出来るそうですが、メールサーバにログが残るということで気が進みません。
現状からどのような対応があるかお聞かせ頂けると有難いです。
環境
Ruby 2.3.1
Ruby on Rails 4.2.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/23 00:33