【问题标题】:Mail gem not sending emails after upgrading to Rails 5.0.6升级到 Rails 5.0.6 后 Mail gem 不发送电子邮件
【发布时间】:2018-07-28 13:30:08
【问题描述】:

我将我的 Rails 应用程序从 4.2.5 升级到了 5.0.6。现在Mail gem 不会发送电子邮件。我似乎没有收到错误。我没有运气将 Mail gem 更新到最新版本。我不确定还能尝试什么。

我正在跑步:

Rails 5.0.6

Ruby 2.3.0

邮件 2.7.0

控制器/send_email.rb

 class SendEmail < ApplicationController
    def initialize(to_address, from_address, email_pass, subject, body)

        begin
            options = {
                :address              => 'abc.prod.1234.secureserver.net',
                :port                 => '465',
                :domain               => 'mydomain.com',
                :user_name            => from_address,
                :password             => email_pass,
                :authentication       => :login,
                :ssl                  => true,
                :openssl_verify_mode  => 'none'
            }

            Mail.defaults do
                delivery_method :smtp, options
            end

            Mail.deliver do
                to to_address
                from from_address
                subject subject
                body body
            end

            puts("\nSent message. From: #{from_address} To: #{to_address} \nMessage body: \n#{body}")

            return true

        rescue Exception => e
            puts e.to_s
            return false
        end
    end
end

更新:

我也尝试使用 Action Mailer 发送电子邮件。它说它已在控制台中发送,但从未交付。我对 Action Mailer 使用了与 Mail gem 类似的设置。

config/environments/development.rb

  config.action_mailer.smtp_settings = {
    :address              => 'abc.prod.1234.secureserver.net',
    :port                 => '465',
    :domain               => 'mydomain.com',
    :user_name            => ENV['default_username'],
    :password             => ENV['default_password'],
    :authentication       => :login,
    :ssl                  => true,
    :openssl_verify_mode  => 'none'
}

我从控制台运行这个:

EmailMailer.sample_email(UserEmail.first)

控制台输出:

   Rendering email_mailer/sample_email.html.erb within layouts/mailer
   Rendered email_mailer/sample_email.html.erb within layouts/mailer (0.1ms)
   Rendering email_mailer/sample_email.text.erb within layouts/mailer
   Rendered email_mailer/sample_email.text.erb within layouts/mailer (0.0ms)
   EmailMailer#sample_email: processed outbound mail in 9.4ms

解决方案:

我有一些代码可以在我需要查看未知错误时发送电子邮件。当我更新 Rails 时,代码陷入了一个快速发送大量电子邮件的循环中。这导致我的服务器提供商将电子邮件帐户标记为垃圾邮件帐户。我不确定为什么我的原始代码没有显示任何错误,但是当我运行 EmailMailer.sample_email(UserEmail.first).deliver_now 时,它给了我一条错误消息,帮助我追踪它。

【问题讨论】:

  • 请发布您的整个 config/environments/development.rb 文件
  • 我不敢相信你有一个继承自ApplicationControllerSendEmail 并且你的邮件被命名为EmailMailer?您可以从您的应用程序中发布您的实际代码吗?您的邮件程序配置如何?你的邮件是什么样子的?你如何在你的应用程序中调用你的邮件程序?您的邮件设置是否看起来像 Rails Guides 中描述的那样?

标签: ruby-on-rails ruby actionmailer mail-gem


【解决方案1】:

好吧,在这里胡乱猜测,但试试这个:

EmailMailer.sample_email(UserEmail.first).deliver_now

如果您的 Rails 版本低于 4.2.1,则不需要在邮件对象上使用 to call deliver 来传递它。从那时起,您可以在发送邮件之前对其进行操作,can be now using .deliver_nowor later, using.deliver_later,配合使用ActiveJob或其他排队库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2022-11-13
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    相关资源
    最近更新 更多