使用TLS从Ruby程序发送电子邮件

使用TLS从Ruby程序发送电子邮件,ruby,email,Ruby,Email,我正在尝试从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|

我正在尝试从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'
我在引用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
#/usr/bin/ruby
需要“rubygems”
需要“net/smtp”
需要“smtp tls”

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


使用您更新的示例,我无法使其正常工作。但是下面这些对我来说确实有用

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

这是一个使用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中不需要gem 这样做不需要gem(至少对于Gmail和Ruby 1.9.3来说不是这样),文档非常糟糕


请参见

您使用的是什么版本的Ruby?我在1.8.7中,得到一个“未知方法”enable\u starttls“error”。我需要smtp\u tls和net/smtp。一个可能的问题是,我的配置中有
ActionMailer::Base.delivery\u method=:smtp
。是否应该将其设置为其他内容,例如smtp_tls或其他内容?我试图安装smtp_tls,但它说:
smtp_tls需要Ruby版本~>1.8.6.0。
这是Ruby 1.9.3的成功公式,但我做了一个更改:我指定了端口587,而不是端口25。接受的答案不正确(或者至少不再正确)。