#ruby-on-rails #mailgun
#ruby-on-rails #mailgun
Вопрос:
У меня есть приложение, которое отправляет уведомления по электронной почте. Некоторые пользователи упоминали, что они не получают уведомлений.
NotificationMailer.rb:
def send_daily_digest(user_id)
@user = User.find(user_id)
mail(to: @user.email, subject: "#{@jobs.count} new jobs yesterday")
mail(to: "myadminemail@gmail.com", subject: "TEST #{@jobs.count} new jobs yesterday for #{@user.email}")
end
Моя электронная почта myadminemail@gmail.com и я получаю электронное письмо. Я проверил журналы Mailgun, и другое (не административное) электронное письмо не отправляется.
Что может быть причиной этого?
РЕДАКТИРОВАТЬ: я только что внес следующие изменения:
def send_daily_digest(user_id)
@user = User.find(user_id)
@recipients = []
@recipients << @user.email
@recipients << myadminemail@gmail.com
mail(to: @recipients, subject: "#{@jobs.count} new jobs yesterday")
end
Внесение этого изменения правильно отправило электронное письмо обоим получателям. Так что, может быть, это как-то связано с тем, что не разрешено иметь два отдельных действия mail_to?
Моя проблема сейчас в том, что оба получателя указаны в электронном письме. Я хочу, чтобы электронные письма были отдельными и направлялись каждому пользователю. Как я могу это сделать?
Комментарии:
1. Вы проверили, не был ли заблокирован другой адрес электронной почты? Если вы отправляете электронные письма на тестовый адрес, отклоненный адрес может быть заблокирован Railgun.
2. Привет @Lomefin смотрите мои правки. Другой адрес не был заблокирован. Я только что подтвердил это.
Ответ №1:
/config/environments/development.rb
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:authentication => :plain,
:address => "smtp.mailgun.org",
:port => 587,
:domain => "you domain in https://mailgun.com/app/",
:user_name => "you user_name in https://mailgun.com/app/",
:password => "you password in https://mailgun.com/app/"
}
Комментарии:
1. Хммм .. да, у меня все правильно настроено, потому что мои электронные письма отлично отправляются на мой первый адрес
2. Возможно, вместо того, чтобы устанавливать для raise_delivery_errors значение false, вы могли бы установить для них значение true, чтобы мы могли проверить, есть ли какие-либо проблемы в rails, отправляющих первое электронное письмо.
Ответ №2:
Согласно документам Rails о ActionMailer, метод mail является основным методом, который создает сообщение и отображает шаблоны электронной почты.
Это означает, что эквивалентно ActionController #render, поэтому, возможно, он просто отправляет почту последнему получателю, вызванному методом mail.
Так что, возможно, вам следует переместить логику доставки в объект, управляющий почтовой программой.
Например, я называю эти объекты диспетчерами.
class ClientDispatcher
def self.dispatch_digests
Clients.all.each do |client|
DigestMailer.send_daily_digest(client).deliver_later
DigestMailer.send_daily_digest("admin@gmail.com").deliver_later
end
end
end
Комментарии:
1. Я вернулся сюда, чтобы похвалить. Метод mail добавляет некоторую информацию в сообщение, но она отправляется не сразу, поэтому информация добавляется, а не отправляется отдельно. Вы можете прочитать исходный код метода mail