Как сделать так, чтобы ActiveMailer всегда писал мне по почте? - PullRequest
1 голос
/ 01 января 2012

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

Таким образом, в режиме разработки вместо отключения электронной почты я хочу, чтобы мое приложение отправляло письма, но изменило поле «на», чтобы каждое письмо отправлялось мне. Это возможно?

Обновление : я хочу проверить полный маршрут, по которому проходит моя электронная почта: проходить через ESP, приходить в почтовый ящик, просматривать его в gmail. Я не просто хочу проверить, что электронное письмо создано.

Ответы [ 4 ]

2 голосов
/ 01 января 2012

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

Создайте новый инициализатор в вашем каталоге config/initializers в вашем приложении Rails:

# config/initializers/development_mail_interceptor.rb
class DevelopmentMailInterceptor
  def self.delivering_email(message)
    message.subject = "[#{message.to}] #{message.subject}"
    message.to = "YOUR_EMAIL@gmail.com"
  end
end
ActionMailer::Base.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?

Это использует мощь перехватчика в вашем приложении. Он ничего не настраивает, а скорее изменяет конверт сообщения, изменяя поля to и subject. Замените YOUR_EMAIL на правильное значение.

Метод self.delivering_email(message) вызывается ActionMailer. Вы подключаетесь к этому методу и переопределяете конверт сообщения.

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

Обязательно перезапустите сервер, и вся ваша почта (в разработке) будет фактически отправлена ​​на вашу электронную почту.

1 голос
/ 01 января 2012

Избавьте себя от неприятностей и запустите MailCatcher . MailCatcher - это простой SMTP-сервер, который просто захватывает исходящую электронную почту и передает ее вам в простом веб-интерфейсе. Установите MailCatcher, добавьте это к своему environments/development.rb:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { :host => 'localhost', :port => 1025 }

Запустите MailCatcher, когда вы запускаете сервер Rails (или используете Foreman или что-то подобное, чтобы справиться с ним), а затем перейдите на http://localhost:1080/, чтобы просмотреть электронное письмо, которое отправляет ваше приложение.

1 голос
/ 01 января 2012

Вы можете попробовать что-то вроде MockSMTP (OS X);вместо того, чтобы изменять поля «to», вы вместо этого настраиваете почтовый сервер для режима dev на «поддельный» SMTP-сервер, созданный приложением, и с этого момента ВСЕ электронные письма (отправленные кому-либо) переходят вместо этого в приложение.

Я никогда не использовал его сам, но помню, что разработчики 37signals используют его .

В других операционных системах вы можете рассмотреть один из следующих проектов:

  • letter_opener от Ryan Bates - всплывающее окно нового браузера при отправке электронного письма
  • MailCatcher (упомянутое mu слишком короткое)- работает поддельный SMTP-сервер и веб-интерфейс для просмотра отправленной на него почты
  • mailtrap - аналогично MockSMTP, имеет как поддельный SMTP-сервер, так и отдельную программу просмотра
0 голосов
/ 02 января 2012

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

Используйте драгоценный камень mail_safe! Помимо предоставления функциональности из ответа sethvargo, он не требует никакой работы, кроме добавления драгоценного камня, и он автоматически определяет, кому отправлять электронные письма из их .gitconfig.

Одно важное замечание, которое я редко упоминал при исследовании, это то, что вы должны использовать deliver, а не deliver!. Последний не вызывает перехватчиков (хотя, по-видимому, он все еще вызывает наблюдателей, если это полезно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...