rails3异步发邮件

actionmailer 3.0 结合ar_mailer_rails3 异步发送邮件

jerry 分享于 3 个月 前, 0 条回复244 次浏览

actionmailer 3.0 的用法有所改进,并结合ar_mailer_rails3做异步邮件的发送,是比较方便的一种选择,把邮件都交给后台任务来发送吧.

第一步当然是生成actionmailer的文件了:

$  rails g mailer notifier  

生成好必要的文件后,我们来看以下actionmailer3新的写法:

class Notifier < ActionMailer::Base
  default :from => "from@example.com"
  
  def signup_notification
    mail(:to => "friend@gmail.com", :subject => "New account information")
  end
  
end  

然后在相应的view目录下建一个signup_notification.html.erb文件.

开始安装ar_mailer_rails3,在gemfile里加入

gem 'ar_mailer_rails3'

运行:

$  bundle install  

完成后,就可以来创建临时存储邮件的表了:

$  rails g ar_mailer_rails3 email  

initializers目录下会生成一个ar_mailer.rb的初始化文件,为了方便起见,我们可以把gmail的smtp配置信息写在这里:

config_file = "#{Rails.root}/config/smtp_gmail.yml"
raise "Sorry, you must have #{config_file}" unless File.exists?(config_file)

config_options = YAML.load_file(config_file) 
ActionMailer::Base.smtp_settings = {
  :address => "smtp.gmail.com",
  :port => 587,
  :authentication => :plain,
  :enable_starttls_auto => true
}.merge(config_options) # Configuration options override default options  

当然,我们首先要在config/目录下创建一个smtp_gmail.yml的gmail用户配置信息,如下:

--- 
  :user_name: youremail@gmail.com
  :password: yourpasword  

ok,配置完成,接下来开启两个终端,一个开console,一个开development.log:

$  rails console  
$  tail -f log/development.log  

调用刚才写的方法:

>>  message = Notifier.signup_notification
>>  message.deliver  

日志中是否已经有相关信息了呢? 不急,ar_mailer_rails3 将邮件临时存进了数据库,接下来是启动后台任务的时候了:

$  ar_sendmail_rails3

再看看log,你的邮件是否已经发送成功了呢?

原文地址:https://www.cnblogs.com/lexus/p/1906041.html