4

我正在使用when gem 让rails cron 作业发送电子邮件。一切似乎都很好,我的 cron.log 或 production.log 文件中没有错误,但我从未收到电子邮件。我也检查了电子邮件地址是否正确。

任何帮助表示赞赏。

production.log 文件包含以下内容:

Connecting to database specified by database.yml
  Rendered email_mailer/send_birthday_reminders.html.erb (5.3ms)

Sent mail to tomcaflisch@gmail.com (409ms)

这是我的每当 gem schedule.rb 文件

set :output, "#{path}/log/cron.log"

every :hour do
    runner "BirthdayRemindersController.send_birthday_email_reminders"
end

生日提醒控制器.rb

class BirthdayRemindersController < ApplicationController

    # cron job that sends birthday reminders
    def self.send_birthday_email_reminders 
        users = User.all

        email_addresses = []

        users.each_with_index do |user, i|
            if user.user_details.birthday_reminders == true
                email_addresses[i] = get_primary_email(user)
            end
        end
        p "email_addresses to send to:"
        p email_addresses

        users.each do |user|
            p "this user is"
            p user.user_details.full_name
            if user.user_details.birthday.try(:strftime, "%m") == Date.today.strftime("%m") && user.user_details.birthday.try(:strftime, "%d") == Date.today.strftime("%d")
                p "reminder sent"
                EmailMailer.send_birthday_reminders(user, email_addresses).deliver
            end
        end
    end
end

email_mailer.rb 片段

class EmailMailer < ActionMailer::Base
  include ApplicationHelper
  default :from => "\"FamNFo\" <no-reply@mysite.com>"

  def send_birthday_reminders(birthday_person, email_addresses)
    p "we in send_birthday_reminders mailer"
    p email_addresses
    @birthday_person = birthday_person
    mail(:subject => "Birthday Reminder For The Caflisch Family", :to => email_addresses, :reply_to => email_addresses)
  end
end

capistrano 的 deploy.rb 包含这个

# needed for the 'whenever' gem
set(:whenever_command) { "RAILS_ENV=#{rails_env} bundle exec whenever"}
require "whenever/capistrano"
4

4 回答 4

3

如果您的操作邮件配置指定 perform_deliveries=false,则可能会发生这种情况。您可以检查环境文件中的配置。

于 2013-01-13T09:07:12.367 回答
3

检查您的垃圾邮件文件夹。为确保电子邮件不会在那里结束,请在每封电子邮件中添加一个“取消订阅”链接。

于 2013-01-17T15:44:00.513 回答
1

如果您的应用程序部署到云服务,那么您可能会在垃圾邮件文件夹中收到您的电子邮件。他们的整个 IP 块在 之类的服务中被注册为垃圾邮件Spamhaus,这是一个明智的预防措施,否则我们会收到比平时更多的垃圾邮件。

您应该在该字段中输入服务器的 IP 地址,以查看您是否被列为垃圾邮件发送者。

如果是,您可以向 Spamhaus 请求解除封锁。

于 2013-01-17T15:48:11.647 回答
0

我发现的另一个大问题是 PATH 和 rbenv 可能未在 CRONTAB 中初始化,具体取决于您的设置方式。我建议将以下内容添加到.bashrc文件顶部

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

这确保了如果您使用whenever调用完全可用的rbenv模型方法。ruby

于 2019-09-29T19:50:53.933 回答