# 高级 Nodemailer 配置

> Source: https://strapi.nodejs.cn/cms/configurations/email-nodemailer

🌐 Advanced Nodemailer configuration

Nodemailer 提供程序支持 OAuth2 认证、连接池、DKIM 签名和速率限制。每种场景在标准 SMTP 配置的基础上向 `providerOptions` 添加特定的键。

本页面介绍了可与[电子邮件功能](/cms/features/email)一起使用的社区`@strapi/provider-email-nodemailer`软件包的生产场景。有关基本提供程序安装和SMTP设置，请参阅[配置提供程序](/cms/features/email#configuring-providers)。

🌐 This page covers production scenarios for the community `@strapi/provider-email-nodemailer` package that can be used with the [Email feature](/cms/features/email). For basic provider installation and SMTP setup, see [Configuring providers](/cms/features/email#configuring-providers).

:::info Supported providers

有关支持的 `providerOptions` 的完整列表，请参阅 [provider README on npm](https://www.npmjs.com/package/@strapi/provider-email-nodemailer)。

🌐 For the full list of supported `providerOptions`, refer to the [provider README on npm](https://www.npmjs.com/package/@strapi/provider-email-nodemailer).

:::

## OAuth2 认证 {#oauth2-authentication}

🌐 OAuth2 authentication

对于像 Gmail 或 Outlook 这样需要使用 OAuth2 而不是密码的服务：

🌐 For services like Gmail or Outlook that require OAuth2 instead of a password:

```js title="/config/plugins.js"
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'),
      },
    },
  },
});
```
```ts title="/config/plugins.ts"

  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'),
      },
    },
  },
});
```

## 连接池 {#connection-pooling}

🌐 Connection pooling

使用连接池重用 SMTP 连接，以在发送大量电子邮件时提高吞吐量：

🌐 Use connection pooling to reuse SMTP connections and improve throughput when sending many emails:

```js title="/config/plugins.js"
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',
      },
    },
  },
});
```
```ts title="/config/plugins.ts"

  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-signing}

🌐 DKIM signing

添加 DKIM 签名以提高投递率并验证外发邮件：

🌐 Add DKIM signatures to improve deliverability and authenticate outbound mail:

```js title="/config/plugins.js"
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',
      },
    },
  },
});
```
```ts title="/config/plugins.ts"

  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',
      },
    },
  },
});
```

## 速率限制 {#rate-limiting}

🌐 Rate limiting

限制每个时间间隔内发送的消息数量以避免触发垃圾邮件过滤器：

🌐 Limit the number of messages sent per time interval to avoid triggering spam filters:

```js title="/config/plugins.js"
module.exports = ({ env }) => ({
  email: {
    config: {
      provider: 'nodemailer',
      providerOptions: {
        host: env('SMTP_HOST'),
        port: 465,
        secure: true,
        pool: true,
        // highlight-start
        rateLimit: 5,    // max messages per rateDelta
        rateDelta: 1000, // time interval in ms (1 second)
        // highlight-end
        auth: {
          user: env('SMTP_USERNAME'),
          pass: env('SMTP_PASSWORD'),
        },
      },
      settings: {
        defaultFrom: 'hello@example.com',
        defaultReplyTo: 'hello@example.com',
      },
    },
  },
});
```
```ts title="/config/plugins.ts"

  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',
      },
    },
  },
});
```

:::note Rate limiting requires connection pooling

`rateLimit` 和 `rateDelta` 只有在 `pool: true` 也被设置时才会生效。

:::
