【问题标题】:How to send emails from ruby using a gmail account, for example?例如,如何使用 gmail 帐户从 ruby​​ 发送电子邮件?
【发布时间】:2009-12-11 03:52:05
【问题描述】:

我是 ruby​​ on rails 的新手,我已经阅读了很多关于这方面的教程,但我仍然无法弄清楚哪里出了问题。

我已经设置了 environment.rb,底部有以下几行:

ActionMailer::Base.delivery_method = :smtp

ActionMailer::Base.default_content_type = "text/html"

ActionMailer::Base.smtp_settings = {
  :address        => 'smtp.gmail.com',
  :port           => 25,
  :domain         => 'gmail.com',
  :authentication => :login,
  :user_name      => 'myname@gmail.com',
  :password       => 'mypassword'
}

然后,我得到了一些我正在使用的 baseApp 附带的代码,它执行以下操作:

UserMailer.deliver_forgot_password(self)

其中 self 是用户对象,包含电子邮件、登录信息等。

该方法(属于 UserMailer 类)具有以下代码:

  def forgot_password(user)
    setup_email(user)
    @subject += "Forgotten password instructions"
    #{user.password_reset_code}
    @body[:url]  = "http://#{Setting.get(:site_url)}/users/reset_password/#"

  end

protected
    def setup_email(user)
      @recipients  = "#{user.email}"
      @from        = "#{Setting.get(:support_name)} <#{Setting.get(:support_email)}>"
      @subject     = "[#{Setting.get(:site_name)}] "
      @sent_on     = Time.now
      @body[:user] = user

      # Get Settings
      [:site_name, :company_name, :support_email, :support_name].each do |id|
        @body[id] = Setting.get(id)
      end
    end

嗯,电子邮件很好,我已经检查了他们是否进行了 raise inspect,但它没有发送......它也没有给我抛出异常。

现在我在尝试发送电子邮件时收到 Errno::ECONNREFUSED 错误。现在怎么了?

谢谢, 布赖恩

【问题讨论】:

  • 你用的是什么版本的rails?
  • mm,如果我右键单击该项目,我会看到 Ruby Platform: Built-in JRuby 1.2.0。这是你想知道的吗?

标签: ruby-on-rails ruby


【解决方案1】:

Gmail 端口应为 587 或 465。

并添加

:tls => true,

你安装了ActionMailerTLS Gem 吗?

【讨论】:

  • 这个问题可能对你有帮助stackoverflow.com/questions/801005/…
  • 谢谢马克。我会尝试安装 action_mailer_tls 插件。我对此的唯一疑问是我没有收到该帖子中提到的错误。无论如何我必须安装它吗?也许我禁用了错误通知...
  • 如何安装那个 gem?我正在使用 Windows 7
  • 好的。我已经从其网站下载了 zip 文件,并按照此处解释的说明进行操作:github.com/openrain/action_mailer_tls 我没有做的是第 1 步,因为我不知道在哪里写那个..我手动复制了插件而是在 plugins 文件夹中,NetBeans 识别它,但它仍然无法正常工作。
【解决方案2】:

从 rails 2.3.2 开始的新方法是

:enable_starttls_auto => true

不需要额外的插件。

【讨论】:

  • 是的。我也刚刚在其他地方读过这个。但它仍然无法正常工作。我为此配置的是: - 在 development.rb:config.action_mailer.delivery_method = :smtp config.action_mailer.perform_deliveries = true config.action_mailer.smtp_settings = { :enable_starttls_auto => true, :address => "smtp .gmail.com", :port => 587, :domain => "domain.com", :user_name => "name@domain.com", :password => "password", :authentication => :plain } 做我需要别的东西来完成这项工作吗?我没有收到任何异常...我只是没有收到电子邮件。
  • 我看到这是在 development.rb 中设置的 你有 config.action_mailer.raise_delivery_errors = true 这行默认设置为 false,也许尝试将其设置为 true 并查看 action mailer 是否给出您有任何交付错误。
【解决方案3】:

在我的 Mac 上,我必须打开 postfix 才能发送电子邮件。也许您没有打开类似的邮件程序来发送电子邮件。 Windows 7 是什么,我不知道。

【讨论】:

  • 我也不知道。我想也许因为我的 ruby​​ 版本它不起作用。当我右键单击我的项目时,我看到“Ruby 平台:内置 JRuby 1.2.0”。我可以选择那个或 1.8.6-p287 我应该下载更新的版本吗?
  • 如果您可以在日志中看到打印出的电子邮件,那么您的 ruby​​ 版本应该不是问题。也许你需要 IIS 或 Windows 的 sendmail,但我不熟悉 Windows 开发。我不想引发一场激烈的战争,但您可能需要考虑创建一个基于 Linux 的虚拟机并在那里进行开发。在 Linux 或 Mac OS X 上开发是一种更好的体验,并且会有更多熟悉环境的人能够帮助您解决这些情况。
猜你喜欢
  • 2011-03-08
  • 2012-03-30
  • 2013-03-24
  • 2014-02-02
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
  • 2020-06-16
  • 2011-04-06
相关资源
最近更新 更多