Как проверить правильность учетных данных Rails Mailer? - PullRequest
6 голосов
/ 23 февраля 2011

У меня есть почтовик, отправляющий через учетную запись GMail, и я хочу проверить, что ActionMailer может фактически войти на SMTP-сервер GMail с предоставленными мною учетными данными.Какой лучший способ проверить это?

Ответы [ 2 ]

10 голосов
/ 23 мая 2011

Это не решение с полным стеком, но вы можете проверить правильность проверки подлинности сервера, используя Net :: SMTP напрямую. Gem Mail, который Rails 3 использует для отправки электронных писем ActionMailer, использует Mail следующим образом (с вашими ActionMailer.smtp_settings):

  #line 96 of mail-2.2.7/lib/mail/network/delivery_methods/smtp.rb
  smtp = Net::SMTP.new(settings[:address], settings[:port])
  if settings[:enable_starttls_auto]
    smtp.enable_starttls_auto if smtp.respond_to?(:enable_starttls_auto) 
  end

  smtp.start(settings[:domain], settings[:user_name], settings[:password],
   settings[:authentication]) do |smtp|
     smtp.sendmail(message, envelope_from, destinations)
     # @Mason: this line need not be included in your code. SMTP#start throws
     # a Net::SMTPAuthenticationError if the authentication was not successful.
     # So just putting this call to #start with an empty block in a method and
     # calling assert_no_raise Net::SMTPAuthenticationError should do the trick.
     # The empty block is necessary so that the connection gets closed.
     # Reference #{rubydir}/lib/ruby/1.8/net/smtp.rb for more info.
  end

Похоже, ActionMailer :: Base.smtp_settings также доступен:

  settings = ActionMailer::Base.smtp_settings

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

5 голосов
/ 21 января 2015
smtp = Net::SMTP.new settings[:address], settings[:port]
smtp.enable_starttls_auto if settings[:enable_starttls_auto]
smtp.start(settings[:domain]) do
  expect {
    smtp.authenticate settings[:user_name], settings[:password], settings[:authentication]
  }.to_not raise_error
end

Вызов authenticate вызовет Net::SMTPAuthenticationError в случае сбоя аутентификации.

В противном случае он вернет Net::SMTP::Response, а вызов status в ответ вернет "235".

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