我想在我的rake任务中使用ActionMailer,以便在特定时间向人们发送电子邮件。
我在app / mailers文件夹中编写了一个邮件程序类,如下所示:
class AlertsMailer < ActionMailer::Base
default from: 'x@y.com'
def mail_alert(email_addresses, subject, url)
@url = '#{url}'
mail(to: email_addresses, subject: 'Alert') do |format|
format.html { render '/alerts/list' }
end
end
end
然后我在rake任务中包含以下行:
AlertsMailer.mail_alert(email_addresses, subject)
当我尝试运行rake任务时:
rake update_db
我收到以下错误:
uninitialized constant AlertsMailer
我想我必须以某种方式在我的rake任务中加载邮件程序类,但我不知道如何做到这一点。
请帮忙。
答案 0 :(得分:8)
我有以下内容并且正在运作:
# in lib/tasks/mailme.rake
task :mailme => :environment do
UserMailer.test_email(1).deliver
end
并且
# in app/mailers/user_mailer.rb
class UserMailer < ActionMailer::Base
def test_email(user_id)
@user = User.find_by_id user_id
if (@user)
to = @user.email
mail(:to => to, :subject => "test email", :from => "default_sender@foo.bar") do |format|
format.text(:content_type => "text/plain", :charset => "UTF-8", :content_transfer_encoding => "7bit")
end
end
end
end
答案 1 :(得分:7)
从您的代码中,我相信您正在使用Rails。
您可以通过要求依赖环境任务来加载Rails环境,如下所示:
task :my_task => :environment do
...
end
而不是
task :my_task do
...
end
如果有帮助,请告诉我。