【问题标题】:Rails devise with gmail errorsRails 设计时出现 gmail 错误
【发布时间】:2017-07-10 14:19:38
【问题描述】:

我目前正在开发一个带有邮件系统的应用程序。它工作正常,发送欢迎电子邮件并发送重置密码的说明,但现在并且只有当我尝试发送重置说明时才会出现此错误。

ArgumentError (SMTP From address may not be blank: nil):

我正在使用像 noreply@mycustomdomain.com 这样的自定义域 这是我的配置

development.rb

 config.action_mailer.raise_delivery_errors = true
 config.action_mailer.perform_caching = false
 config.action_mailer.default_url_options = { host: 'localhost:3000' }

 config.action_mailer.delivery_method = :smtp
 config.action_mailer.smtp_settings = {
     address: 'smtp.gmail.com',
     port: '587',
     domain: 'gmail.com',
     authentication: :plain,
     enable_starttls_auto: true,
     user_name: Rails.application.secrets.mailer_username,
     password: Rails.application.secrets.mailer_password
}

有什么想法吗?

编辑

class UserMailer < ApplicationMailer
  default from: 'noreply@mycustomdomain.com'

  def welcome_email(user)
    @user = user
    @url = 'http://localhost:3000/users/sign_in'
    mail(to: @user.email, subject: 'Bienvenue')
  end

  def generate_new_password_email
    user = User.find(params[:user_id])
    user.send_reset_password_instructions
  end

  def reset_password; end
end

【问题讨论】:

    标签: ruby-on-rails devise actionmailer


    【解决方案1】:

    你可以尝试在你的配置中设置 :from,像这样使用 default_option,

    config.action_mailer.default_options = { from: 'noreply@mycustomdomain.com' }
    

    【讨论】:

    • 这是 10 个月大
    • 带着来自测试套件 (rspec) 的错误来到这里:原来我没有将 default_options 添加到 config/environments/test.rb — 已修复。谢谢! @Manspider,它现在已经 2 岁多了,但仍然很有帮助
    【解决方案2】:

    您的电子邮件中似乎没有 From 标头。一个好的做法是将以下行放入您的ApplicationMailer:

    class ApplicationMailer
      default from: 'noreply@mycustomdomain.com'
    
      # ...
    end
    

    要在继承的邮件程序中覆盖它,只需声明相同的语句。要在单个邮件方法中覆盖它,请将其放入 mail 调用中,如下所示:

    def new_message(user, message)
      mail(
        to: user.email,
        subject: "New message from #{message.sender.name}",
        from: message.sender.email
      )
    end
    

    希望有帮助

    【讨论】:

    • 我确实在我的邮件中将default from 设置为正确的地址。此外,该邮件是由 Devise 发送的,因为它是用于重置密码的邮件。它工作了一段时间而无需覆盖任何东西,所以问题可能出在其他地方。
    • @LRP 它在 devise.rb 中。需要这样的东西:config.mailer_sender = ENV['SMTP_USERNAME']
    【解决方案3】:

    在 devise.rb config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' 已被评论。 Config.mailer_sender 从未初始化,因此即使我使用default from: 设置它也始终为零

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,其背后的原因是我在开发工作,但我的邮件正在搜索生产中的 smtp_settings,所以要解决你的问题可以更改邮件设置,也可以将相同的 smtp_settings 复制到生产环境中。

      【讨论】:

        【解决方案5】:

        我偶然发现了同样的问题。我的解决方案是,我编辑了config/initializers/devise.rb 将一行从config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' 更改为config.mailer_sender = ENV["default_from_email"]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-13
          • 2015-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多