使用Rails App在Amazon EC2中发送电子邮件问题

时间:2014-02-22 02:09:54

标签: ruby-on-rails email amazon-web-services nginx amazon-ec2

我的目标:电子邮件表单页面 - 如果用户按下发送,则必须将电子邮件发送到管理员帐户

好的我按照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

中设置一些配置

你能帮我解决这个问题吗?谢谢。

2 个答案:

答案 0 :(得分:1)

这里有许多潜在的问题:


<强>生产

您的development.rb中的SMTP设置(详细说明)是否正确?这意味着它们仅在您的应用程序在开发环境中运行时注册

这是常见的错误,可以通过在config/environments/production.rbconfig/application.rb

中应用相同的代码来解决

<强> SMTP

某些服务(Heroku是其中之一)非常鼓励在您的应用后面使用第三方“交易”SMTP服务。值得注意的是,SendGridMandrill是最受欢迎的两个

以下是我们与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。