Автоматическая отправка почты через action mailer Rails 3.1 - PullRequest
1 голос
/ 06 декабря 2011

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

Обновление

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

Обновление 2

Это то, что я делал до сих пор, используя всякий раз, когда gem: -

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

every 1.minute do
    runner "User.weekly_update", :environment => 'development'
end

in 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 ]

2 голосов
/ 09 декабря 2011

ОК, так что, как оказалось, проблема с путями в любом геме возникла, когда я установил другую версию 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 

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

0 голосов
/ 07 декабря 2011

Похоже, вы не настроили параметры ActionMailer.Сначала проверьте журналы с консоли, работает ли почтовый процесс (вставьте свои журналы).Если да, то выполните следующие шаги.

добавьте это в свой gemfile.

gem 'tlsmail'

run

bundle install

запишите эти настройки конфигурации в вашей конфигурации / средах / разработке.rb file

  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

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

...