👌

【NestJS】メール送信をしたい

2024/05/07に公開

背景

自社のシステムでメールを送信したいという要件があると思います。

事前準備

gmailで安全性の低いアプリからメールを送信するという設定を行う必要があります。

https://support.google.com/a/answer/6260879?hl=ja

具体的にはこの部分を実施する必要があります。

NestJSで実装


@Module({
  imports: [
    AwsSecretsModule,
    MailerModule.forRootAsync({
      imports: [ConfigModule, AwsSecretsModule], // ConfigModuleや他の必要なモジュールをインポート
      inject: [AwsSecretsService, ConfigService],
      useFactory: async (
        awsSecretsService: AwsSecretsService,
        configService: ConfigService,
      ) => {
        // ここでawsSecretsServiceからメールアドレスのパスワードを取得する
        return {
          transport: {
            host: 'smtp.gmail.com',
            port: 465,
            secure: true,
            auth: {
              user: 'メールアドレスを入れる',
              pass: '取得したパスワードを入れる',
            },
          },
          defaults: {
            from: `"XXX" <XXX@ドメイン>`,
          },
        };
      },
    }),
  ],
  providers: [MailService],
  exports: [MailService],
})
export class MailModule {}

サービスクラスはこんな感じ


@Injectable()
export class MailService {
  constructor(private readonly mailerService: MailerService) {}

  async sendWelcomeEmail(
    to: string,
    text: string,
    subject: string,
  ): Promise<void> {
    await this.mailerService.sendMail({
      to, // 送信先アドレスを動的に
      subject, // 件名も動的に(テスト用の固定文ではなく)
      text, // 本文
    });
  }
}

まとめ

こんな感じで無事にメールが送ることができました。

Discussion