Rspec Net :: SMTPServerBusy:454 4.7.1:拒绝中继访问

Tyl*_*ler 3 integration-testing rspec ruby-on-rails

我正在尝试测试注册电子邮件(使用设计发送),并且我一直收到错误消息:

Net::SMTPServerBusy: 454 4.7.1 <model_spec@example.com>: Relay access denied
Run Code Online (Sandbox Code Playgroud)

我正在使用Capybara运行Rails 3.2.11,并且(暂时)将我的spec_helper.rb和test.rb文件切碎到最低限度,仍然得到上面的错误.

spec_helper.rb:

require 'rubygems'
require 'spork'

Spork.prefork do
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require 'rspec/autorun'
  require 'capybara/rspec'
  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  RSpec.configure do |config|
    config.use_transactional_fixtures = true
    config.infer_base_class_for_anonymous_controllers = false
  end
end

Spork.each_run do
  FactoryGirl.reload
end
Run Code Online (Sandbox Code Playgroud)

test.rb:

Upficial::Application.configure do
  config.whiny_nils = true
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false
  config.action_mailer.delivery_method = :test
end
Run Code Online (Sandbox Code Playgroud)

测试本身非常简单:

require 'spec_helper'

describe User do
  it "sends a confirmation email" do
    @user = FactoryGirl.create(:user, email: "model_spec@example.com", username: "model_spec")
    @user.send_confirmation_instructions
    ActionMailer::Base.deliveries.last.to.should == [@user.email]
  end
end
Run Code Online (Sandbox Code Playgroud)

无论是使用guard/spork还是使用'rspec spec/models/user_spec.rb',我都会得到相同的结果; 测试总是失败

Net::SMTPServerBusy: 454 4.7.1 <model_spec@example.com>: Relay access denied
Run Code Online (Sandbox Code Playgroud)

有什么配置应该改变的想法,如果有的话?

Chr*_*ald 5

您的邮件服务器未配置为接受邮件*@example.com.它拒绝为该域中继电子邮件.

您可以将该域添加到您的邮件服务器作为有效的传递目标,但由于这是一个测试环境,您应该设置您的环境以使用电子邮件的测试机制:

# config/environments/test.rb

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

这将导致电子邮件被放入ActionMailer.deliveries而不是实际发送到您的邮件服务器,因此您可以检查并测试它们的存在和内容.

如果ActionMailer::Base.delivery_method没有 :test的话,将无法正常工作; 你可以从控制台(通过rails console test)测试它,看看它是否真的:test.如果不是,请找出它被覆盖的位置并修复它.

  • 谢谢,我在测试控制台中四处寻找,并看到ActionMailer :: Base.delivery_method是:smtp.所以我搜索了设置的位置,它位于initializers/mail.rb以及environment/test.rb中.看起来前者压倒了后者,所以我评论了它,一切都很好!谢谢! (4认同)