我正在创建一个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,但tlsmail
与mailfactory
有同样的问题。我还尝试了另一种完全不同的方式,mail
gem但没有任何反应。
我不明白的是我在为文件要求宝石时遇到了什么错误。如何在线加载宝石并使用它?
答案 0 :(得分:0)
Gems是从主机的文件系统加载的,如果缺少gem,那么require
- 其文件将生成LoadError
,这些文件应该在日志中可见。
This discussion提供了一种列出服务器上可用的宝石的方法,如果您没有shell访问权限。如果他们可以为您运行gem install
,也许您应该与托管管理员交谈。