node.js로 메일 보내기


발생일: 2012.10.17

문제:
조만간 진행할 미니 프로젝트에서 node.js를 사용하기로 했다.

node.js는 어깨 너머로 보기만 했지, 실제로 사용해본 적은 없었다.

이참에 연습도 할 겸,
얼마 전 만든 라이브러리의 새 버전 배포 알람 메일링 배치 파일을 node.js 로 만들어봤다.

아래는 작업하면서 메모해둔 내용을 정리한 것이다.


해결책:

시작하기, 완전 초보 가이드

     오래된 버전이지만, 기본적인 개념에 대해 명료하게 설명한다.



유용한 라이브러리나 모듈을 가져다 쓰려면?

     Node Package Manager에서 가져온다.



npm 간단 사용법




npm install을 사용해 모듈을 인스톨했을 때, 모듈의 설치 위치.

     실행한 폴더에서 npm_modules 폴더를 생성해, 그 하위로 모듈을 추가한다.
     하위 모듈은 모듈명을 폴더명으로 갖는다.

     예를 들어,
          /workspace 에서 npm install mail 이란 걸 실행했다면,
          /workspace/npm_modules/mail/ 에 메일 모듈이 인스톨된다.

     npm install에 관한 자세한 내용은,
          https://npmjs.org/doc/install.html 를 참고하자.



require() 의 탐색 순서

     모듈을 설치하고 require('mail')과 같이 단순히 모듈 이름만 넣었는데, 잘 찾아온다.
     require의 탐색 경로 중에 node_modules 폴더가 포함돼 있나보다.

     검색해보니, node.js 문서에 require()의 탐색 경로에 대한 내용이 있다.

     홈의 폴더에서부터 모듈 폴더까지 순서대로 검색한다.

     예를 들어, require('bar')를 실행하면, 아래 순서대로 찾는다.

     1. /home/ry/projects/node_modules/bar.js
     2. /home/ry/node_modules/bar.js
     3. /home/node_modules/bar.js
     4. /node_modules/bar.js

     


메일 보내기 구현

     npm 라이브러리에서 메일 보내기 모듈을 검색했고,
     mailjs (https://npmjs.org/package/emailjs)를 사용하기로 결정했다.

     아주 쉽고 명료해서, 금방 보낼 수 있었다.
     중간에 메일 발송에 실패했다면서 status 5.1.1 에러가 발생했었는데,
     이건 메일 주소를 잘못 작성했기 때문이었다.

     예를 들어, 샘플에는 아래와 같이 주소를 작성하라 되어 있었는데,
          'someone <someone@gmail.com>, another <another@gmail.com>' 

     난 닉네임 없이 메일 주소만 보내려고 아래와 같이 작성했었다.
          'someone@gmail.com, another@gmail.com'

     알고보니 수신자 포맷이 '닉네임 <주소>' 형태여야 하는 거였다.
     따라서, 닉네임을 생략하려면 아래와 같이 작성해줘야 한다.
          '<someone@gmail.com>, <another@gmail.com>'
     


JSON 파일을 가져오기

     메일 주소를 별도의 json 파일로 뽑아내려고 한다.
     찾아보니, v.0.5.x 버전부터는 json 파일도 require() 로 가져올 수 있다고 한다.

     JSON 파일을 같은 폴더 내에 생성하고 require('list.json'); 을 호출했더니 에러가 난다.
     상대경로 없이 바로 파일명을 입력하니, 이걸 모듈로 판단해서 찾을 수 없었던 거다.
     (위에 메모해뒀던 require()의 탐색 순서 참고)

     require('./list.json') 으로 가져왔더니, 파일을 가져와지는 것 같은데 에러가 나더라.

     JSON 파일을 평소 코드에서 쓰던 것처럼 아래와 같이 작성했다.

     {
          // 수신
          'to': [
               '<someone@gmail.com>',
               '<another@gmail.com>'
          ]
     }

     위 파일에서 잘못된 것은 모두 2가지.
          1. 홑따옴표는 모두 쌍따옴표로 바꿔야 한다.
          2. JSON 파일에서는 주석을 허용하지 않는다. (http://stackoverflow.com/questions/244777/can-i-comment-a-json-file)

     올바른 포맷으로 수정하니 잘 작동한다. :)



핸들바로 템플릿 구현하기

     템플릿은 handlebars(http://handlebarsjs.com/) 모듈을 이용했다.
     
     main.handlebars 라는 파일에 템플릿을 정의해두고,
     파일 단위로 가져오려고 했는데, 바로 파일로 가져올 수는 없는 모양이다.
     (왠지 있을 것 같은데 내가 검색을 못한 것 같다)

     일단은, 아래처럼, 파일을 읽어와 넘기는 방식으로 구현했다.

          var hb = require('handlebars'),
               fs = require('fs'),
               configData = require('./config/config_data.json'), // 설정 파일은 외부에 정의했다 가정하고
               TEMPLATE_FILE_PATH = './templates/main.handlebars',
               FILE_ENCODING = 'utf-8';
          
          // 파일에서 가져온 템플릿
          var templateHtml = fs.readFileSync(TEMPLATE_FILE_PATH, FILE_ENCODING);
          
          // 핸들바 템플릿 객체 생성
          var template = hb.compile(templateHtml);

          // 데이터를 적용해 최종 HTML을 가져오려면 아래와 같이 호출한다.
          var html = template(configData);


     핸들바 문법이 아직은 좀 어색하지만 금방 익숙해질 것 같다.



여기까지 해서, 메일을 보내는 배치 파일을 작성했다.


처음 node.js 시작하기 문서를 본 시간부터, 완성하기까지 4시간 정도 밖에 걸리지 않은 것 같다.

자바스크립트 문법이라 익히기에도 간단하고,

라이브러리도 검색하기 쉬워서 큰 어려움은 없었다.



이렇게 쉽고 명료해서 node.js가 유행인가보다~




카테고리

분류 전체보기 (704)
About me. (6)
Daylogs (669)
비공개 (0)
영어공부 (0)
My works - 추억 (29)