在线使用红宝石宝石

时间:2018-05-20 21:20:08

标签: ruby email rubygems smtp

我正在创建一个Ruby文件,允许用户直接通过我的网站向我发送电子邮件。我一直在使用gem tlsmail,当我在本地尝试我的文件时,一切都很完美,我收到了电子邮件,所有信息都在他们应该的位置(如主题,消息等)。

这是我的代码:

#!/usr/bin/ruby
puts "Content-type: text/html\n\n"
require "cgi"
require "tlsmail"

cgi_request = CGI::new("html5")

contact_name = cgi_request["contact_name"]
contact_email = cgi_request["contact_email"]
contact_subject = cgi_request["subject"]
contact_message = cgi_request["contact_message"]
puts contact_name
puts contact_email
puts contact_subject
puts contact_message

msgstr = <<END_OF_MESSAGE
From: Mattia Bombelli <mattiabombelli.noreply@gmail.com>
To: A Private User <another-email@gmail.com>
Subject: Testing email

Just testing the file
END_OF_MESSAGE


Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
Net::SMTP.start("smtp.gmail.com", 587, "gmail.com", "mattiabombelli.noreply@gmail.com", "password", :plain) do |smtp|
  smtp.send_message msgstr, "mattiabombelli.noreply@gmail.com", "another-email@gmail.com"

end

puts "Email sent!"

(我所做的唯一改变是在shebang,在当地我正在使用#!/usr/local/bin/ruby

当我尝试将此文件放到我的网络托管中时,问题就出现了。如果我将此文件加载到我的网站的文件管理器中,它不会加载tlsmail gem和html表单中的所有输出,我将消失,并且没有其他任何事情发生。权限是正确的,文件在正确的文件夹中,因为如果我摆脱require "tlsmail",我可以看到我从我网站的另一个页面获取的所有html输入的输出。

如果我尝试使用net/smtp我没有收到任何电子邮件(也是我的代码的最后一行,puts "Email sent!"没有出现在页面上,所以我猜我出错了开始使用Net::SMTP。我尝试关注this answer,但tlsmailmailfactory有同样的问题。我还尝试了另一种完全不同的方式,mail gem但没有任何反应。

我不明白的是我在为文件要求宝石时遇到了什么错误。如何在线加载宝石并使用它?

1 个答案:

答案 0 :(得分:0)

Gems是从主机的文件系统加载的,如果缺少gem,那么require - 其文件将生成LoadError,这些文件应该在日志中可见。

This discussion提供了一种列出服务器上可用的宝石的方法,如果您没有shell访问权限。如果他们可以为您运行gem install,也许您应该与托管管理员交谈。