Node.js로 다운로드 완료된 파일 목록을 메일로 전송하기

Summary

토렌트(Deluge)로 다운로드를 걸어놓고 진행상황을 매번 확인하기 귀찮아서 구현한 코드입니다. 다운로드 디렉토리를 관찰하다가 새로운 파일을 발견하면 files 맵에 파일이름을 키로 저장해 두고 3분을 기다립니다. 3분이 경과하면 files 맵에 저장된 파일 중 실제로 존재하는 파일만 추려서 파일 목록을 만들어내고 이를 G메일로 전송합니다. G메일 전송에는 emailjs라는 모듈이 사용되었습니다.

Module

$ npm install emailjs

Source

var fs = require('fs');
var path = require('path');

var completeDir = '/data/torrent/complete';
var files = {};
var working = false;

var email = require("emailjs/email");
var server = email.server.connect({
   user: "reshout",
   password: "xxxxxxxx",
   host: "smtp.gmail.com",
   ssl: true
});

fs.watch(completeDir, function(action, filename) {
  files[filename] = true;
  if (!working) {
    working = true;

    var text = "";
    var count = 0;

    setTimeout(function() {
      for (var prop in files) {
        if (files.hasOwnProperty(prop)) {
          var apath = path.join(completeDir, prop);
          if (fs.existsSync(apath)) {
            text += (prop + "\n");
            count++;
          }
        }
      }

      server.send({
        text: text,
        from: "reshout <reshout@gmail.com>",
        to: "reshout <reshout@gmail.com>",
        subject: "[reshout.com] " + count + " files downloaded"
      }, function(err, message) {
        console.log(err || message);
      });

      working = false;
      files = {};
    }, 1000 * 60 * 3);
  }
});