Управление регистрацией и отправкой электронной почты в разных средах - PullRequest
6 голосов
/ 05 января 2011

В приложении Rails я настроил новую промежуточную среду со следующими параметрами в своем файле environments/:

config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp

Однако, когда система генерирует электронное письмо, оно печатается на staging.log файл вместо отправки.Мои настройки SMTP отлично работают в других средах.В какой конфигурации я пропускаю электронные письма для отправки?

Редактировать: Да, в промежуточном окне установлена ​​допустимая конфигурация для SMTP-сервера, к которому он имеет доступ.Кажется, что проблема не в настройках SMTP (если бы это было, я не получу ошибки в журналах?), А в конфигурации Rails.Приложение по-прежнему перенаправляет электронные письма в файл журнала (например, «Отправлено: ...»), в отличие от фактического прохождения через SMTP.

Edit # 2: Похоже на электронные письмана самом деле отправлял правильно, они просто печатали в журнале.Я пытаюсь использовать гем sanitize_email для перенаправления почты на другой адрес, но это, похоже, не работает, поэтому я подумал, что письма не отправляются.Так что я думаю, что это решает мою проблему, хотя мне все еще любопытно, что в настройках ActionMailer контролирует отправку электронной почты, запись в файл журнала или и то, и другое.

Редактировать # 3: проблема с sanitize_email сводилась ко мне с необходимостью добавить новую промежуточную среду к ActionMailer::Base.local_environments.Я оставлю этот вопрос открытым, чтобы посмотреть, сможет ли кто-нибудь ответить на мой последний вопрос (что определяет, будут ли электронные письма ActionMailer отправляться, регистрироваться в файле журнала или и то, и другое?)

1 Ответ

11 голосов
/ 06 января 2011

Что касается вашего третьего редактирования, регистрация - это функция уровня журнала, который вы установили для самого приложения, а не какой-либо конкретной настройки в ActionMailer.

В Rails 2.3, ActionMailer::Base просто отправьте электронное письмо любому настроенному регистратору, если таковой имеется.Получатель отправляется в журнал info, а тело письма отправляется в журнал debug.(Комментарии мои. Остальное прямо из исходного кода.)

def deliver!(mail = @mail)
  raise "no mail object available for delivery!" unless mail

  #
  # Logging happens first (or not)
  #
  unless logger.nil?
    logger.info  "Sent mail to #{Array(recipients).join(', ')}"
    logger.debug "\n#{mail.encoded}"
  end

  #
  # And then we decide if an email should really get sent
  #
  begin
    __send__("perform_delivery_#{delivery_method}", mail) if perform_deliveries
  rescue Exception => e  # Net::SMTP errors or sendmail pipe errors
    raise e if raise_delivery_errors
  end

  return mail
end

В вашем файле environment.rb или staging.rb должна быть строка, управляющая уровнем журнала.Что-то вроде следующего:

config.log_level = :debug

Это все полностью отделено от конфигурации почтовой программы, которую вы уже нашли, которая определяет, отправлено письмо или нет.

config.action_mailer.perform_deliveries = true
...