【问题标题】:Sending mails automatically through action mailer Rails 3.1通过 action mailer Rails 3.1 自动发送邮件
【发布时间】:2012-01-14 03:46:22
【问题描述】:

我必须每周向所有用户发送有关最近发生的事情的电子邮件。我正在使用 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 文件,它得到了正确的东西。

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

谢谢,

【问题讨论】:

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


    【解决方案1】:

    好的,结果证明是 gem 的路径问题,并且是在我安装另一个版本的 ruby​​ 时产生的。

    在我的机器上,新的 ruby​​ 版本安装在 /usr/local/bin/ruby 中。在我的 Rails 应用程序中,我必须转到文件 script/rails 并将 #!/usr/bin/env ruby​​ 替换为 #!/usr/local/bin/ruby。

    我通过访问显示此错误消息的 cron.log 文件发现了这一点:- /usr/bin/env: ruby​​: No such file or directory

    我创建了一个 cron.log 文件来记录 cron 错误,这是我在问题中编写的 schedule.rb 代码中所做的:-

    every 2.minutes do
        runner "User.weekly_update", :environment => 'development', :output => 'log/cron.log' 
    end 
    

    我现在收到定期邮件。

    【讨论】:

      【解决方案2】:

      您似乎还没有配置 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
      

      根据用户名和密码添加您的工作密码/电子邮件。 不要忘记重启服务器。

      【讨论】:

      • 我收到了邮件,否则只是当我尝试安排稍后发送的电子邮件时,我没有收到任何邮件。我想这是我用来每周发送邮件的 gem 的错误实现
      • 这是我在日志 /usr/bin/env 中遇到的错误:ruby: No such file or directory
      猜你喜欢
      • 2011-05-15
      • 2013-05-21
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 2015-11-02
      相关资源
      最近更新 更多