Rails设计了gmail错误

时间:2017-07-10 14:19:39

标签: ruby-on-rails devise actionmailer

我目前正在使用邮件程序系统处理应用程序。它运行正常,发送欢迎电子邮件并发送重置密码的说明,但现在,只有当我尝试发送重置指令时才会出现此错误。

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

5 个答案:

答案 0 :(得分:3)

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

设置它也总是零

答案 1 :(得分: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

希望有所帮助

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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