3

我正在使用 Sinatra 构建我的第一个投资组合页面。

我有一个“教科书”联系页面,其中包含“姓名”、“电子邮件”和“内容”字段的简单表格。当有人提交表单时,我想收到一封电子邮件通知。

Pony 声称它可以通过简单的“一行”代码发送电子邮件。我已经阅读了 Pony 文档,但是关于如何设置它并不是很详细。

不知道是我设置不正确,代码不对,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
4

2 回答 2

3

Pony 需要知道如何发送电子邮件,而不仅仅是收件人、发件人、主题和正文是什么等。

pony 文档中,它将默认使用sendmail,否则配置 SMTP 以使用localhost。根据此应用程序运行的位置,很可能它sendmail不可用,并且没有在localhost.

我已经将 Pony 用于多个应用程序。每一个,我都为 Pony 配置了一个“noreply@”电子邮件地址,用于对 SMTP 进行身份验证,因此使用我自己的域电子邮件(通常是 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 - 如果您仍有问题,请发表评论,我很乐意提供帮助。

于 2015-02-16T19:00:37.267 回答
0

如果您使用带有两步验证的 gmail 帐户,您必须为 Pony 邮件程序生成一个应用程序专用密码,而不是使用您通常的 SMTP 密码。

请参阅https://support.google.com/accounts/answer/185833?hl=en

插入应用程序专用密码代替您通常的密码。

这是来自Github 上的 Pony 项目页面

于 2017-09-22T21:32:22.493 回答