我正在与Sinatra建立我的第一个投资组合页面。
我有一个“教科书”联系页面,其中包含一个包含“姓名”,“电子邮件”和“内容”字段的直接表单。当有人提交表单时,我想收到一封电子邮件通知。
Pony声称它可以通过简单的“一行”代码发送电子邮件。我已阅读the Pony documentation,但在如何设置方面并不是很详细。
我不知道我是否正确设置,代码不正确,Pony不是最好的工具,或者我的开发环境不允许发送邮件。
下面的代码应该是从post方法发送电子邮件,然后通过save_message
方法将数据保存到PostgreSQL数据库。数据正在持久保存。
#server.rb
require 'sinatra'
require 'pony'
require_relative 'model/methods'
get '/contact' do
erb :contact
end
post '/thankyou' do
unless params[:name] == '' || params[:email] == '' || params[:content] == ''
Pony.options = {
:subject => "Portfolio page: Message delivery from #{params[:name]}",
:body => "#{params[:content]}",
:via => :smtp,
:via_options => {
:address => 'smtp.1and1.com',
:port => '587',
:enable_starttls_auto => true,
:user_name => ENV["USER_EMAIL_ADDRESS"],
:password => ENV["SMTP_PASSWORD"],
:authentication => :login,
:domain => 'nterrafranca.com'
}
}
Pony.mail(:to => ENV["DESTINATION_EMAIL_ADDRESS"])
save_message(params[:name], params[:email], params[:content])
end
redirect '/'
end
答案 0 :(得分:3)
Pony需要知道 如何发送电子邮件,而不仅仅是它是谁,来自,主题和身体是什么等等。
从pony documentation开始,默认使用sendmail
,否则将SMTP配置为使用localhost
。根据此应用程序的运行位置,sendmail
很可能不可用,并且localhost
上没有配置SMTP。
我已经将Pony用于多个应用程序。每一个,我配置一个" noreply @"用于对SMTP进行身份验证的Pony的电子邮件地址,因此使用我自己的域电子邮件(通常是Google Apps,甚至是Gmail)进行SMTP连接。例如:
Pony.options = {
:subject => "Some Subject",
:body => "This is the body.",
:via => :smtp,
:via_options => {
:address => 'smtp.gmail.com',
:port => '587',
:enable_starttls_auto => true,
:user_name => 'noreply@cdubs-awesome-domain.com',
:password => ENV["SMTP_PASSWORD"],
:authentication => :plain, # :plain, :login, :cram_md5, no auth by default
:domain => "localhost.localdomain"
}
}
在Sinatra应用程序的情况下,我在打电话之前执行完整的上述代码(带有明显的替换):
Pony.mail(:to => <some_email>)
我已多次配置Pony - 如果您仍然遇到问题请发表评论并且我很乐意提供帮助。
答案 1 :(得分:0)
如果您使用的是具有两步验证的Gmail帐户,则必须为Pony邮件程序生成应用程序专用密码,而不使用常用的SMTP密码。
请参阅https://support.google.com/accounts/answer/185833?hl=en
在常用密码的位置插入应用程序专用密码。