Skip to content
This repository was archived by the owner on Aug 1, 2021. It is now read-only.

Commit 6f51263

Browse files
authored
Merge pull request #29 from lakshitaverma/mail-example
Added example for sending mail through mailgun
2 parents 64124ac + 7c0015f commit 6f51263

File tree

6 files changed

+28
-5
lines changed

6 files changed

+28
-5
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"express-jwt": "^5.3.1",
4747
"jsonwebtoken": "^8.2.0",
4848
"lodash": "^4.17.13",
49+
"mailgun-js": "^0.22.0",
4950
"method-override": "^3.0.0",
5051
"moment": "^2.23.0",
5152
"moment-timezone": "^0.5.23",

src/config/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,11 @@ export default {
5555
api: {
5656
prefix: '/api',
5757
},
58+
/**
59+
* Mailgun email credentials
60+
*/
61+
emails: {
62+
apiKey: 'API key from mailgun',
63+
domain: 'Domain Name from mailgun'
64+
}
5865
};

src/jobs/emailSequence.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default class EmailSequenceJob {
88
Logger.debug('✌️ Email Sequence Job triggered!');
99
const { email, name }: { [key: string]: string } = job.attrs.data;
1010
const mailerServiceInstance = Container.get(MailerService);
11-
await mailerServiceInstance.StartEmailSequence('WelcomeSequence', { email, name });
11+
await mailerServiceInstance.SendWelcomeEmail(email);
1212
done();
1313
} catch (e) {
1414
Logger.error('🔥 Error with Email Sequence Job: %o', e);

src/loaders/dependencyInjector.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { Container } from 'typedi';
22
import LoggerInstance from './logger';
33
import agendaFactory from './agenda';
4+
import config from '../config';
5+
import * as mailgun from 'mailgun-js';
46

57
export default ({ mongoConnection, models }: { mongoConnection; models: { name: string; model: any }[] }) => {
68
try {
@@ -12,6 +14,7 @@ export default ({ mongoConnection, models }: { mongoConnection; models: { name:
1214

1315
Container.set('agendaInstance', agendaInstance);
1416
Container.set('logger', LoggerInstance)
17+
Container.set('emailClient', mailgun({ apiKey: config.emails.apiKey, domain: config.emails.domain }))
1518

1619
LoggerInstance.info('✌️ Agenda injected into container');
1720

src/services/auth.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,12 @@ export default class AuthService {
1515
private mailer: MailerService,
1616
@Inject('logger') private logger,
1717
@EventDispatcher() private eventDispatcher: EventDispatcherInterface,
18-
) {}
1918
) {}
2019

2120
public async SignUp(userInputDTO: IUserInputDTO): Promise<{ user: IUser; token: string }> {
2221
try {
2322
const salt = randomBytes(32);
24-
23+
2524
/**
2625
* Here you can call to your third-party malicious server and steal the user password before it's saved as a hash.
2726
* require('http')

src/services/mailer.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
1-
import { Service } from 'typedi';
1+
import { Service, Inject } from 'typedi';
22
import { IUser } from '../interfaces/IUser';
33

44
@Service()
55
export default class MailerService {
6-
public SendWelcomeEmail(user: Partial<IUser>) {
6+
constructor(
7+
@Inject('emailClient') private emailClient
8+
) {}
9+
10+
public SendWelcomeEmail(email) {
711
/**
812
* @TODO Call Mailchimp/Sendgrid or whatever
913
*/
14+
// Added example for sending mail from mailgun
15+
const data = {
16+
from: 'Excited User <me@samples.mailgun.org>',
17+
to: email, //your email address
18+
subject: 'Hello',
19+
text: 'Testing some Mailgun awesomness!'
20+
};
21+
22+
this.emailClient.messages().send(data);
1023
return { delivered: 1, status: 'ok' };
1124
}
1225
public StartEmailSequence(sequence: string, user: Partial<IUser>) {

0 commit comments

Comments
 (0)