Skip to content

Commit 6f00383

Browse files
committed
sendEmailService added
1 parent b043830 commit 6f00383

File tree

9 files changed

+566
-1
lines changed

9 files changed

+566
-1
lines changed

.env.development

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ REGION="ap-south-1"
44
# Message queue related
55
QUEUE_NAME="simple-fifo-queue.fifo"
66
MESSAGE_GROUP_ID="purchase-info"
7+
QUEUE_URL="https://sqs.ap-south-1.amazonaws.com/657149196530/simple-fifo-queue.fifo"
8+
QUEUE_ARN="arn:aws:sqs:ap-south-1:657149196530:simple-fifo-queue.fifo"
79

810

911
# HTTP status codes

package-lock.json

Lines changed: 406 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"author": "",
1212
"license": "ISC",
1313
"dependencies": {
14+
"@aws-sdk/client-ses": "^3.131.0",
1415
"@aws-sdk/client-sqs": "^3.130.0",
1516
"uuid": "^8.3.2"
1617
},

src/helpers/generateTemplates.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Node js dependencies
2+
import fs from "fs";
3+
import { dirname } from "path";
4+
import { fileURLToPath } from "url";
5+
6+
const __dirname = dirname(fileURLToPath(import.meta.url));
7+
8+
const template = fs.readFileSync(
9+
`${__dirname}/template.html`,
10+
"utf-8",
11+
(err, data) => {
12+
if (err) throw err;
13+
}
14+
);
15+
16+
const sampleEmailTemplate = {
17+
emailContent: template,
18+
};
19+
export { sampleEmailTemplate };
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// AWS SDK dependencies
2+
import { ListIdentitiesCommand } from "@aws-sdk/client-ses";
3+
4+
// local dependencies
5+
import { emailClient } from "../libs/emailClient.js";
6+
7+
export async function listGenericIdentities() {
8+
try {
9+
// list upto 10 Generic Email Accounts
10+
const params = {
11+
IdentityType: "EmailAddress",
12+
MaxRecords: 10,
13+
};
14+
15+
const { Identities } = await emailClient.send(
16+
new ListIdentitiesCommand(params)
17+
);
18+
return Identities;
19+
} catch (error) {
20+
return error;
21+
}
22+
}

src/helpers/template.html

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<div
2+
style="
3+
margin: 0 auto;
4+
width: 70vw;
5+
font-family: 'Consolas', Arial, Helvetica, sans-serif;
6+
"
7+
>
8+
<div
9+
style="
10+
height: 2rem;
11+
background-color: #ff8c00;
12+
color: #fff;
13+
padding: 6px 3px;
14+
font-size: 1.1rem;
15+
text-align: center;
16+
border-radius: 5px 5px 0 0;
17+
"
18+
>
19+
Sample Email Content
20+
</div>
21+
<div style="padding: 16px">
22+
<p>
23+
Dear Sir/Madam, <br />
24+
<br />
25+
26+
This is a Simple Email sent from Amazon Simple Email Service (SES). This
27+
is just a test email. It has no other purposes. <br />
28+
<br />
29+
30+
Thanks and Regards, <br />
31+
Anijit
32+
</p>
33+
</div>
34+
<div
35+
style="
36+
height: 1rem;
37+
background-color: #ff8c00;
38+
color: #fff;
39+
padding: 6px 3px;
40+
text-align: center;
41+
border-radius: 0 0 5px 5px;
42+
"
43+
>
44+
send via
45+
<a
46+
style="text-decoration: none; color: #fff"
47+
href="https://aws.amazon.com/ses/"
48+
>amazonses.com</a
49+
>
50+
</div>
51+
</div>

src/lib/emailClient.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// import the SES client
2+
import { SESClient } from "@aws-sdk/client-ses";
3+
4+
// initialize the client and export
5+
const emailClient = new SESClient({ region: process.env.REGION });
6+
export { emailClient };
Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
11
export async function receiveMessageQueueHandler(event) {
2-
console.log("SQS Event received", event);
2+
console.log("SQS Event received\n", event);
3+
console.log("Printing event body");
4+
event.Records.forEach((ele) => {
5+
if (ele.eventSourceARN === process.env.QUEUE_ARN) {
6+
processEvent(ele);
7+
}
8+
});
9+
}
10+
11+
function processEvent(eventData) {
12+
console.log(JSON.parse(ele.body));
13+
console.log("Message attributes are\n", ele.messageAttributes);
314
}

src/services/sendEmailService.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// AWS SDK dependencies
2+
import { SendEmailCommand } from "@aws-sdk/client-ses";
3+
4+
// local dependencies
5+
import { emailClient } from "../lib/emailClient.js";
6+
import { listGenericIdentities } from "../helpers/listGenericEmailIdentities.js";
7+
import { sampleEmailTemplate } from "../helpers/generateTemplates.js";
8+
9+
export async function sendEmailHandler(event) {
10+
try {
11+
// list set of Generic Email Accounts which will send the emails
12+
const genericAccounts = await listGenericIdentities();
13+
14+
if (Array.isArray(genericAccounts)) {
15+
const emailParams = {
16+
Destination: {
17+
CcAddresses: [],
18+
// list of receiver accounts
19+
ToAddresses: ["anijitsau@gmail.com"],
20+
},
21+
Message: {
22+
Body: {
23+
Html: {
24+
Charset: "UTF-8",
25+
Data: sampleEmailTemplate.emailContent,
26+
},
27+
},
28+
Subject: {
29+
Charset: "UTF-8",
30+
Data: process.env.SAMPLE_EMAIL_SUBJECT,
31+
},
32+
},
33+
Source: genericAccounts[0],
34+
ReplyToAddresses: [],
35+
};
36+
37+
// sending the Email
38+
const emailData = await emailClient.send(
39+
new SendEmailCommand(emailParams)
40+
);
41+
42+
return;
43+
}
44+
} catch (error) {
45+
return error.toString();
46+
}
47+
}

0 commit comments

Comments
 (0)