1
1
import nodemailer from 'nodemailer'
2
+ import mg from 'nodemailer-mailgun-transport'
2
3
import { google } from 'googleapis'
4
+ import { isEmpty } from 'lodash'
3
5
4
6
require ( 'dotenv' ) . config ( )
5
7
@@ -11,12 +13,16 @@ const {
11
13
MAIL_USERNAME ,
12
14
MAIL_PASSWORD ,
13
15
MAIL_AUTH_TYPE ,
16
+ MAILGUN_API_KEY ,
17
+ MAILGUN_DOMAIN ,
14
18
OAUTH_CLIENT_ID ,
15
19
OAUTH_CLIENT_SECRET ,
16
20
OAUTH_REFRESH_TOKEN ,
17
21
OAUTH_REDIRECT_URL ,
18
22
} = process . env
19
23
24
+ const isMailgunAPI = ! isEmpty ( MAILGUN_API_KEY ) || ! isEmpty ( MAILGUN_DOMAIN )
25
+
20
26
class EmailProvider {
21
27
private mailConfig : nodemailer . SentMessageInfo
22
28
@@ -36,9 +42,6 @@ class EmailProvider {
36
42
private setMailConfig = ( ) : nodemailer . SentMessageInfo => {
37
43
const configTransport : nodemailer . SentMessageInfo = {
38
44
service : MAIL_DRIVER ,
39
- auth : {
40
- user : MAIL_USERNAME ,
41
- } ,
42
45
}
43
46
44
47
// Use Google OAuth
@@ -63,10 +66,15 @@ class EmailProvider {
63
66
configTransport . auth . clientSecret = OAUTH_CLIENT_SECRET
64
67
configTransport . auth . refreshToken = OAUTH_REFRESH_TOKEN
65
68
configTransport . auth . accessToken = accessToken ( )
69
+ } else if ( isMailgunAPI ) {
70
+ // SMPT with Mailgun API
71
+ configTransport . auth . api_key = MAILGUN_API_KEY
72
+ configTransport . auth . domain = MAILGUN_DOMAIN
66
73
} else {
67
74
// SMTP Default
68
75
configTransport . host = MAIL_HOST
69
76
configTransport . port = MAIL_PORT
77
+ configTransport . auth . user = MAIL_USERNAME
70
78
configTransport . auth . pass = MAIL_PASSWORD
71
79
}
72
80
@@ -91,7 +99,9 @@ class EmailProvider {
91
99
subject : string ,
92
100
text : string
93
101
) : void | string [ ] => {
94
- this . mailConfig = this . setMailConfig ( )
102
+ this . mailConfig = isMailgunAPI
103
+ ? mg ( this . setMailConfig ( ) )
104
+ : this . setMailConfig ( )
95
105
this . mailOptions = this . setMailOptions ( dest , subject , text )
96
106
// Nodemailer Transport
97
107
const transporter : nodemailer . Transporter = nodemailer . createTransport (
0 commit comments