【问题标题】:Ruby/Rails ActionMailer not working with NTLMRuby/Rails ActionMailer 不适用于 NTLM
【发布时间】:2015-04-24 18:33:00
【问题描述】:

我正在我的项目中设置邮件程序,但我在通过 Exchange SMTP 服务器发送邮件时遇到了困难。

我已经安装了 gem ruby-ntlm,但我仍然收到 unrecognized authentication type

这是我的代码

environment.rb

# Load the Rails application.
require File.expand_path('../application', __FILE__)
require 'ntlm/smtp'

# Initialize the Rails application.
Rails.application.initialize!

notifier.rb

class Notifier < ActionMailer::Base
  default :from => "stephen.edwards@foostix.lu"

  def test
    mail(:to => "stephen.edwards@foostix.lu", :subject => "Test subject").deliver
  end
end

development.rb

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address => "**REMOVED**",
    :port => 587, 
    :domain => "CMSAD",   
    :user_name => "**REMOVED**", 
    :password => "**REMOVED**", 
    :authentification => :ntlm,
    :enable_starttls_auto => false
  }

Rails 控制台测试

Notifier#test: processed outbound mail in 5591.8ms
Net::SMTPAuthenticationError: 504 5.7.4 Unrecognized authentication type

        from /home/stephen/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/smtp.rb:968:in `check_auth_response'
        from /home/stephen/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/smtp.rb:739:in `auth_plain'
        from /home/stephen/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/smtp.rb:731:in `authenticate'
        from /home/stephen/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/smtp.rb:566:in `do_start'
        from /home/stephen/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/smtp.rb:519:in `start'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/mail-2.6.3/lib/mail/network/delivery_methods/smtp.rb:112:in `deliver!'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/mail-2.6.3/lib/mail/message.rb:2141:in `do_delivery'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/mail-2.6.3/lib/mail/message.rb:236:in `block in deliver'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/actionmailer-4.1.8/lib/action_mailer/base.rb:527:in `block in deliver_mail'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/notifications.rb:159:in `block in instrument'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/notifications.rb:159:in `instrument'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/actionmailer-4.1.8/lib/action_mailer/base.rb:525:in `deliver_mail'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/mail-2.6.3/lib/mail/message.rb:236:in `deliver'
        from /media/development/Foostix-web/app/mailers/notifier.rb:5:in `test'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/actionpack-4.1.8/lib/abstract_controller/base.rb:189:in `process_action'
... 15 levels...
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/railties-4.1.8/lib/rails/commands/console.rb:9:in `start'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/railties-4.1.8/lib/rails/commands/commands_tasks.rb:69:in `console'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/railties-4.1.8/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/railties-4.1.8/lib/rails/commands.rb:17:in `<top (required)>'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/dependencies.rb:247:in `require'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/dependencies.rb:247:in `block in require'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/dependencies.rb:232:in `load_dependency'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/dependencies.rb:247:in `require'
        from /media/development/Foostix-web/bin/rails:8:in `<top (required)>'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/dependencies.rb:241:in `load'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/dependencies.rb:241:in `block in load'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/dependencies.rb:232:in `load_dependency'
        from /home/stephen/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.8/lib/active_support/dependencies.rb:241:in `load'
        from /home/stephen/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /home/stephen/.rvm/rubies/ruby-2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'

但是这行得通....

smtp = Net::SMTP.new('**REMOVED**', 587)
smtp.debug_output = $stdout
smtp.enable_starttls_auto#skip if not needed
smtp.start("CMSAD", "**REMOVED**", "**REMOVED**", :ntlm)

TLS connection started
<- "EHLO CMSAD\r\n"
-> "250-**REMOVED** Hello [**REMOVED**]\r\n"
-> "250-SIZE 104857600\r\n"
-> "250-PIPELINING\r\n"
-> "250-DSN\r\n"
-> "250-ENHANCEDSTATUSCODES\r\n"
-> "250-AUTH GSSAPI NTLM LOGIN\r\n"
-> "250-8BITMIME\r\n"
-> "250-BINARYMIME\r\n"
-> "250 CHUNKING\r\n"
<- "AUTH NTLM **REMOVED**==\r\n"
-> "334 **REMOVED**\r\n"
<- **REMOVED**\r\n"
-> "235 2.7.0 Authentication successful\r\n"
 => #<Net::SMTP **REMOVED** started=true>

【问题讨论】:

    标签: ruby-on-rails ruby exchange-server actionmailer


    【解决方案1】:

    这是因为您没有包含 ntlm 库。

    将 NTLM SMTP 库添加到您的 config/environment.rb 文件中

    # Load the Rails application.
    require File.expand_path('../application', __FILE__)
    
    require 'ntlm/smtp' # ADD THIS LINE HERE
    
    # Initialize the Rails application.
    Rails.application.initialize!
    

    【讨论】:

      【解决方案2】:

      ruby-ntlm gem 添加到您的Gemfile 并运行bundle install

      宝石文件:

        gem 'ruby-ntlm'
      

      bundle install

      将 NTLM SMTP 库添加到您的 config/environment.rb 文件中。

      # Load the rails application
      require File.expand_path('../application', __FILE__)
      require 'ntlm/smtp'
      
      # Initialize the rails application
      RailsApp::Application.initialize!
      

      设置您的环境文件以使用 NTLM 进行身份验证。

      config.active_support.deprecation = :notify
      config.action_mailer.delivery_method = :smtp
      config.action_mailer.smtp_settings = {
        :address => '<your-email-server>',          # mail.example.com
        :domain => '<your-domain>',                 # example.com
        :user_name => '<your-username>',            # user.name
        :password => '<your-unencrypted-password>', # p@ssw0rd
        :port => 25,
        :authentication => :ntlm
      }
      

      最后,请确保更改您一直使用的任何电子邮件地址的默认值以反映新的 Microsoft Exchange 帐户,否则您将收到 5.7.1 客户端无权发送此发件人错误。

      【讨论】:

      • ruby-ntlm 已经在 environment.rb 中安装并初始化(我更新了原帖,抱歉)
      • 看清楚我的帖子/你犯了很多错误:authentification =&gt; :ntlm,port587应该是25
      【解决方案3】:

      发现一个错字,现在可以使用了!

      development.rb

      :authentification =&gt; :ntlm 更改为:authentication =&gt; :ntlm

      感谢大家的支持!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多