连接被拒绝 - 连接(2)Ruby on Rails邮件设置

时间:2014-05-06 11:59:56

标签: ruby-on-rails email refinerycms

我在config/environments/production.rbdevelopment.rb都设置了smtp设置,我也在`config / initializers / setup_mail.rb

中添加了设置
config.action_mailer.default_url_options = { :host => 'ipaddress' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address              => 'smtp.gmail.com',
  :port                 => 587,
  :domain               => 'gmail.com',
  :user_name            => 'EMAIL_ADDRESS@gmail.com',
  :password             => 'pass',
  :authentication       => :plain,
  :enable_starttls_auto => true,
  :openssl_verify_mode  => 'none'
}

配置/初始化/为setup_mail.rb

ActionMailer::Base.smtp_settings = { 
  :address              => 'smtp.gmail.com',
  :port                 => 587,
  :domain               => 'gmail.com',
  :user_name            => 'EMAIL_ADDRESS@gmail.com',
  :password             => 'pass',
  :authentication       => :plain,
  :enable_starttls_auto => true,
  :openssl_verify_mode  => 'none'
} 

ActionMailer::Base.default_url_options[:host] = "ipaddress" 

我收到错误Connection refused - connect(2)

虽然我在localhost中使用以下配置工作但我没有收到任何错误,并且还发送了邮件。

config / initializers / setup_mail.rb(localhost)

ActionMailer::Base.smtp_settings = { 
  :address              => 'smtp.gmail.com',
  :port                 => 587,
  :domain               => 'localhost',
  :user_name            => 'EMAIL_ADDRESS@gmail.com',
  :password             => 'pass',
  :authentication       => 'plain',
  :enable_starttls_auto => true
} 

ActionMailer::Base.default_url_options[:host] = "localhost:3000" 

在控制台中运行时,错误显示如下

Errno::ECONNREFUSED: Connection refused - connect(2)
from /home/attuser/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/net/smtp.rb:541:in `initialize'
from /home/attuser/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/net/smtp.rb:541:in `open'
from /home/attuser/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/net/smtp.rb:541:in `tcp_socket'
from /home/attuser/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/net/smtp.rb:550:in `block in do_start'
from /home/attuser/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/timeout.rb:69:in `timeout'
from /home/attuser/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/timeout.rb:100:in `timeout'
from /home/attuser/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/net/smtp.rb:550:in `do_start'
from /home/attuser/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/net/smtp.rb:520:in `start'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/mail-2.4.4/lib/mail/network/delivery_methods/smtp.rb:144:in `deliver!'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/mail-2.4.4/lib/mail/message.rb:2034:in `do_delivery'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/mail-2.4.4/lib/mail/message.rb:229:in `block in deliver'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/actionmailer-3.2.9/lib/action_mailer/base.rb:415:in `block in deliver_mail'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/activesupport-3.2.9/lib/active_support/notifications.rb:123:in `block in instrument'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/activesupport-3.2.9/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/activesupport-3.2.9/lib/active_support/notifications.rb:123:in `instrument'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/actionmailer-3.2.9/lib/action_mailer/base.rb:413:in `deliver_mail'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/mail-2.4.4/lib/mail/message.rb:229:in `deliver'
from (irb):28
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/railties-3.2.9/lib/rails/commands/console.rb:47:in `start'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/railties-3.2.9/lib/rails/commands/console.rb:8:in `start'
from /home/attuser/.rvm/gems/ruby-1.9.3-p545/gems/railties-3.2.9/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'

控制器

def sendResume
@name =params[:name]
@email_id = params[:email_id]
@mob_no = params[:ph_no]

attachments = params[:resume]
if simple_captcha_valid?

 if params[:resume]
     filename=attachments.original_filename   

    extname = File.extname(filename)[1..-1]
    mime_type = Mime::Type.lookup_by_extension(extname)
    content_type = mime_type.to_s unless mime_type.nil?


        if content_type !="application/pdf"
           flash[:error]= "Only pdf files are allowed"
           redirect_to :action=>"careers"
        else
         File.open(Rails.root.join('tmp', 'uploads', attachments.original_filename), 'w') do |file|
          re = attachments.read
          file.write(re.force_encoding("utf-8"))
          @attached_path = file.path
        end


        begin
          ResumeMailer.sendResume(@name, @email_id, @mob_no, @attached_path, attachments.original_filename).deliver
          flash[:notice] = "Your resume has been submitted successfully"
          redirect_to :action=>"careers"
        rescue Exception => e
          puts e.message

          logger.warn "error sending mail"
          flash[:error]= "Error in submitting resume"
          redirect_to :action=>"careers"
        end

     end
    else
      flash[:error]= "Please upload your resume"
      redirect_to :action=>"careers"
    end
else

  flash[:error]= "Incorrect captcha"
   redirect_to :action=>"careers"
end

end

安装postfix后,错误在控制台模式下消失,邮件从控制台发送但在图形模式下(在浏览器中)我收到错误Connection refused - connect(2)

出了什么问题,

提前感谢。

2 个答案:

答案 0 :(得分:7)

我发现您在两台服务器上都尝试过相同的设置,但仅在您的生产/非本地主机环境中遇到问题。

这指出了环境本身的网络配置问题。

在与应用程序相同的服务器上的命令行中,尝试以下命令

telnet smtp.gmail.com 587

你应该看到类似下面的内容

telnet smtp.gmail.com 587
Trying 173.194.79.108...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP dd5sm276863pbc.85 - gsmtp

如果您没有看到此信息,则很可能会出现连接错误。这意味着您的计算机无法访问gmail服务器。可能的问题是a)一般的出站网络连接,b)防火墙专门阻止所有出站连接c)防火墙阻止/允许连接到特定端口或主机

如果这不起作用,请尝试使用以下端口代替587

telnet smtp.gmail.com 465
telnet smtp.gmail.com 25

如果其中一个更成功,请更改您的邮件服务器设置以便相应使用。

编辑:我们在使用Gmail和Gmail以及我们的自定义域时遇到了一些麻烦。可以帮助的一件事是从配置文件中删除:域行,尝试没有它。

供参考,以下是我使用Gmail托管的自定义域名生成的Gmail配置:

config.action_mailer.default_url_options = { :host => "my.website.com" }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
    address:              'smtp.gmail.com',
    port:                 587,
    domain:               'website.com',
    user_name:            'user@website.com',
    password:             'password',
    authentication:       'plain',
    enable_starttls_auto: true
}

此外,如果您的Gmail帐户启用了双因素身份验证,则可能需要将其禁用并再次尝试此操作,以确认其不会使问题复杂化。

答案 1 :(得分:1)

您将域名作为localhost。域名应该是gmail.com。 请将您的config / initializers / setup_mail.rb更改为

ActionMailer::Base.smtp_settings = { :address => 'smtp.gmail.com', :port => 587, :domain => 'gmail.com', :user_name => 'EMAIL_ADDRESS@gmail.com', :password => 'pass', :authentication => 'plain', :enable_starttls_auto => true }

并在production.rb。您不需要配置电子邮件地址。以下几行就足够了。

config.action_mailer.default_url_options = { :host => 'app_url' }
config.action_mailer.delivery_method = :smtp