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

Mar*_*ark 7 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|
    smtp.send_message msgstr, 'from@server.com', 'to@server.com'
end
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到以下错误.

/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'
Run Code Online (Sandbox Code Playgroud)

我在Ruby api中找不到任何关于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
Run Code Online (Sandbox Code Playgroud)

编辑:与红宝石1.8.6一起使用

Nat*_*ong 11

Ruby 1.9.3中不需要gem

你不需要宝石来做这件事(至少,不是Gmail和Ruby 1.9.3),文档很糟糕.

请参阅/sf/answers/249171891/


bro*_*31k 5

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

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
Run Code Online (Sandbox Code Playgroud)


Bar*_*cat 1

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

smtp TLS