Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用小马从simple Sinatra应用程序发送电子邮件_Ruby_Email_Sinatra_Pony - Fatal编程技术网

Ruby 使用小马从simple Sinatra应用程序发送电子邮件

Ruby 使用小马从simple Sinatra应用程序发送电子邮件,ruby,email,sinatra,pony,Ruby,Email,Sinatra,Pony,我正在与Sinatra建立我的第一个投资组合页面 我有一个“教科书”联系页面,带有包含“姓名”、“电子邮件”和“内容”字段的直接表单。当有人提交表单时,我希望收到电子邮件通知 Pony声称它可以通过简单的“一行”代码发送电子邮件。我已经读过了,但是关于如何设置它并不是很详细 我不知道我是否设置得不正确,代码不正确,Pony不是最好的工具,或者我的开发环境是否不允许发送邮件 下面的代码应该是从post方法发送电子邮件,然后通过save_message方法将数据保存到PostgreSQL数据库。数据

我正在与Sinatra建立我的第一个投资组合页面

我有一个“教科书”联系页面,带有包含“姓名”、“电子邮件”和“内容”字段的直接表单。当有人提交表单时,我希望收到电子邮件通知

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
小马需要知道如何发送电子邮件,而不仅仅是它的收件人、发件人、主题和身体是什么等等

从中,它将默认使用
sendmail
,否则将SMTP配置为使用
localhost
。根据此应用程序的运行位置,很可能是
sendmail
不可用,并且
localhost
上没有配置SMTP

我用小马做过几次应用。每一封邮件,我都会为小马配置一个“noreply@”电子邮件地址,用于对SMTP进行身份验证,因此使用我自己的域电子邮件(通常是谷歌应用程序,甚至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.mail(:to=>)

我已多次配置小马-如果您仍有问题,请发表评论,我很乐意提供帮助。

如果您使用的是带有两步验证的gmail帐户,您必须为小马邮件程序生成特定于应用程序的密码,而不是使用通常的SMTP密码

在常用密码的位置插入特定于应用程序的密码


这是来自。

欢迎来到堆栈溢出。虽然在一个问题上非常友好和熟悉是很好的,但这并不是应该使用的写作风格。考虑堆栈溢出是一个编程食谱,类似于维基百科的社区编辑,其中问题是食谱中的问题陈述,以及它们相关的答案。绒毛不是必需的,也不是必需的;相反,写一些经过深思熟虑的问题,你会做得很好。谢谢你的帮助!无可否认,我对电子邮件的内部工作原理一无所知,因此我有几个问题:我是否需要设置一个域来替换?”noreply@cdubs-很棒的域名“?目前我正在使用我的电子邮件-address@gmail.com. 当我使用noreply@gmail.com我在浏览器中遇到“用户名和密码不被接受”错误。我正在使用OS X进行开发,并计划部署到Heroku。您可以使用您的个人电子邮件凭据作为Pony,但我强烈建议您不要这样做,因为您的个人电子邮件和密码将在以太网上显示,即使是Heroku的配置。我与我拥有域名的公司1和1建立了电子邮件。我在通往成功的道路上走得更远,但它还没有起作用。我花了一段时间与1和1的同事通电话,以确保我有所有正确的设置。我现在遇到的错误是:Net::SMTPServerBusy at/thankyou 421无效的发件人域“未知”(dns配置错误?)听起来像是
小马的
:domain
部分。选项
哈希配置不正确。不幸的是,如果看不到更多细节,就很难排除故障。什么是:启用\u starttls\u aut?