jpw*_*ynn 15 ruby-on-rails registration devise
背景:在我们的应用程序中,我们经常有销售代表使用销售人员的计算机为我们的客户进行设置(通常客户在我们设置它们时无法访问他们的电子邮件).因此,我们正在考虑在销售代表的电子邮件地址的设计注册表中添加一个字段,并将确认链接也转到该电子邮件地址.
问题:有没有办法告诉设计bcc(或cc)初始确认电子邮件(只有初始确认电子邮件)到新用户注册表上也提供的(可选)"backup_email"电子邮件地址?
或者,有没有办法'禁用'确认电子邮件过程,但只有当某个代码输入注册字段时?
我知道如何在设计注册表单中添加另一个字段,但是我没有看到如何/在哪里修改设计邮件代码,所以当确认电子邮件发送到"电子邮件"地址时它也会转到"backup_email"地址(如果有的话,有时它是空白的).
感谢Johnny Grass!
我做了,rails generate mailer CustomerUserMailer
并补充说
#config/initializers/devise.rb
config.mailer = "CustomUserMailer"
Run Code Online (Sandbox Code Playgroud)
我的自定义邮件看起来像:
# app/mailers/customer_user_mailer.rb
class CustomUserMailer < Devise::Mailer
def headers_for(action)
headers = {
:subject => translate(devise_mapping, action),
:from => mailer_sender(devise_mapping),
:to => resource.email,
:cc => resource.backup_user_email(action),
:template_path => template_paths
}
end
end
Run Code Online (Sandbox Code Playgroud)
然后我将3个邮件模板FROM移动views/devise/mailer到views/customer_user_mailer(否则电子邮件是空的)
然后我在我的User模型中添加了一个方法,该方法backup_user_email()根据用户记录和操作中的数据返回"备份"电子邮件地址(如果有).唯一的"猫腻"存在就是测试时action它不是action == "confirmation_instructions"很action == :confirmation_instructions.
Bry*_*yce 13
万一有人通过谷歌来到这里 - 在最新版本的Devise中,header_for需要两个参数.所以你的代码需要是:
class MyMailer < Devise::Mailer
backup_email = "..."
def headers_for(action, opts)
headers = {
:subject => subject_for(action),
:to => resource.email,
:from => mailer_sender(devise_mapping),
:bcc => backup_email,
:reply_to => mailer_reply_to(devise_mapping),
:template_path => template_paths,
:template_name => action
}.merge(opts)
end
end
Run Code Online (Sandbox Code Playgroud)
这可能不是最好的方法,但至少可以避免错误.
Dav*_*vid 11
做到这一点的一种方法是覆盖headers_for在动作设计::梅勒
class MyMailer < Devise::Mailer
backup_email = "..."
def headers_for(action)
headers = {
:subject => translate(devise_mapping, action),
:from => mailer_sender(devise_mapping),
:to => resource.email,
:bcc => backup_email
:template_path => template_paths
}
end
Run Code Online (Sandbox Code Playgroud)
并告诉设计使用您的邮件:
#config/initializers/devise.rb
config.mailer = "MyMailer"
Run Code Online (Sandbox Code Playgroud)
您可以使用更简洁,更简单的代码
# app/mailers/my_mailer.rb
class MyMailer < Devise::Mailer
def headers_for(action, opts)
backup_email = "..."
super.merge!({bcc: backup_email})
end
end
# config/initializers/devise.rb
...
config.mailer = MyMailer
...
Run Code Online (Sandbox Code Playgroud)
通过Hash传递给merge!方法,您可以添加或修改您想要的任何电子邮件标题.