ses.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import type { Transporter } from 'nodemailer';
  2. import nodemailer from 'nodemailer';
  3. import ses from 'nodemailer-ses-transport';
  4. import loggerFactory from '~/utils/logger';
  5. import type { IConfigManagerForApp } from '../config-manager';
  6. const logger = loggerFactory('growi:service:mail');
  7. /**
  8. * Creates an AWS SES transport client for email sending.
  9. *
  10. * @param configManager - Configuration manager instance
  11. * @param option - Optional SES configuration (for testing)
  12. * @returns nodemailer Transporter instance, or null if credentials incomplete
  13. *
  14. * @remarks
  15. * Config keys required: mail:sesAccessKeyId, mail:sesSecretAccessKey
  16. */
  17. export function createSESClient(
  18. configManager: IConfigManagerForApp,
  19. option?: { accessKeyId: string; secretAccessKey: string },
  20. ): Transporter | null {
  21. if (!option) {
  22. const accessKeyId = configManager.getConfig('mail:sesAccessKeyId');
  23. const secretAccessKey = configManager.getConfig('mail:sesSecretAccessKey');
  24. if (accessKeyId == null || secretAccessKey == null) {
  25. return null;
  26. }
  27. // biome-ignore lint/style/noParameterAssign: maintaining existing behavior
  28. option = {
  29. accessKeyId,
  30. secretAccessKey,
  31. };
  32. }
  33. const client = nodemailer.createTransport(ses(option));
  34. logger.debug('mailer set up for SES', client);
  35. return client;
  36. }