Skip to content

Commit fc3ca00

Browse files
feat(server): setup nodemailer
1 parent f39255a commit fc3ca00

5 files changed

Lines changed: 50 additions & 0 deletions

File tree

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ commit messages are standardized:
3636
- Run `npm install` to install all dependencies
3737
- Make a `.env` file with all secrets. You also need to generate google client id and secret key. You may refer [to this](https://developers.google.com/identity/protocols/oauth2https://developers.google.com/adwords/api/docs/guides/authentication#create_a_client_id_and_client_secret) for the steps.
3838
> Note: Put `<server_url>/api/auth/google/redirect` in redirect url when generating google client id and secret.
39+
- You also need to generate access token and refresh token for sending emails. Follow [this guide](https://www.freecodecamp.org/news/use-nodemailer-to-send-emails-from-your-node-js-server/) to generate you own.
3940
- Run `npm run dev` to start server
4041

4142
### Frontend setup

server/.env.example

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ JWT_REFRESH_SECRET=refreshsecret
44
JWT_SECRET=jwtsecret
55
GOOGLE_CLIENT_ID=
66
GOOGLE_CLIENT_SECRET=
7+
GMAIL_ID=
8+
GMAIL_ACCESS_TOKEN=
9+
GMAIL_REFRESH_TOKEN=
710

811
Refer this to get client id & secret
912
https://developers.google.com/identity/protocols/oauth2https://developers.google.com/adwords/api/docs/guides/authentication#create_a_client_id_and_client_secret

server/package-lock.json

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

server/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"express": "^4.17.1",
2020
"jsonwebtoken": "^8.5.1",
2121
"mongoose": "^5.12.9",
22+
"nodemailer": "^6.6.1",
2223
"passport": "^0.4.1",
2324
"passport-google-oauth": "^2.0.0",
2425
"passport-google-oauth20": "^2.0.0",
@@ -32,6 +33,7 @@
3233
"@types/jsonwebtoken": "^8.5.1",
3334
"@types/mongoose": "^5.10.5",
3435
"@types/node": "^15.0.3",
36+
"@types/nodemailer": "^6.4.2",
3537
"@types/passport": "^1.0.6",
3638
"@types/passport-google-oauth": "^1.0.41",
3739
"@types/passport-google-oauth20": "^2.0.7",

server/src/config/mailer.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import nodemailer from "nodemailer";
2+
3+
// async..await is not allowed in global scope, must use a wrapper
4+
export const mailer = async (email: string): Promise<void> => {
5+
const transporter = nodemailer.createTransport({
6+
host: "smtp.gmail.com",
7+
port: 465,
8+
secure: true,
9+
auth: {
10+
type: "OAuth2",
11+
user: process.env.GMAIL_ID,
12+
clientId: process.env.GOOGLE_CLIENT_ID,
13+
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
14+
refreshToken: process.env.GMAIL_REFRESH_TOKEN,
15+
accessToken: process.env.GMAIL_ACCESS_TOKEN,
16+
expires: 3000,
17+
},
18+
});
19+
20+
// send mail with defined transport object
21+
const info = await transporter.sendMail({
22+
from: process.env.GMAIL_ID, // sender address
23+
to: email, // list of receivers
24+
subject: "Reminder for Event", // Subject line
25+
text: "Hello world", // plain text body
26+
html: "<h1>Hello world</h1>", // html body
27+
});
28+
console.log("Email sent!");
29+
console.log(info);
30+
};

0 commit comments

Comments
 (0)