水豚测试中的Sendgrid错误

Sas*_*sha 5 email testing rspec ruby-on-rails ruby-on-rails-3

我正在尝试将测试追溯应用到一个非常复杂的应用程序(再也不会).我内置了Sendgrid功能,可以在用户注册时向他们发送电子邮件.因此,当我尝试测试注册页面时,它会尝试向我的example@example.net发送一条消息,我收到以下错误:

Net::SMTPFatalError:
550 Cannot receive from specified address <my app's email>: Unauthenticated senders not allowed
Run Code Online (Sandbox Code Playgroud)

但是,我不清楚这是否是我正在进行测试的问题(我正在遗漏的东西 - 我是新的),或者是一个更深层次的问题.自从我从GMail切换到Sendgrid后,当我在服务器上使用它时,我的应用程序应该发送的电子邮件遇到错误,但不是在线.我认为Sendgrid是一个专门的基于Web应用程序的电子邮件服务,但现在我猜我在配置文件中做错了.我设置我的配置的方式是这样的:

初始化/ mail.rb

# SendGrid Settings
ActionMailer::Base.smtp_settings = {
  :address        => 'smtp.sendgrid.net',
  :port           => '587',
  :authentication => :plain,
  :user_name      => ENV['SENDGRID_USERNAME'],
  :password       => ENV['SENDGRID_PASSWORD'],
  :domain         => 'heroku.com'
}
ActionMailer::Base.delivery_method = :smtp
Run Code Online (Sandbox Code Playgroud)

我的environment.rb文件中没有任何内容.这个问题表明我可能应该将这些设置切换到environment.rb文件中,但是(显然,我不太了解配置文件),我想知道我是否应该为development.rb设置单独的设置,测试.rb等(另外,我试过那个开关,并没有改变错误).此外,如果有一个变通方法可以让capybara/rspec在测试期间忽略电子邮件请求(或以某种方式处理它是一个虚假的电子邮件地址并测试电子邮件而不尝试发送电子邮件).

谢谢!

bwe*_*est 6

您应该能够通过config将ActionMailer设置为测试模式:

config.action_mailer.delivery_method = :test
Run Code Online (Sandbox Code Playgroud)

或者在你的测试中:

ActionMailer::Base.delivery_method = :test
Run Code Online (Sandbox Code Playgroud)

您还可以找到有关测试邮件程序的更多信息