gpt4 book ai didi

ruby-on-rails - Rails 邮件程序连接被拒绝 - localhost

转载 作者:行者123 更新时间:2023-12-02 03:25:31 26 4
gpt4 key购买 nike

ruby 版本 2.2.0
rails 4.1.4
actionmailer- 4.1.4
邮件 - 2.5.4

在 rails c(开发)中输入“Mailer.method.deliver”时,我遇到了以下错误日志

Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/2.2.0/net/smtp.rb:541:in `initialize'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/2.2.0/net/smtp.rb:541:in `open'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/2.2.0/net/smtp.rb:541:in `tcp_socket'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/2.2.0/net/smtp.rb:551:in `block in do_start'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/2.2.0/timeout.rb:89:in `block in timeout'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/2.2.0/timeout.rb:99:in `call'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/2.2.0/timeout.rb:99:in `timeout'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/2.2.0/net/smtp.rb:550:in `do_start'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/2.2.0/net/smtp.rb:520:in `start'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mail-2.5.4/lib/mail/network/delivery_methods/smtp.rb:112:in `deliver!'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mail-2.5.4/lib/mail/message.rb:2129:in `do_delivery'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mail-2.5.4/lib/mail/message.rb:232:in `block in deliver'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/actionmailer-4.1.4/lib/action_mailer/base.rb:527:in `block in deliver_mail'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activesupport-4.1.4/lib/active_support/notifications.rb:159:in `block in instrument'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activesupport-4.1.4/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activesupport-4.1.4/lib/active_support/notifications.rb:159:in `instrument'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/actionmailer-4.1.4/lib/action_mailer/base.rb:525:in `deliver_mail'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mail-2.5.4/lib/mail/message.rb:232:in `deliver'
from (irb):4
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.1.4/lib/rails/commands/console.rb:90:in `start'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.1.4/lib/rails/commands/console.rb:9:in `start'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:69:in `console'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.1.4/lib/rails/commands.rb:17:in `<top (required)>'

当然,我在development.rb中添加了mailer配置(如下)

config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:domain => "gmail.com",
:port => 587,
:authentication => :plain,
:user_name => "email",
:password => "password",
:enable_starttls_auto => true
}

在我调试之后..

# mail-2.5.4/lib/mail/network/delivery_methods/smtp.rb 
# before line: 112

raise settings.to_s #added
smtp.start(settings[:domain], settings[:user_name], settings[:password], settings[:authentication]) do |smtp_obj|
...
...

我可以看到设置哈希具有从 environments/development.rb 添加的默认变量(:符号)和自定义变量(:字符串)。

RuntimeError: {:address=>"localhost", :port=>25, :domain=>"localhost.localdomain", :user_name=>nil, :password=>nil, :authentication=>nil, :enable_starttls_auto=>true, :openssl_verify_mode=>nil, :ssl=>nil, :tls=>nil, "address"=>"smtp.gmail.com", "port"=>587, "authentication"=>"plain", "user_name"=>"email", "password"=>"password", "enable_starttls_auto"=>true}
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mail-2.5.4/lib/mail/network/delivery_methods/smtp.rb:113:in `deliver!'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mail-2.5.4/lib/mail/message.rb:2129:in `do_delivery'
from /Users/KimJaeseong/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mail-2.5.4/lib/mail/message.rb:232:in `block in deliver'
...
...

最佳答案

对不起。我忘记了我告诉你的一个信息。

我在下面的 stackoverflow 答案中看到了关于邮件程序配置的设置。

# config/initializer/setup_mail.rb

if Rails.env != 'test'
email_settings = YAML::load(File.open("#{Rails.root}/config/smtp.yml"))
ActionMailer::Base.smtp_settings = email_settings[Rails.env] unless email_settings[Rails.env].nil?
end

# I say this [A] code

[A] 代码导致此问题描述上方的错误。
(在 mail-2.5.4/lib/mail/network/delivery_methods/smtp.rb 第 112 行 raise 符号和字符串之前添加“raise settings.to_s”。)

我认为 [A] 代码出现此错误的原因是 smtp_settings(hash) 合并!在类 SMTP (mail-2.5.4/lib/mail/network/delivery_methods/smtp.rb) 的初始化方法中。

class SMTP
include Mail::CheckDeliveryParams

def initialize(values)
self.settings = { :address => "localhost",
:port => 25,
:domain => 'localhost.localdomain',
:user_name => nil,
:password => nil,
:authentication => nil,
:enable_starttls_auto => true,
:openssl_verify_mode => nil,
:ssl => nil,
:tls => nil
}.merge!(values)
end
...

测试ruby哈希合并方法

default_setting = {:address => "localhost", :port => 25}
custom_setting = {:address => "smtp.gmail.com", :port => 587} # or {"address" => "smtp.gmail.com", "port" => 587}
default_setting.merge(custom_setting) # result in default_setting = {:address => "localhost", :port => 25, "address" => "smtp.gmail.com", "port" => 587}

所以我刚刚决定使用 ENV["SMTP_EMAIL"], ENV["SMTP_PASSWORD"] 将 smtp_setting 添加到 application.rb

祝你有美好的一天!

关于ruby-on-rails - Rails 邮件程序连接被拒绝 - localhost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30573387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com