2011-12-31 2 views
1

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

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

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

+0

Почему бы просто не прикрепить свой собственный адрес электронной почты к тестовой учетной записи? –

+0

Потому что мы отправляем почту не только владельцу учетной записи. А также было бы слишком легко ускользнуть и отправить по электронной почте клиентов. –

ответ

0

Насколько мне нравится this answer, я пошел с другим вариантом.

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

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

1

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

Я никогда не использовал его сам, но я помню, что видел это the devs at 37signals use it.

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

  • letter_opener Райан Бейтс - всплывет новое окно браузера, когда отправляется сообщение электронной почты
  • MailCatcher (упоминается мю слишком коротка) - запускает поддельную SMTP-сервер и веб-интерфейс для просмотра почты посланного к нему
  • mailtrap - аналогично MockSMTP, имеет и макет SMTP-сервер, а также отдельную программу просмотра
+0

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

1

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

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

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

+0

Спасибо за ответ, но это не то, что я ищу. Я хочу получить электронное письмо в своем почтовом ящике. Я обновил вопрос, чтобы подчеркнуть это. –

2

Я лично рекомендую 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 = "[email protected]" 
    end 
end 
ActionMailer::Base.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development? 

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

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

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

Обязательно перезагрузите сервер, и вся ваша почта (в разделе «Разработка») будет отправлена ​​на ваш адрес электронной почты.

+0

Удивительно, это похоже на то, что я ищу. Я попробую! –

+0

Не могли бы вы уточнить, что вы имеете в виду, когда говорите, что другие предложили плагины для ** доставки ** почты - это не похоже на то, что у них есть, поэтому, возможно, я неправильно понимаю, что вы подразумеваете под «доставкой». –

+0

Я имел в виду просмотр почты, а не ее доставку. – sethvargo

Смежные вопросы