有人可以帮我理解如何向我网站的所有用户发送电子邮件吗?我知道如果用户注册或提交联系表单或执行某些操作,如何创建电子邮件。但是,我无法弄清楚如何在没有执行某些操作的情况下发送电子邮件。
在我的config / environments / production.rb中,我有:
config.action_mailer.smtp_settings = {
:address => "smtp.mandrillapp.com",
:port => 587,
:domain => "majorfinder.com",
:user_name => ENV["MANDRILL_USERNAME"],
:password => ENV["MANDRILL_PASSWORD"],
:authentication => :plain,
:enable_starttls_auto => true
}
config.action_mailer.default_url_options = {
:host => "majorfinder.com"
}
在我的app / mailers / questions_mailer.rb中,我有:
class QuestionsMailer < ActionMailer::Base
default from: "lauralee@majorfinder.com"
def interest_question(user)
@user = user
mail(to: @user.email, subject: "My Subject")
end
我创建了我的电子邮件的txt和html版本,并将其放置在app / views / questions_mailer / email.html.erb / email.txt.erb中。
我缺少的是我在控制器中放入什么来发送电子邮件。它是这样的:
QuestionsMailer.interest_question(@user).deliver
发送时我有大约300个用户。我应该将其分解为多个批次(我在此处找到的内容:Sending emails based on intervals using Ruby on Rails)?
我不知道这是否重要,但我在heroku上托管,我的数据库是postgresql。
非常感谢你给我的任何帮助!
更新: 我跟着@ jefflunt的建议并创建了一个rake任务。这就是我的样子:
desc "Email to ask users what they're most interested in"
task :interests => :environment do
User.all.each do |u|
QuestionsMailer.interest_question(u).deliver
end
end
然后我在本地运行rake interests
以确保一切正常。一旦我将所有更改推送到heroku,我就运行heroku run rake interests
并向所有用户发送了一封电子邮件。
答案 0 :(得分:3)
创建rake
任务,遍历您网站上活跃用户的所有电子邮件地址,构建并发送每位用户一封电子邮件。
类似的东西:
namespace :transactional_emails do
desc "Email to ask users what they're interested in"
task :interests => :environment do
User.all.each |u| do
QuestionsMailer.interest_question(u).deliver
end
end
end
我不认为批量发送是非常重要的,除非任务完全占用你的CPU或占用比你在应用服务器上多余的RAM。它不太可能对您的数据库性能产生轻微影响。
可能需要加载:environment
(它基本上会加载您的Rails应用程序),以便加载您的数据库连接设置以及config/environments/production.rb
的ActionMailer配置。当您在rake
任务中加载环境时,您应该可以访问应用程序中的大多数内容,包括所有模型等。
一些注意事项:
rake
任务可以接受命令行参数。假设您以某种方式将用户分成User::active?
,User.veteran?
和User.recently_joined?
,.active?
用户是过去30天内登录的用户{{1}用户是您网站上已存在至少一年的用户,.veteran?
用户是在过去30天内创建帐户的用户。将某些内容传递到命令行,如:
recently_joined?
...可以有条件地将电子邮件发送到整个用户群的某个子集。
编写自定义bundle exec rake user_email SEGMENT=veterans
任务是covered here。
发送爆炸电子邮件时需要考虑的事项是为了增加避免垃圾邮件过滤器的机会,可以read here。