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

时间:2013-06-18 20:33:45

标签: ruby-on-rails rspec integration-testing

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

Net::SMTPServerBusy: 454 4.7.1 <model_spec@example.com>: Relay access denied

我正在使用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

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

测试本身非常简单:

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

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

总是失败
Net::SMTPServerBusy: 454 4.7.1 <model_spec@example.com>: Relay access denied

有关应该更改哪些配置的任何想法,如果有的话?

1 个答案:

答案 0 :(得分:5)

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

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

# config/environments/test.rb

config.action_mailer.delivery_method = :test

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

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