我在Rails 3应用程序中使用Devise来创建帐户。我有不同类型的用户,因此我想根据用户类型发送自定义密码恢复电子邮件。
我可以发送自定义电子邮件,但我还没有找到在该电子邮件上设置自定义标头的方法。我特别感兴趣的是设置电子邮件的主题。
我做了以下事情:
devise_mail
成功调用。我的自定义邮件是这样的:
class AccountMailer < Devise::Mailer
helper :application # gives access to all helpers defined within application_helper.
def reset_partner_instructions(record, opts={})
devise_mail(record, :reset_partner_instructions, opts)
end
end
问题是电子邮件的主题始终是“重置合作伙伴说明”。我相信Devise正在从邮件模板的名称生成这个标题。
在本教程https://github.com/plataformatec/devise/wiki/How-To:-Use-custom-mailer中,他们调用以下代码:
def confirmation_instructions(record, opts={})
headers["Custom-header"] = "Bar"
super
end
由于我直接调用“devise_mail”,我没有看到如何将邮件传递给邮件程序。我可以使用简单的设置或方法来设置电子邮件主题吗?
答案 0 :(得分:15)
class AccountMailer < Devise::Mailer
def confirmation_instructions(record, opts={})
headers = {
:subject => "Subject Here"
}
super
end
end
或者您可以在intilizer目录中的devise.en.yml
文件中更改它
设定自己的主题
mailer:
confirmation_instructions:
subject: 'Confirmation instructions'
答案 1 :(得分:2)
这是一个非常古老的问题,它可能对你是其他人有帮助,
自定义主题:
添加如下所示的内容,确保使用2个空格正确执行缩进,就像在database.yml文件中一样。
en:
devise:
mailer:
confirmation_instructions:
subject: 'Verification subject here'
reset_password_instructions:
subject: 'Reset password subject here'
答案 2 :(得分:0)
我意识到我应该只使用ActionMailer来完成这项任务。 Devise没有给我额外的功能,因为我试图生成一个自定义邮件,我可以在Devise之外做。
答案 3 :(得分:0)
这是一个古老的问题,但仍然出现在搜索的顶部,我能够通过设置devise.rb
而不是设置标题来解决此问题:
config.mailer = 'DeviseMailer'
在import { sineOut } from "svelte/easing";
let duration = 250;
let delay = duration;
let delayZero = 0;
export const fadeIn = _ => ({
duration,
delay,
easing: sineOut,
css: t => `opacity: ${t}`
});
export const fadeOut = _ => ({
duration,
delayZero,
easing: sineOut,
css: t => `opacity: ${t}`
});
中:
<script>
import { fadeIn, fadeOut } from "../components/pageFade";
// All your other JS goes here
</script>
<style>
/* Styles go here */
</style>
<main in:fadeIn out:fadeOut>
<!-- All the normal HTML goes here -->
</main>
答案 4 :(得分:-1)
无需设置自定义邮件程序或覆盖Devise的confirmation_instructions
方法。
设计让你将可选参数传递给confirmation_instructions
方法,该方法将与Devise的默认选项合并(opts
哈希传递给Devise的headers_for助手。)
因此,您可以使用以下代码发送包含自定义主题的确认说明:
Devise::Mailer.confirmation_instructions(user, {subject: "Custom Subject"}).deliver