Автоматическая отправка писем через action mailer Rails 3.1

Я должен отправлять еженедельные электронные письма всем пользователям о последних событиях. Я использую ActionMailer для выполнения другой почтовой задачи, однако я понятия не имею, как автоматизировать еженедельные электронные письма.

Обновить

Я нашел гем whenever, который можно использовать для планирования заданий cron. Я предполагаю, что это может быть использовано для отправки еженедельных электронных писем, которые я намереваюсь делать. Все еще ищу, как заставить его работать с ActionMailer, обновлю, как только найду решение

Обновление 2

Это то, что я сделал до сих пор, используя гем whenever: -

в расписании.рб

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, и в нем есть все, что нужно.

Однако я не получаю никаких писем автоматически из приложения. Любая подсказка, что может быть не так?

Спасибо,


person Dev R    schedule 06.12.2011    source источник


Ответы (2)


ОК, так что это проблема пути с всякий раз, когда драгоценный камень, и проблема была создана, когда я установил другую версию ruby.

На моей машине новая версия ruby ​​установлена ​​в /usr/local/bin/ruby. В моем приложении rails мне пришлось перейти к файлу script/rails и заменить #!/usr/bin/env ruby ​​на #!/usr/local/bin/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 

Теперь я получаю периодические письма.

person Dev R    schedule 08.12.2011

Похоже, вы не настроили параметры 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

добавьте свой рабочий пароль/адрес электронной почты против имени пользователя и пароля. Не забудьте перезагрузить сервер.

person Muhammad Sannan Khalid    schedule 07.12.2011
comment
Я получаю почту, в противном случае это просто то, что когда я пытаюсь запланировать отправку писем на более поздний момент, я не получаю никакой почты. Я предполагаю, что это моя плохая реализация драгоценного камня всякий раз, который я использую для доставки еженедельной почты. - person Dev R; 07.12.2011
comment
это ошибка, которую я получаю в журналах /usr/bin/env: ruby: нет такого файла или каталога - person Dev R; 09.12.2011