【问题标题】:Rspec Net::SMTPServerBusy: 454 4.7.1: Relay access deniedRspec Net::SMTPServerBusy: 454 4.7.1: 中继访问被拒绝
【发布时间】:2013-06-18 20:33:45
【问题描述】:

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

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

知道应该更改哪些配置(如果有的话)吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    # config/environments/test.rb
    
    config.action_mailer.delivery_method = :test
    

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

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

    【讨论】:

    • 感谢您的洞察力。请查看我上面的 test.rb 文件,其中包含 config.action_mailer.delivery_method = :test 行。你是在建议我把那条线放在别处吗?
    • 您是否可能在某个地方有一些邮件程序 gem 劫持了 ActionMailer 的交付内容并用它自己的替换它?
    • 我已经尝试将 gemfile 剥离到最低限度,所以我认为这与冲突的 gem 无关。还有其他想法吗?
    • 尝试rails console test 并尝试检查ActionMailer 及其配置;看看你是否能弄清楚为什么它试图与邮件服务器通信而不是使用测试存根。
    • 谢谢,我在测试控制台中四处寻找,发现 ActionMailer::Base.delivery_method 是 :smtp。所以我搜索了它的设置位置,它在初始化程序/mail.rb 以及环境/test.rb 中。看起来前者压倒了后者,所以我把它注释掉了,一切都很好!谢谢!
    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多