使用 Pony 从简单的 Sinatra 应用程序发送电子邮件
Sending email from simple Sinatra app using Pony
我正在使用 Sinatra 构建我的第一个投资组合页面。
我有一个 'textbook' 联系页面,其中包含 'name'、'email' 和 'content' 字段的简单表格。当有人提交表单时,我想收到一封电子邮件通知。
Pony 声称它可以通过简单的 'one-line' 代码发送电子邮件。我看过the Pony documentation但是关于如何设置不是很详细
不知道是我设置不当,还是代码不对,还是Pony不是最好的工具,还是我的开发环境不允许发邮件。[=13= ]
下面的代码应该从 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
Pony 需要知道如何 发送电子邮件,而不仅仅是电子邮件的收件人、发件人、主题和正文等
从pony documentation开始,默认使用sendmail
,否则配置SMTP使用localhost
。根据此应用程序所在的位置 运行,很可能 sendmail
不可用,并且 localhost
.
上没有配置 SMTP
我已经将 Pony 用于多个应用程序。每一个,我都为 Pony 配置了一个 "noreply@" 电子邮件地址,用于对 SMTP 进行身份验证,因此使用我自己的域电子邮件(通常是 Google 应用程序,甚至是 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 - 如果您仍有问题,请发表评论,我很乐意提供帮助。
如果您使用的是带两步验证的 gmail 帐户,您必须为 Pony 邮件程序生成一个应用程序专用密码,而不是使用您常用的 SMTP 密码。
见https://support.google.com/accounts/answer/185833?hl=en
在常用密码的位置插入应用程序专用密码。
我正在使用 Sinatra 构建我的第一个投资组合页面。
我有一个 'textbook' 联系页面,其中包含 'name'、'email' 和 'content' 字段的简单表格。当有人提交表单时,我想收到一封电子邮件通知。
Pony 声称它可以通过简单的 'one-line' 代码发送电子邮件。我看过the Pony documentation但是关于如何设置不是很详细
不知道是我设置不当,还是代码不对,还是Pony不是最好的工具,还是我的开发环境不允许发邮件。[=13= ]
下面的代码应该从 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
Pony 需要知道如何 发送电子邮件,而不仅仅是电子邮件的收件人、发件人、主题和正文等
从pony documentation开始,默认使用sendmail
,否则配置SMTP使用localhost
。根据此应用程序所在的位置 运行,很可能 sendmail
不可用,并且 localhost
.
我已经将 Pony 用于多个应用程序。每一个,我都为 Pony 配置了一个 "noreply@" 电子邮件地址,用于对 SMTP 进行身份验证,因此使用我自己的域电子邮件(通常是 Google 应用程序,甚至是 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 - 如果您仍有问题,请发表评论,我很乐意提供帮助。
如果您使用的是带两步验证的 gmail 帐户,您必须为 Pony 邮件程序生成一个应用程序专用密码,而不是使用您常用的 SMTP 密码。
见https://support.google.com/accounts/answer/185833?hl=en
在常用密码的位置插入应用程序专用密码。