【问题标题】:Rails 3 Action Mailer: Possible to send email to self from User's email (for 'Contact Us' form)?Rails 3 Action Mailer:可以从用户的电子邮件中向自己发送电子邮件(用于“联系我们”表格)?
【发布时间】:2013-01-11 16:58:48
【问题描述】:

您好,我正在尝试为联系我们表格制作邮件。电子邮件将是 :from user@email.com 和 :to my@email.com 。这可以在开发中通过 SMTP 完成吗? ActionMailer 是真的从用户的电子邮件帐户发送电子邮件,还是只是假电子邮件?我想使用 user@email.com 作为发件人的原因是因为我希望我可以轻松地直接回复该电子邮件。

我正在尝试使用 localhost 并收到错误消息:Errno::ECONNREFUSED (Connection refused - connect(2)): 我认为这是因为我没有正确设置设置。发送此电子邮件是否需要在实际的 gmail 帐户上提供用户名/密码?

这是我现在的设置(我没有任何用户名/密码,所以这可能是我的错误的根源吗?):

ActionMailer::Base.smtp_settings = {
  :address              => '127.0.0.1',
  :port                 => 25
}

控制器:

def email
  ContactMailer.contact_form(params).deliver
end

邮寄者:

class ContactMailer < ActionMailer::Base
  default :to => "my@email.com"

  def contact_form(sender)
    @sender = sender
    mail(:from => sender[:email], :subject => "Question from #{sender[:company] ?     sender[:company] : "" } 
                                              - Contact Us")
  end
end

views/contact_mailer/contact_mailer.text.erb:

We have been contacted by <%= @sender[:email] %>

已修复

我将此行添加到我的初始化程序中:

ActionMailer::Base.delivery_method = :sendmail

【问题讨论】:

  • 您没有在本地机器 (127.0.0.1) 上运行 SMTP 服务器。您要么需要设置它(这有点复杂,而且在开发中并不真正需要),要么配置开发环境以使用外部 SMTP 服务器(即 Gmail),就像在生产中一样
  • 但是如果我使用不同的设置,我怎么知道我的电子邮件是否真的发送了?
  • 看看guides.rubyonrails.org/…api.rubyonrails.org/classes/ActionMailer/Base.html。您还需要称为 SMTP 服务器的外部服务、地址(地址、端口、凭据以及任何它想要的),您需要将其添加到配置中。它与数据库相同 - 您需要使用 ActiveRecord,但 Rails 不会为您设置它,因此如果您使用 ActionMailer 并且想要发送电子邮件,则需要设置它(搜索您平台的 smtp 服务器) 或使用 Gmail 等外部服务。
  • 您遇到的错误(连接被拒绝)只是表明 ActionMailer 无法连接到 127.0.0.1:25 以通过它发送电子邮件。
  • 另外:“from”和“to”字段仅用于电子邮件内容,但您可以在连接到 SMTP 服务器时使用不同的凭据(如果它允许您在内容中更改/伪造它们)。

标签: ruby-on-rails


【解决方案1】:

使用Letter Opener 进行开发。

【讨论】:

    【解决方案2】:

    @Edmund,我很好奇,当您说“已修复”时,这是否意味着您通过将该行添加到初始化程序来解决此问题?如果是这样介意澄清究竟是哪个文件?

    我的理解per this paid tutorial 是您不需要设置任何 SMTP 设置,因为只有当您从自己的帐户发送电子邮件时才需要这些设置(即 SMTP 允许 ActionMailer 进入您的帐户并发送代表您发送电子邮件)。

    我会说,尽管这提出了一个奇怪的假设... ActionMailer 能够以某种方式从其他人的帐户发送电子邮件,而无需对其 SMTP 设置一无所知。

    无论如何,这是一个奇怪的部分答案,因为这是教程教给我的,但我实际上无法让它发挥作用,所以我也很想知道什么对你有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-21
      • 2015-08-23
      • 2011-07-14
      • 1970-01-01
      • 2013-04-14
      • 2011-08-12
      • 1970-01-01
      • 2012-07-25
      相关资源
      最近更新 更多