(Ruby)让Net :: SMTP与Gmail一起工作……?

有没有人有关于使用Ruby的Net :: SMTP通过Gmail发送邮件的任何质量(和最新)信息? 我见过几个例子 – 大部分都是从2007年到2008年中期,但没有一个适合我。 我需要更多当前使用最新1.8.7版本的示例。 如果文档不仅涵盖了没有人真正使用的简单示例,我也很感激。

目前我收到一个错误:

SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol 

关于SMTP协议,我对SSL并不十分熟悉,所以这一切都在我身上丢失了。 不幸的是,Net :: SMTP文档只涵盖了基础,并没有提供各种潜在的OpenSSL :: SSL上下文的完整列表,所以我不能尝试各种各样的。

无论如何,如果有任何关于如何使用Gmail的质量信息,我们将非常感激。

最好。

我其实刚刚开始工作了。 写了一个快速脚本来测试它。

我得到了一个不同于你的错误(需要STARTTLS),我还发现我必须使用端口587而不是465。

我找到了让它在我找到的Rails插件中运行的技巧。 (agilewebdevelopment.com/plugins/net_smtp_tls_support)

如果你’评估’这个文件(它增加了对标准Net :: SMTP库的支持):

http://happiness-is-slavery.net/wp-content/rails-plugins/smtp_add_tls_support/lib/smtp_add_tls_support.rb

然后运行’Net :: SMTP.enable_tls()’

一切似乎都很好。

这是我的代码:

 require 'rubygems' require 'net/smtp' eval File.read("smtp_tls.rb") Net::SMTP.enable_tls() FROM_EMAIL = "REMOVED" PASSWORD = "REMOVED" TO_EMAIL = "REMOVED" msgstr = < To: my phone <#{TO_EMAIL}> Subject: text message Date: Sat, 23 Jun 2001 16:26:43 +0900 Message-Id:  This is a test message. END_OF_MESSAGE Net::SMTP.start('smtp.gmail.com', 587, 'gmail.com', FROM_EMAIL, PASSWORD, :plain) do |smtp| smtp.send_message msgstr, FROM_EMAIL, TO_EMAIL end 

显然,我将上述文件下载到同一目录并将其命名为“smtp_tls.rb”

希望这可以帮助!

实际上下面适用于没有插件或gem的gmail,至少使用Ruby 1.9.1p376,但是好运找到文档会告诉你:

  require 'net/smtp' msg = "Subject: Hi There!\n\nThis works, and this part is in the body." smtp = Net::SMTP.new 'smtp.gmail.com', 587 smtp.enable_starttls smtp.start(YourDomain, YourAccountName, YourPassword, :login) do smtp.send_message(msg, FromAddress, ToAddress) end 

YourAccountName看起来像’you@domain.com’和YourDomain可能是你喜欢的任何东西,但我使用的是实际的域名。

你在连接到我假设的smtp.gmail.com端口465吗? 。

 openssl s_client -connect smtp.gmail.com:587 

CONNECTED(00000003)8298:错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议:s23_clnt.c:601:

该错误与您的错误非常相似。 以下命令可以正常工作:

  openssl s_client -starttls smtp -connect smtp.gmail.com:587 

所以我认为发生的事情是你没有启用STARTTLS支持。 我不知道如何在ruby中做到这一点我发现的是action_mailer_tls插件通过修补Net :: SMTP来实现这一点。 从Ruby 1.8.7开始,Net :: SMTP内置了这种支持。

如果您使用的是Ruby <1.8.7,那么这是补丁。

您还需要在主题和邮件正文之间添加两个换行符。 否则,只传输主题,邮件正文将留空。

 msg = "Subject: My Subject Goes Here\n\nMy message goes here"