directus

Форк
0
/
mailer.ts 
84 строки · 2.4 Кб
1
import { useEnv } from '@directus/env';
2
import type { Transporter } from 'nodemailer';
3
import nodemailer from 'nodemailer';
4
import { useLogger } from './logger.js';
5
import { getConfigFromEnv } from './utils/get-config-from-env.js';
6

7
import { createRequire } from 'node:module';
8

9
const require = createRequire(import.meta.url);
10

11
let transporter: Transporter;
12

13
export default function getMailer(): Transporter {
14
	if (transporter) return transporter;
15

16
	const env = useEnv();
17
	const logger = useLogger();
18

19
	const transportName = (env['EMAIL_TRANSPORT'] as string).toLowerCase();
20

21
	if (transportName === 'sendmail') {
22
		transporter = nodemailer.createTransport({
23
			sendmail: true,
24
			newline: (env['EMAIL_SENDMAIL_NEW_LINE'] as string) || 'unix',
25
			path: (env['EMAIL_SENDMAIL_PATH'] as string) || '/usr/sbin/sendmail',
26
		});
27
	} else if (transportName === 'ses') {
28
		const aws = require('@aws-sdk/client-ses');
29

30
		const sesOptions: Record<string, unknown> = getConfigFromEnv('EMAIL_SES_');
31

32
		const ses = new aws.SES(sesOptions);
33

34
		transporter = nodemailer.createTransport({
35
			SES: { ses, aws },
36
		} as Record<string, unknown>);
37
	} else if (transportName === 'smtp') {
38
		let auth: boolean | { user?: string; pass?: string } = false;
39

40
		if (env['EMAIL_SMTP_USER'] || env['EMAIL_SMTP_PASSWORD']) {
41
			auth = {
42
				user: env['EMAIL_SMTP_USER'] as string,
43
				pass: env['EMAIL_SMTP_PASSWORD'] as string,
44
			};
45
		}
46

47
		const tls: Record<string, unknown> = getConfigFromEnv('EMAIL_SMTP_TLS_');
48

49
		transporter = nodemailer.createTransport({
50
			name: env['EMAIL_SMTP_NAME'],
51
			pool: env['EMAIL_SMTP_POOL'],
52
			host: env['EMAIL_SMTP_HOST'],
53
			port: env['EMAIL_SMTP_PORT'],
54
			secure: env['EMAIL_SMTP_SECURE'],
55
			ignoreTLS: env['EMAIL_SMTP_IGNORE_TLS'],
56
			auth,
57
			tls,
58
		} as Record<string, unknown>);
59
	} else if (transportName === 'mailgun') {
60
		const mg = require('nodemailer-mailgun-transport');
61

62
		transporter = nodemailer.createTransport(
63
			mg({
64
				auth: {
65
					api_key: env['EMAIL_MAILGUN_API_KEY'],
66
					domain: env['EMAIL_MAILGUN_DOMAIN'],
67
				},
68
				host: env['EMAIL_MAILGUN_HOST'] || 'api.mailgun.net',
69
			}) as any,
70
		);
71
	} else if (transportName === 'sendgrid') {
72
		const sg = require('nodemailer-sendgrid');
73

74
		transporter = nodemailer.createTransport(
75
			sg({
76
				apiKey: env['EMAIL_SENDGRID_API_KEY'],
77
			}) as any,
78
		);
79
	} else {
80
		logger.warn('Illegal transport given for email. Check the EMAIL_TRANSPORT env var.');
81
	}
82

83
	return transporter;
84
}
85

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.