使用Heroku中的Padrino发送电子邮件

5
我正在尝试通过Padrino中的sendmail发送电子邮件。 我按照此处配置快速使用)的配置进行了设置。 但我总是在服务器日志(Heroku或localhost上)中收到以下错误:
app[web.1]: sh: Illegal option - 
app[web.1]: Errno::EPIPE - Broken pipe:

我安装了 mail gem,并且正在使用 Padrino 0.10.7。

我使用以下内容发送邮件:

post :create do
  email(:from => "tony@reyes.com", :to => "john@smith.com", :subject => "Welcome!", :body=>"Body")
end

这基本上就是我所拥有的了...

你使用了哪些设置?此外,那个错误发生在Padrino还是其他gem中?需要更多关于错误的细节。 - Arman H
设置像什么?你是指我的Gemfile吗?错误发生在我的服务器日志中。 - Luis Ortega Araneda
嘿@LuisOrtegaAraneda,你能试试Padrino 0.11.0吗?至于Arman提到的设置,他可能是指应用程序设置中的delivery_method? - Darío Javier Cravero
你的 set :delivery_method 是什么样子的?你是通过 SMTP 发送邮件吗?你的错误信息被记录在日志文件中,但它是由程序的某个部分生成的。你能提供一些来自错误日志的细节吗?我认为 Errno::EPIPE 不是与你的邮件发送代码相关的问题,可能是其他地方出了问题。 - Arman H
你是想在本地运行还是在Heroku上运行?如果你在本地运行,那么它可能会有连接padrino的困难。我知道当部署完成并启动服务器时,Heroku会引入一些配置等内容,例如它会自动切换你的数据库设置以使用他们的附加组件Postgres。 - whizcreed
2个回答

5

你应该使用Heroku提供的其中一个partner addons发送邮件。

Sendgrid是一个不错的选择。

heroku addons:add sendgrid:starter --app=your_app_name

然后在你的Padrino应用程序中,在App类的app.rb文件中:

set :delivery_method, :smtp => { 
  :address              => "smtp.sendgrid.net",
  :port                 => 587,
  :domain               => 'heroku.com',
  :user_name            => ENV['SENDGRID_USERNAME'],
  :password             => ENV['SENDGRID_PASSWORD'],
  :authentication       => :plain,
  :enable_starttls_auto => true  
}

您可以将这些设置替换为其他外部SMTP服务器的设置,或者查看Mandrill以获取事务电子邮件。
我怀疑您看到的Errno::EPIPE错误是无法连接到有效的SMTP服务器,因此您的控制器代码应该没有问题。

据我所知(自从上次在Heroku中配置邮件发送以来已经有一段时间了),您不必使用任何Heroku插件。甚至Heroku帮助也没有提到这一点。 - trompa
@Trompa:你不需要添加组件,但是你需要一个SMTP服务器来发送邮件(因为Heroku没有提供)。 - pat

0

Pat是对的,你不需要额外插件,只需像Stef建议的那样配置你的app.rb文件,就可以了。例如,我们使用Gmail,我们的配置看起来像这样:

  set :delivery_method, :smtp => {
    :address              => "smtp.domain.com",
    :port                 => 587,
    :domain               => 'rails.domain.com',
    :user_name            => "rails@domain.com",
    :password             => "super-secret",
    :authentication       => "plain",
    :enable_starttls_auto => true,
    :openssl_verify_mode  => OpenSSL::SSL::VERIFY_NONE
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接