(Ruby)正在使用Gmail获取Net::SMTP。。。?

(Ruby)正在使用Gmail获取Net::SMTP。。。?,ruby,smtp,email,ruby-1.8,Ruby,Smtp,Email,Ruby 1.8,关于使用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不是很

关于使用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一起工作,它将是最感激的


最好。

我假设您正在连接smtp.gmail.com端口465吗? .

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

这个错误看起来和你的非常相似。以下命令不起作用:

 openssl s_client  -starttls smtp -connect smtp.gmail.com:587
所以我认为现在的情况是您没有启用STARTTLS支持。我不知道如何在ruby buy中做到这一点,但我发现action_mailer_tls插件通过修补Net::SMTP实现了这一点。从Ruby 1.8.7开始,Net::SMTP内置了这种支持

如果您使用的是Ruby,则<1.8.7是补丁。

可能会有帮助


这里还有一些字符需要满足,所以要求…

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

我得到的错误与您的不同(需要STARTTLS),我还发现我必须使用端口587而不是465

我在一个Rails插件中找到了让它工作的窍门。(agilewebdevelopment.com/plugins/net\u smtp\u tls\u支持)

如果“评估”此文件(它将tls支持添加到标准的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 = <<END_OF_MESSAGE
From: Your Name <#{FROM_EMAIL}>
To: my phone <#{TO_EMAIL}>
Subject: text message
Date: Sat, 23 Jun 2001 16:26:43 +0900
Message-Id: <unique.message.id.string@example.com>

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
需要“rubygems”
需要“net/smtp”
eval File.read(“smtp_tls.rb”)
Net::SMTP.enable_tls()
FROM_EMAIL=“已删除”
PASSWORD=“已删除”
TO_EMAIL=“已删除”

msgstr=事实上,以下内容适用于没有插件或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

您的帐户名看起来像'you@domain.com“&YourDomain可能是您喜欢的任何内容,但我使用的是实际的域名。

邮件主题和正文之间还需要有两个换行符。否则,将只传输主题,消息正文将留空

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

事实上,Gmail似乎是一个怪兽。端口465工作正常,但需要在端口587上工作并使用STARTTLS会导致问题。后者是我需要工作的组合。有什么想法吗?你是说SSL/STARTTLS在587上甚至不可能实现?我编辑了我的帖子。在没有SSL的情况下,在HELO之后使用STARTTLS命令请求服务器启动它似乎正在工作。我不确定。据我所知,您必须联系服务器,然后协商SSL会话,但我不知道如何进行。这就是我使用Ruby模块的部分原因。人力资源管理=\查看您的ruby模块是否有STARTTLS选项。我再次编辑了我的帖子。“上面提到的文件”的URL被破坏了。知道它去哪儿了吗?嘿找到了:哦,天哪,谢谢你。这方面的文档很糟糕。很好的例子!:)我得到了“堆栈级别太深”的错误。第一封邮件发出“ok”,然后在尝试发送另一封邮件时,我收到了那个错误。有什么问题吗?谢谢。这太棒了!在我发现自己遇到的一些奇怪的情况下,它避免了处理ActionMailer设置问题。谢谢。谷歌用户,请注意,您需要通过访问在您的谷歌帐户设置中启用“访问不太安全的应用程序”:否则谷歌将阻止身份验证。似乎从1.8.7起就可以使用#enable_starttls,因此该版本及更高版本不需要gem。美好的
msg = "Subject: My Subject Goes Here\n\nMy message goes here"