我正在尝试测试注册电子邮件(使用设计发送),并且我一直收到错误:
Net::SMTPServerBusy: 454 4.7.1 <model_spec@example.com>: Relay access denied
我正在使用Capybara运行Rails 3.2.11,并且(暂时)将我的spec_helper.rb和test.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
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
有关应该更改哪些配置的任何想法,如果有的话?
答案 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
。如果不是,请找出它被覆盖的位置并修复它。