我正在尝试从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
答案 0 :(得分:10)
你不需要宝石来做这件事(至少不是Gmail和Ruby 1.9.3),文档很糟糕。
答案 1 :(得分:4)
我无法使用您更新的示例。但以下确实对我有用。
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
答案 2 :(得分:1)
Net :: SMTP看起来不支持startTLS加密。我确实在github上找到了一个项目,它有代码来处理这个问题。
答案 3 :(得分:0)
这是使用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