3

我正在尝试测试注册电子邮件(与设计一起发送),但我不断收到错误消息:

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

测试.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

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

4

1 回答 1

5

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

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

# config/environments/test.rb

config.action_mailer.delivery_method = :test

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

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

于 2013-07-01T18:33:42.457 回答