actionmailer 3.0 结合ar_mailer_rails3 异步发送邮件
3 次投票
actionmailer 3.0 的用法有所改进,并结合ar_mailer_rails3做异步邮件的发送,是比较方便的一种选择,把邮件都交给后台任务来发送吧.
第一步当然是生成actionmailer的文件了:
$ rails g mailer notifier
生成好必要的文件后,我们来看以下actionmailer3新的写法:
class Notifier < ActionMailer::Basedefault :from => "from@example.com"def signup_notificationmail(:to => "friend@gmail.com", :subject => "New account information")endend
然后在相应的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,你的邮件是否已经发送成功了呢?