我必须每周向所有用户发送有关最新动态的电子邮件。我正在使用ActionMailer完成其他邮件任务,但我不知道如何自动化每周电子邮件。
更新
我找到了whenever gem,可用于安排cron作业。我想这可以用来发送我打算发送的每周电子邮件。一旦找到解决方案,仍然在寻找如何使其与ActionMailer一起使用将更新
更新2
这是我到目前为止使用whenever gem所做的事情: -
在schedule.rb
中every 1.minute do
runner "User.weekly_update", :environment => 'development'
end
在users_mailer.rb
中def weekly_mail(email)
mail(:to => email, :subject => "Weekly email from footyaddicts")
end
在users.rb
中def self.weekly_update
@user = User.all
@user.each do |u|
UsersMailer.weekly_mail(u.email).deliver
end
end
如果我尝试从控制台运行User.weekly_update,我可以收到邮件。我正在开发模式下测试并使用rvm。我检查了我的crontab文件,它有正确的东西。
但是我没有从应用程序自动收到任何邮件。有什么可能是错的线索?
谢谢,
答案 0 :(得分:2)
确定无论何时gem都会出现路径问题,而且当我安装另一个版本的ruby时问题就出现了。
在我的机器中,新的ruby版本安装在/ usr / local / bin / ruby中。在我的rails应用程序中,我必须转到文件脚本/ rails并用#!/ usr / local / bin / ruby替换#!/ usr / bin / env ruby。
我通过访问cron.log文件找到了这个,显示了以下错误消息: - / usr / bin / env:ruby:没有这样的文件或目录
我创建了一个cron.log文件来记录cron错误这就是我在我的schedule.rb代码中写的问题: -
every 2.minutes do
runner "User.weekly_update", :environment => 'development', :output => 'log/cron.log'
end
我现在收到定期邮件。
答案 1 :(得分:0)
好像您还没有配置ActionMailer设置。 首先从控制台检查日志,邮件进程是否正常工作(粘贴日志)。 如果是,则执行以下步骤。
在你的gemfile中添加它。
gem 'tlsmail'
运行
bundle install
在config / environments / development.rb文件中编写这些配置设置
require 'tlsmail'
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:enable_starttls_auto => true,
:authentication => :login,
:user_name => "<address>@gmail.com",
:password => "<password>"
}
config.action_mailer.raise_delivery_errors = true
根据user_name和密码添加您的工作密码/电子邮件。 不要忘记重启服务器。