TLS

2009-06-26 37 views
7
ile Ruby programından e-posta gönder

Bir Ruby programından e-posta göndermeye çalışıyorum. Smtp sunucusu, e-postayı göndermek için giriş yapmamı gerektiren bir Exchange 2007 sunucusudur.TLS

#!/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, '[email protected]', '[email protected]' 
end 

Bunu çalıştırdığımda aşağıdaki hatayı alıyorum.

/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' 

Ben Ruby api for Net::SMTP referans TLS veya bir STARTTLS komutu bir şey bulamıyorum.

DÜZENLEME: smtp-tls.rb dosyasını indirin, kod çok değişmez ama işte çalışmam gereken şey budur.

#!/usr/bin/ruby 

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

msgstr = <<MESSAGE_END 
From: me <[email protected]> 
To: you <[email protected]> 
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, '[email protected]', ['[email protected]'] 
end 

DÜZENLEME: yakut ile çalışır 1.8.6

+0

bakınız. –

cevap

1

Net :: o STARTTLS şifrelemeyi destekleyen gibi SMTP görünmüyor. Yine de, bununla başa çıkmak için kod içeren bir proje buldum.

smtp-tls

+1

Bu doğru değil - cevabımı aşağıya bakın. –

4

Ben Güncellenmiş örneği kullanarak çalışma alamadım. Ama aşağıdakiler benim için işe yaradı.

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 
+0

Hangi Ruby sürümünü kullanıyorsunuz? – Mark

+0

Kullanıyorum ruby ​​1.8.6 – brodie31k

+0

Ben 1.8.7 yaşıyorum ve bir "unknown method 'enable_starttls' hatası" alın. Smtp_tls ve net/smtp gerekli. Bir olası sorun benim yapılandırmamda 'ActionMailer :: Base.delivery_method =: smtp' olmasıdır. Bu belki de başka bir şeye, örneğin smtp_tls veya başka bir şeye ayarlanmış mı? –

0

Bu tlsmail gem kullanarak bir çözümdür:

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 
+0

Bu, Ruby 1.9.3 ile benim için kazanma formülüydü, ancak bir değişiklik yaptım: Bağlantı noktası yerine 587 numaralı bağlantı noktasını belirttim 25. –

9

1.9.3

Sen (bu en azından, değil yapmak için bir mücevher gerekmez Ruby gerekmez mücevher Gmail ve Ruby 1.9.3 için), belgeler sadece korkunç.

kabul cevap (artık, en azından değil ya) doğru değil https://stackoverflow.com/a/3559598/4376

İlgili konular