인스타그램 클론 코딩/#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}`)
);

- 결과물