ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • # 3.3 Nodemailer를 이용한 sendMail 기능
    인스타그램 클론 코딩/#3 GraphQL API 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}`)
    );
    

    - 결과물

    댓글

Designed by Tistory.