【问题标题】:Send email from Ruby program with TLS使用 TLS 从 Ruby 程序发送电子邮件
【发布时间】:2010-11-06 04:31:59
【问题描述】:

我正在尝试从 Ruby 程序发送电子邮件。 smtp 服务器是 Exchange 2007 服务器,需要我登录才能发送电子邮件。

#!/usr/bin/ruby

require 'rubygems'
require 'net/smtp'

msgstr = "Test email."

smtp = Net::SMTP.start('smtp.server.com', 587, 
  'mail.server.com', 'username', 'password', :login) do |smtp|
    smtp.send_message msgstr, 'from@server.com', 'to@server.com'
end

当我运行它时,我收到以下错误。

/usr/lib/ruby/1.8/net/smtp.rb:948:in `check_auth_continue': 
530 5.7.0 Must issue a STARTTLS command first (Net::SMTPAuthenticationError)
    from /usr/lib/ruby/1.8/net/smtp.rb:740:in `auth_login'
    from /usr/lib/ruby/1.8/net/smtp.rb:921:in `critical'
    from /usr/lib/ruby/1.8/net/smtp.rb:739:in `auth_login'
    from /usr/lib/ruby/1.8/net/smtp.rb:725:in `send'
    from /usr/lib/ruby/1.8/net/smtp.rb:725:in `authenticate'
    from /usr/lib/ruby/1.8/net/smtp.rb:566:in `do_start'
    from /usr/lib/ruby/1.8/net/smtp.rb:525:in `start'
    from /usr/lib/ruby/1.8/net/smtp.rb:463:in `start'

我在 Ruby api for Net::SMTP 中找不到任何引用 TLS 或 STARTTLS 命令的内容。

编辑: 下载 smtp-tls.rb,代码没有太大变化,但这是我要工作的。

#!/usr/bin/ruby

require 'rubygems'
require 'net/smtp'
require 'smtp-tls'

msgstr = <<MESSAGE_END
From: me <me@test.com>
To: you <you@test.com>
Subject: e-mail test

body of email

MESSAGE_END

smtp = Net::SMTP.start('smtp.test.com', 587, 'test.com', 'username', 'passwd', :login) do |smtp|
    smtp.send_message msgstr, 'me@test.com',  ['you@test.com']
end

编辑:适用于 ruby​​ 1.8.6

【问题讨论】:

  • 接受的答案不正确(或至少不再正确)。

标签: ruby email


【解决方案1】:

Ruby 1.9.3 中不需要 gem

您不需要 gem 来执行此操作(至少,Gmail 和 Ruby 1.9.3 不需要),文档太糟糕了。

https://stackoverflow.com/a/3559598/4376

【讨论】:

    【解决方案2】:

    我无法使用您更新的示例使其正常工作。但以下确实对我有用。

    require 'rubygems'
    require 'smtp_tls'
    require 'net/smtp'
    
    smtp = Net::SMTP.new 'smtp.gmail.com', 587
    smtp.enable_starttls
    
    smtp.start(Socket.gethostname,username,password,:login) do |server|
       server.send_message msg, from, to
    end
    

    【讨论】:

    • 你使用的是什么版本的 Ruby?
    • 我在 1.8.7 中并收到“未知方法 'enable_starttls' 错误”。我需要 smtp_tls 和 net/smtp。一个可能的问题是在我的配置中我有ActionMailer::Base.delivery_method = :smtp。是否应该将其设置为其他内容,例如 smtp_tls 或其他内容?
    • 我试图安装 smtp_tls 但我说:smtp_tls requires Ruby version ~&gt; 1.8.6.0.
    【解决方案3】:

    Net::SMTP 看起来不支持 startTLS 加密。不过,我确实在 github 上找到了一个项目,其中包含处理此问题的代码。

    smtp-tls

    【讨论】:

      【解决方案4】:

      这是使用 tlsmail gem 的解决方案:

      require 'rubygems'
      require 'tlsmail'
      require 'net/smtp'
      
      Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
      Net::SMTP.start(server,25,Socket.gethostname,username,password,:login) do |server|
        server.send_message msg, from, to
      end
      

      【讨论】:

      • 这是我使用 Ruby 1.9.3 的制胜法宝,但我做了一个更改:我指定端口 587 而不是端口 25。
      猜你喜欢
      • 2011-11-29
      • 2012-08-30
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      相关资源
      最近更新 更多