rails应用程序可以从本地主机发送电子邮件吗?

时间:2013-08-30 21:44:46

标签: ruby-on-rails

我认为我已经成功设置了ActionMailer,但是电子邮件没有到达收件箱,尽管服务器的说法不同:

Sent mail to julian@designimperial.com (2003ms)
Date: Fri, 30 Aug 2013 22:26:41 +0100
From: from@example.com
To: julian@gmail.com
Message-ID: <52210e11bedc9_16501d84f64257a@Julian-PC.mail>
Subject: Welcome to my awesome site!
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

<!DOCTYPE html>
<html>
  <head>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
  </head>
  <body>
    <h1>Welcome to example.com, Julian</h1>
    <p>
      You have successfully signed up to example.com,
      your username is: gogo.<br/>
    </p>
    <p>
      To login to the site, just follow this link: http://example.com/login.
    </p>
    <p>Thanks for joining and have a great day!</p>
  </body>
</html>

我是否需要将rails应用程序上传到服务器或heroku以便发送电子邮件?我知道这是PHP邮件和MAMP / XAMPP

的情况

2 个答案:

答案 0 :(得分:3)

设置不正确可能导致电子邮件无法发送而不会引发任何异常。假设您使用SMTP协议来传送main,您应该确保正确设置ActionMailer configuration。以下是使用Gmail的基本配置(通过Rails Guides):

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:              'smtp.gmail.com',
  port:                 587,
  domain:               'example.com',
  user_name:            '<username>',
  password:             '<password>',
  authentication:       'plain',
  enable_starttls_auto: true  }

答案 1 :(得分:2)

启用有关要引发的操作邮件的传递错误对于使操作邮件程序正常工作非常有帮助。它也默认禁用。

要使其正常工作,请打开位于以下位置的开发环境文件:

  

yourappname /配置/环境/ development.rb

在第17行附近,有一种方法可以通过采用布尔值来启用和禁用错误报告:

  config.action_mailer.raise_delivery_errors = false

将其更改为“true”,然后重新启动rails服务器。您现在可以从rails获得出色的错误报告。

我也想将我的smtp设置直接放在同一个文件中,如下所示:

  #SMTP settings
  config.action_mailer.delivery_method = :smtp 
  config.action_mailer.smtp_settings = {
    address: "smtp.gmail.com",
    port: 587,
    domain: "gmail.com",
    user_name: "mrexample",
    password: "01password02"
  }  

请记住将smtp建立在production.rb和test.rb环境配置文件中。如果您使用gmail作为电子邮件的发件人地址,则此示例哈希也是100%正确的。您需要更改的唯一字符串是密码和用户名。

另一件使用gmail并不明显的事情是你的用户名是@符号左边的所有内容,而域名是@右边的所有内容。

e.g

mrexample@gmail.com

==

  config.action_mailer.smtp_settings = {
   # address: "smtp.gmail.com",
   # port: 587,
    domain: "gmail.com",
    user_name: "mrexample",
   # password: "01password02"
  }  

最后,如果您收到错误消息

"Errno::ECONNREFUSED (No connection could be made because the target machine actively refused it. - connect(2))"

您的应用程序唯一的错误就是您的smtp设置。可能是你的密码。