(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库的支持):
然后运行’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"