Ruby on rails Rails cron不发送电子邮件

Ruby on rails Rails cron不发送电子邮件,ruby-on-rails,ruby,ruby-on-rails-3,cron,Ruby On Rails,Ruby,Ruby On Rails 3,Cron,我正在使用Everyone 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.3m

我正在使用Everyone 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

如果操作邮件程序配置指定perform\u deliveries=false,则可能发生这种情况。您可以在环境文件中签出配置

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

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

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


如果是,您可以向Spamhaus请求解除该块

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

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

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

我的应用程序在不在cron中使用时发送电子邮件很好。我将尝试测试where gem是否在您的系统上正常工作。我的怀疑是,无论出于何种原因,实际上都没有运行任何东西,这可以解释为什么没有错误。除了所有我的puts语句都是在我的控制器方法和我的mailer方法中调用的,所以无论何时gem正常工作,生产中的smtp设置是什么?生产日志显示它正在发送(除非@EfratBlaier是对的,但既然你回答了,那么我想你已经检查过了)。你检查过sendmail的配置和日志了吗?sendmail日志会在哪里?哦,天哪,我刚刚检查了我的垃圾邮件文件夹。邮件被发送到那里。我是个白痴,正在使用媒体庙宇(dv).这是一个VPS,所以我不认为这就是你所说的云服务。
# needed for the 'whenever' gem
set(:whenever_command) { "RAILS_ENV=#{rails_env} bundle exec whenever"}
require "whenever/capistrano"
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"