电子邮件插件使应用程序能够从服务器或外部提供商发送电子邮件。电子邮件插件使用 Strapi 全局 API,这意味着它可以从 Strapi 应用程序中的任何位置调用。最常见的两个用例是在 Strapi 后端和管理面板中。以下文档描述了如何在控制器或服务中使用电子邮件插件进行后端用例,以及如何在管理面板用例中使用生命周期挂钩。
电子邮件插件需要提供程序和 config/plugins.js
文件或 config/plugins.ts
文件中的提供程序配置。有关详细的安装和配置说明,请参阅 Providers 文档。
Sendmail
是 Strapi 电子邮件插件中的默认电子邮件提供程序。它为本地开发环境提供了功能,但在默认配置中尚未投入生产。对于生产阶段的应用程序,您需要进一步配置 Sendmail
(请参阅其 npm 上的 README)或更改提供商。提供商 文档包含有关更改提供商、配置提供商和创建新电子邮件提供商的说明。
使用控制器或服务发送电子邮件
电子邮件插件有一个 email
服务,其中包含 2 个发送电子邮件的函数:
send()
直接包含电子邮件内容,sendTemplatedEmail()
使用来自内容管理器的数据来填充电子邮件,从而简化程序化电子邮件。
使用 send()
函数
要触发电子邮件以响应用户操作,请将 send()
函数添加到 控制器 或 服务。发送函数具有以下属性:
属性 | 类型 | 格式 | 说明 |
---|---|---|---|
from | string | 电子邮件地址 | 如果未指定,则使用 plugins.js 中的 defaultFrom 。 |
to | string | 电子邮件地址 | 必需 |
cc | string | 电子邮件地址 | 可选 |
bcc | string | 电子邮件地址 | 可选 |
replyTo | string | 电子邮件地址 | 可选 |
subject | string | - | 必需 |
text | string | - | 需要 text 或 html 。 |
html | string | HTML | 需要 text 或 html 。 |
// ./src/api/{api name}/controllers/{api name}.js
// or
// ./src/api/{api name}/services/{api name}.js
await strapi.plugins.email.services.email.send({
to: 'valid email address',
from: 'your verified email address', // e.g. single sender verification in SendGrid
cc: 'valid email address',
bcc: 'valid email address',
replyTo: 'valid email address',
subject: 'The Strapi Email plugin worked successfully',
text: 'Hello world!',
html: 'Hello world!',
})
使用 sendTemplatedEmail()
函数
sendTemplatedEmail()
函数用于从模板撰写电子邮件。该函数根据可用属性编译电子邮件,然后发送电子邮件。要使用 sendTemplatedEmail()
函数,请定义 emailTemplate
对象并将该函数添加到控制器或服务。该函数调用 emailTemplate
对象,并可以选择调用 emailOptions
和 data
对象:
参数 | 描述 | 类型 | 默认 |
---|---|---|---|
emailOptions 可选 | 包含电子邮件地址属性:to 、from 、replyTo 、cc 和 bcc | object | { } |
emailTemplate | 包含电子邮件内容属性:使用 Lodash 字符串模板 的 subject 、text 和 html | object | { } |
data 可选 | 包含用于编译模板的数据 | object | { } |
// path: ./src/api/{api name}/controllers/{api name}.js
// or ./src/api/{api name}/services/{api name}.js
const emailTemplate = {
subject: 'Welcome <%= user.firstname %>',
text: `Welcome to mywebsite.fr!
Your account is now linked with: <%= user.email %>.`,
html: `<h1>Welcome to mywebsite.fr!</h1>
<p>Your account is now linked with: <%= user.email %>.<p>`,
}
await strapi.plugins.email.services.email.sendTemplatedEmail(
{
to: user.email,
// from:未指定,则使用 defaultFrom。
},
emailTemplate,
{
user: _.pick(user, ['username', 'email', 'firstname', 'lastname']),
}
)
使用生命周期钩子发送电子邮件
要根据管理面板中的管理员操作触发电子邮件,请使用生命周期钩子 和 send()
函数。例如,要每次在内容管理器中添加新内容条目时发送电子邮件,请使用 afterCreate
生命周期钩子:
// ./src/api/{api-name}/content-types/{content-type-name}/lifecycles.js
module.exports = {
async afterCreate(event) { // Connected to "Save" button in admin panel
const { result } = event
try {
await strapi.plugins.email.services.email.send({
to: 'valid email address',
from: 'your verified email address', // e.g. single sender verification in SendGrid
cc: 'valid email address',
bcc: 'valid email address',
replyTo: 'valid email address',
subject: 'The Strapi Email plugin worked successfully',
text: `${fieldName}`, // Replace with a valid field ID
html: 'Hello world!',
})
}
catch (err) {
console.log(err)
}
}
}