我使用解析服务器-amazon电子邮件适配器,并想知道如何本地化验证电子邮件和重置密码电子邮件。
我的思路是检查用户的字段,然后在server.js或AmazonSESAdapter.js上分配正确的模板。问题是用户属性是空的,除了电子邮件,用户名。
例如,在下面的示例中,firstName未定义。
谢谢。
emailAdapter: {
module: 'parse-server-amazon-ses-email-adapter',
options: {
// The address that your emails come from
fromAddress: 'Iron rr',
accessKeyId: 'gg',
secretAccessKey: 'gg',
region: 'eu-west-1',
// The template section
templates: {
passwordResetEmail: {
subject: 'Redefinir sua senha Iron Trainers',
pathPlainText: '/opt/bitnami/apps/parse/htdocs/node_modules/parse-server/node_modules/parse-server-amazon-ses-email-adapter/test/email-templates/password_reset_email.txt',
pathHtml: '/opt/bitnami/apps/parse/htdocs/node_modules/parse-server/node_modules/parse-server-amazon-ses-email-adapter/test/email-templates/password_reset_email.html',
callback: (user) => {
return {
firstName: user.get('firstName')
}
}
// Now you can use {{firstName}} in your templates
},
verificationEmail: {
subject: 'Confirmar email no Iron Trainers',
pathPlainText: '/opt/bitnami/apps/parse/htdocs/node_modules/parse-server/node_modules/parse-server-amazon-ses-email-adapter/test/email-templates/verification_email.txt',
pathHtml: '/opt/bitnami/apps/parse/htdocs/node_modules/parse-server/node_modules/parse-server-amazon-ses-email-adapter/test/email-templates/resendEmailVerification.html',
callback: (user) => {
return {
firstName: user.get('firstName')
}
}
// Now you can use {{firstName}} in your templates
},
customEmailAlert: {
subject: 'Urgent notification!',
pathPlainText: '/opt/bitnami/apps/parse/htdocs/node_modules/parse-server/node_modules/parse-server-amazon-ses-email-adapter/test/email-templates/custom_alert.txt',
pathHtml: '/opt/bitnami/apps/parse/htdocs/node_modules/parse-server/node_modules/parse-server-amazon-ses-email-adapter/test/email-templates/custom_alert.html',
}
}发布于 2018-05-03 20:10:24
根据我的理解,这可以通过插件中的代码更改来完成。
在下面的代码行中有一个if-else条件
由于您没有提供任何反馈,而且我也没有办法设置它,所以我假设其他部分是要执行的。
const {
link,
appName,
user,
templateConfig
} = options;
const {
callback
} = templateConfig;
let userVars;
if (callback && typeof callback === 'function') {
userVars = callback(user);
// If custom user variables are not packaged in an object, ignore it
const validUserVars = userVars && userVars.constructor && userVars.constructor.name === 'Object';
userVars = validUserVars ? userVars : {};
}
pathPlainText = templateConfig.pathPlainText;
pathHtml = templateConfig.pathHtml;
templateVars = Object.assign({
link,
appName,
username: user.get('username'),
email: user.get('email')
}, userVars);
message = {
from: this.fromAddress,
to: user.get('email'),
subject: templateConfig.subject
};
}在本部分中,有2行决定要使用的模板。
pathPlainText = templateConfig.pathPlainText;
pathHtml = templateConfig.pathHtml;此时,您提供的callback已被调用。现在,在回调中,您可以设置一个变量,假设它是locale名称。这样,您就可以像下面这样更新代码
pathPlainText = templateConfig.pathPlainText + (userVars["locale"] || "en");
pathHtml = templateConfig.pathHtml + (userVars["locale"] || "en");然后,您将创建在文件路径中包含locale的模板,并在更新后的代码中选择正确的模板。
你也可以看看@bgran的答案,首先我相信它也会起作用
发布于 2018-05-03 19:11:27
您需要在模板回调中进行本地化。
回调是同步的,所以您的所有本地化都需要同步。
emailTemplate.html
<div>
{{localizedText}}
</div>每个地区的其他模板:
emailTemplate.en.html
<p>
Hi {{nome}}...
</p>电子邮件的逻辑:
// The same templater used by parse-server-amazon-ses-email-adapter
import template from 'lodash.template'
/* ... */
const TemplatesByLocale = {
en: fs.readFileSync('./emailTemplate.en.html'),
}
verificationEmail: {
/* ... */
pathHtml: './path/to/emailTemplate.html',
callback: (user) => {
const locale = getLocaleSomehow(user) // needs to be synchronous
const localizedTemplate = TemplatesByLocale[locale]
const compiled = template(localizedTemplate, {
// same interpolation as parse-server-amazon-ses-email-adapter
interpolate: /{{([\s\S]+?)}}/g
})
const localizedText = compiled({
nome: user.get('nome'), /* ... */
})
return {
localizedText: localizedText,
}
},
/* ... */
}值得注意的是,parse-server-amazon-ses-email-adapter在使用纯文本模板之前将使用HTML (通过pathHtml指定的模板),因此,如果您指定了一个HTML,则只需关闭pathPlainText属性即可。
https://stackoverflow.com/questions/50010212
复制相似问题