通过动作邮件程序Rails 3.1自动发送邮件

时间:2011-12-06 14:37:27

标签: ruby-on-rails-3.1 actionmailer whenever

我必须每周向所有用户发送有关最新动态的电子邮件。我正在使用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文件,它有正确的东西。

但是我没有从应用程序自动收到任何邮件。有什么可能是错的线索?

谢谢,

2 个答案:

答案 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和密码添加您的工作密码/电子邮件。 不要忘记重启服务器。