Rails 设计 gmail 错误

Rails devise with gmail errors

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

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

您的电子邮件中似乎没有 From header。一个好的做法是将以下行放入 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

希望对您有所帮助

在 devise.rb config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' 中有评论。 Config.mailer_sender 从未初始化,所以即使我用 default from:

设置它也总是 nil

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

您可以尝试在配置中设置 :from,使用 default_option

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

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