高级 Nodemailer 配置
页面摘要: Nodemailer 提供方支持 OAuth2 身份验证、连接池、DKIM 签名和速率限制。每种场景都在标准 SMTP 配置之上向
providerOptions添加特定的键。
本页面介绍可与邮件功能一起使用的社区 @strapi/provider-email-nodemailer 包的生产场景。有关提供方的基本安装和 SMTP 设置,请参阅配置提供方。
受支持的提供方
有关受支持的 providerOptions 完整列表,请参阅 npm 上的提供方 README。
OAuth2 身份验证
对于需要 OAuth2 而非密码的服务(如 Gmail 或 Outlook):
JavaScript
module.exports = ({ env }) => ({
email: {
config: {
provider: 'nodemailer',
providerOptions: {
host: 'smtp.gmail.com',
port: 465,
secure: true,
// highlight-start
auth: {
type: 'OAuth2',
user: env('SMTP_USER'),
clientId: env('OAUTH_CLIENT_ID'),
clientSecret: env('OAUTH_CLIENT_SECRET'),
refreshToken: env('OAUTH_REFRESH_TOKEN'),
},
// highlight-end
},
settings: {
defaultFrom: env('SMTP_USER'),
defaultReplyTo: env('SMTP_USER'),
},
},
},
});
TypeScript
export default ({ env }) => ({
email: {
config: {
provider: 'nodemailer',
providerOptions: {
host: 'smtp.gmail.com',
port: 465,
secure: true,
// highlight-start
auth: {
type: 'OAuth2',
user: env('SMTP_USER'),
clientId: env('OAUTH_CLIENT_ID'),
clientSecret: env('OAUTH_CLIENT_SECRET'),
refreshToken: env('OAUTH_REFRESH_TOKEN'),
},
// highlight-end
},
settings: {
defaultFrom: env('SMTP_USER'),
defaultReplyTo: env('SMTP_USER'),
},
},
},
});
连接池
使用连接池复用 SMTP 连接,并在发送大量邮件时提高吞吐量:
JavaScript
module.exports = ({ env }) => ({
email: {
config: {
provider: 'nodemailer',
providerOptions: {
host: env('SMTP_HOST'),
port: 465,
secure: true,
// highlight-start
pool: true,
maxConnections: 5,
maxMessages: 100,
// highlight-end
auth: {
user: env('SMTP_USERNAME'),
pass: env('SMTP_PASSWORD'),
},
},
settings: {
defaultFrom: 'hello@example.com',
defaultReplyTo: 'hello@example.com',
},
},
},
});
TypeScript
export default ({ env }) => ({
email: {
config: {
provider: 'nodemailer',
providerOptions: {
host: env('SMTP_HOST'),
port: 465,
secure: true,
// highlight-start
pool: true,
maxConnections: 5,
maxMessages: 100,
// highlight-end
auth: {
user: env('SMTP_USERNAME'),
pass: env('SMTP_PASSWORD'),
},
},
settings: {
defaultFrom: 'hello@example.com',
defaultReplyTo: 'hello@example.com',
},
},
},
});
DKIM 签名
添加 DKIM 签名以提高送达率并对出站邮件进行身份验证:
JavaScript
module.exports = ({ env }) => ({
email: {
config: {
provider: 'nodemailer',
providerOptions: {
host: env('SMTP_HOST'),
port: 587,
auth: {
user: env('SMTP_USERNAME'),
pass: env('SMTP_PASSWORD'),
},
// highlight-start
dkim: {
domainName: 'example.com',
keySelector: 'mail',
privateKey: env('DKIM_PRIVATE_KEY'),
},
// highlight-end
},
settings: {
defaultFrom: 'hello@example.com',
defaultReplyTo: 'hello@example.com',
},
},
},
});
TypeScript
export default ({ env }) => ({
email: {
config: {
provider: 'nodemailer',
providerOptions: {
host: env('SMTP_HOST'),
port: 587,
auth: {
user: env('SMTP_USERNAME'),
pass: env('SMTP_PASSWORD'),
},
// highlight-start
dkim: {
domainName: 'example.com',
keySelector: 'mail',
privateKey: env('DKIM_PRIVATE_KEY'),
},
// highlight-end
},
settings: {
defaultFrom: 'hello@example.com',
defaultReplyTo: 'hello@example.com',
},
},
},
});
速率限制
限制每个时间间隔发送的邮件数量,以避免触发垃圾邮件过滤器:
JavaScript
module.exports = ({ env }) => ({
email: {
config: {
provider: 'nodemailer',
providerOptions: {
host: env('SMTP_HOST'),
port: 465,
secure: true,
pool: true,
// highlight-start
rateLimit: 5, // 每个 rateDelta 内的最大邮件数
rateDelta: 1000, // 时间间隔(毫秒,1 秒)
// highlight-end
auth: {
user: env('SMTP_USERNAME'),
pass: env('SMTP_PASSWORD'),
},
},
settings: {
defaultFrom: 'hello@example.com',
defaultReplyTo: 'hello@example.com',
},
},
},
});
TypeScript
export default ({ env }) => ({
email: {
config: {
provider: 'nodemailer',
providerOptions: {
host: env('SMTP_HOST'),
port: 465,
secure: true,
pool: true,
// highlight-start
rateLimit: 5,
rateDelta: 1000,
// highlight-end
auth: {
user: env('SMTP_USERNAME'),
pass: env('SMTP_PASSWORD'),
},
},
settings: {
defaultFrom: 'hello@example.com',
defaultReplyTo: 'hello@example.com',
},
},
},
});
速率限制需要连接池
rateLimit 和 rateDelta 只有在同时设置了 pool: true 时才会生效。