Rails&Heroku / Gmailを使わないでユーザーに一斉メール送信する

Railsアプリからウェブサイトの登録ユーザー宛に、メールを送信する際に、Gmailを使ったらそっこうでアカウントをロックされたので、別の手段を取ることに。

Gmailは、自分のログインしたことのない場所で、何者かがログインを試みようとすると警告を出してきます。よく海外を移動する身としては、毎回確認されてイラっとすることも。クレジットカード会社も同じようなことをやってますよね。
  
で、今回はRailsアプリからGmail経由でメール送信しようと思ったんですが、Heroku(ヨーロッパリージョン)に乗っているので、ヨーロッパから大量の不正ログインがあったと判断され、強制的にパスワードのリセットを求められました。
Gmailの親切機能ですが、アプリで使うのは無理だ…ということで他の方法は…
  
普通にHerokuのadd-onに選択肢がけっこうありますね。
  

Mandrill

あのMailChimpによって提供されているのは、Mandrillというadd-on。
12,000通/月まで無料です。
今のところ十分なので、これでいくことにしました。

自分のアプリにadd-onを追加すると、SMTPユーザーネームとSMTPパスワードが取得できるので、それを使って、Railsを設定。

config/environments/production.rb  

ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  # For Mandrill
  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address   => "smtp.mandrillapp.com",
    :port      => 587, 
    :enable_starttls_auto => true,
    :user_name => "appxxxxxxxxxx@heroku.com",
    :password  => "xxxxxxxxxxxxxxxxxxxxx", 
    :authentication => 'login', 
    :domain => 'heroku.com', 
  }

これでサクッとメールが送信できる。
controllerやmailerの処理は基本変えなくていいんですが、一点だけ、変更しないとメールが送られなかったので、メモ。

mailers/your_mailer.rb

ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class YourMailer < ActionMailer::Base

  def my_mail(user)
    @user = user
    begin
      mail to: user.email,
           subject: "#{user.name}さん、こんにちは!",
           from: "xxxx@yourdomain.com"
    rescue => e
      puts "エラー : #{e.message}"
    end
  end
end

from: "xxxx@yourdomain.com" を省略すると、メールが送られなかった。

  
以上です。
開封率なんか自動で収集してくれるので、とても便利。

Screen Shot 2014-05-28 at 1.36.35 PM

参考

Using Mandrill's SMTP integration with Web Frameworks

Mandrill by MailChimp

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた