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