인스타그램 클론 코딩/#3 GraphQL API
# 3.3 Nodemailer를 이용한 sendMail 기능
정중식
2019. 12. 20. 18:33
.env 설정 다시
import dotenv from "dotenv";
import path from "path";
dotenv.config({ path: path.resolve(__dirname, ".env") });
import { GraphQLServer } from "graphql-yoga";
import logger from "morgan";
import schema from "./schema";
const PORT = process.env.PORT || 4000;
const server = new GraphQLServer({ schema });
server.express.use(logger("dev"));
server.start({ port: PORT }, () =>
console.log(`✅ Server running on port ${PORT}`)
);
// import dotenv from "dotenv";
// import path from "path";
// dotenv.config({ path: path.resolve(__dirname, ".env") });
// 등등 추가됨 이유는: 앞전에는 .env파일의 PORT를 못불러오고있었음
// 확인은 console.log(process.env.PORT);
Nodemailer
- nodemailer를 활용한 비밀코드 메일에 전송
(필요한것은 sendgrid 및 sendgrid의 기능인 sendgrid transport)
- yarn add nodemailer
- sendgrid 홈페이지에서 회원가입 및 로그인해줌
- yarn add nodemailer-sendgrid-transport (sendgrid transport를 사용하기위해)
다음 아래는 사용된 코드들 정리
- utils.js
import dotenv from "dotenv";
import path from "path";
dotenv.config({ path: path.resolve(__dirname, ".env") });
import { adjectives, nouns } from "./words";
import nodemailer from "nodemailer";
import sgTransport from "nodemailer-sendgrid-transport";
export const generateSecret = () => {
const randomNumber = Math.floor(Math.random() * adjectives.length);
return `${adjectives[randomNumber]} ${nouns[randomNumber]}`;
};
const sendMail = email => {
const options = {
auth: {
api_user: process.env.SENDGRID_USERNAME,
api_key: process.env.SENDGRID_PASSWORD
}
};
const client = nodemailer.createTransport(sgTransport(options));
return client.sendMail(email);
};
export const sendSecretMail = (address, secret) => {
const email = {
from: "wndtlr@prismagram.com",
to: address,
subject: "🔒Login Secret for Prismagram🔒",
html: `Hello! Your login secret it ${secret}.<br/>Copy paste on the app/website to log in`
};
return sendMail(email);
};
- .env
PORT = 4000
SENDGRID_USERNAME = "wjdwndtlr"
SENDGRID_PASSWORD = ""
- server.js
import dotenv from "dotenv";
import path from "path";
dotenv.config({ path: path.resolve(__dirname, ".env") });
import { GraphQLServer } from "graphql-yoga";
import logger from "morgan";
import schema from "./schema";
import { sendSecretMail } from "./utils";
sendSecretMail("wndtlr1024@gmail.com", "HELLO!");
const PORT = process.env.PORT || 4000;
const server = new GraphQLServer({ schema });
server.express.use(logger("dev"));
server.start({ port: PORT }, () =>
console.log(`✅ Server running on port ${PORT}`)
);
- 결과물