我的目标:电子邮件表单页面 - 如果用户按下发送,则必须将电子邮件发送到管理员帐户
好的我按照rails教程。
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'google.com',
user_name: 'MYACCOUNT',
password: 'MYPAASSWORD',
authentication: 'plain',
enable_starttls_auto: true }
# Print deprecation notices to the Rails logger.
像这样设置,
它完美无缺!在我当地的主人
但如果我部署到亚马逊ec2。它不起作用,但nginx服务器日志说没有错误:(
Processing by IndexController#send_email as */*
App 2705 stderr: Parameters: {"contactName"=>"asfsdf", "email"=>"asdf@asdf.net", "comments"=>"asdf", "submitted"=>"true"}
App 2705 stderr:
App 2705 stderr: Sent mail to MYEMAIL@gmail.com (10.9ms)
App 2705 stderr: Date: Sat, 22 Feb 2014 01:49:08 +0000
App 2705 stderr: From: asdf@asdf.net
App 2705 stderr: Reply-To: asdf@asdf.net
App 2705 stderr: To: MYEMAIL@gmail.com
App 2705 stderr: Message-ID: <53080214b6e70_aa42499f8854356@ip-172-31-23-192.mail>
App 2705 stderr: Subject: asfsdf***** MAIL FROM MY SITE******
App 2705 stderr: Mime-Version: 1.0
App 2705 stderr: Content-Type: text/plain;
App 2705 stderr: charset=UTF-8
App 2705 stderr: Content-Transfer-Encoding: 7bit
我认为这不是代码问题,因为这在我的本地工作正常
我认为我必须在ec2
中设置一些配置你能帮我解决这个问题吗?谢谢。
答案 0 :(得分:1)
这里有许多潜在的问题:
<强>生产强>
您的development.rb
中的SMTP设置(详细说明)是否正确?这意味着它们仅在您的应用程序在开发环境中运行时注册
这是常见的错误,可以通过在config/environments/production.rb
或config/application.rb
<强> SMTP 强>
某些服务(Heroku是其中之一)非常鼓励在您的应用后面使用第三方“交易”SMTP服务。值得注意的是,SendGrid和Mandrill是最受欢迎的两个
以下是我们与SendGrid&amp; amp; Heroku(亚马逊):
#config/environments/production.rb
config.action_mailer.smtp_settings = {
:address => 'smtp.sendgrid.net',
:port => '587',
:authentication => :plain,
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:domain => 'heroku.com',
:enable_starttls_auto => true
}
<强>发送强>
另一个问题可能是你如何发送消息
许多系统(Heroku是一个)都有超时时间。这很重要,因为这意味着如果您的电子邮件需要的时间超过发送的超时时间,服务器将自动终止该过程
更强大的方法是使用类似Resque & Redis
的内容来排队电子邮件,确保您不会超时请求
答案 1 :(得分:0)
由于知识产权已被Spamhaus列入黑名单,最终用户可能会拒绝。您不应该使用EC2实例发送电子邮件,而是使用像Amazon SES这样的服务(每天不超过一定数量的ec2实例)或第三方供应商,例如sendgrid或authsmtp。