Meteor+node-i map(nodejs)+malparser(nodejs)完全送受信メールを実現します.

5231 ワード

バージョン情報:
Meteor:windows MISインストール 0.4.4
node-map:npm指定の0.8.0版は、デフォルトの0.7.x版ではありません.
mail parser:npmインストール0.0.6
 
記録が踏まれた穴は以下の通りです.
1.meteorのemailを使ってメールを送る場合、process.env.MAIL_を設定します.URLは注意してください.もしあなたのgmailアカウントが自分でdomainを設定した場合、「[email protected]」をクリックします.ではプロcess.env.MAIL_URLの書き方はsmtp://xxx%40unitedstack.com:[email protected] mail.com:465」.最初の@は必ず「%40」と書くように注意します.
2.github上のnode-i mapのバージョンと例はいずれも0.8.0に適用されます.npmを使ってデフォルトの0.7.x版をインストールすると、公式サイトの例が分かりません.
3.windowsでmail parserをインストールすると「MSBuild」のエラーが発生します.visual studioをインストールして再起動すればいいです.
 
オンラインで検索したnode-i map+malparserの例にはバージョンの問題があります.上記のバージョンで走れる例を以下に示す.
var Imap = require('imap')
var MailParser = require("mailparser").MailParser
var fs = require("fs")

var imap = new Imap({
  user: 'YOUR_USERNAME',
  password: 'YOUR_PASSWORD',
  host: 'imap.gmail.com',
  port: 993,
  tls: true,
  tlsOptions: { rejectUnauthorized: false }
});

function openInbox(cb) {
  imap.openBox('INBOX', true, cb);
}

var messages = []

imap.once('ready', function() {
  openInbox(function(err, box) {
    console.log("open")
    if (err) throw err;
    imap.search([ 'UNSEEN', ['SINCE', 'May 20, 2010'] ], function(err, results) {
      if (err) throw err;
      var f = imap.fetch(results, { bodies: '' });

      f.on('message', function(msg, seqno) {
        var mailparser = new MailParser()
        msg.on('body', function(stream, info) {
          stream.pipe( mailparser );
          mailparser.on("end",function( mail ){
            fs.writeFile('msg-' + seqno + '-body.html', mail.html, function (err) {
              if (err) throw err;
              console.log(seqno + 'saved!');
            });
          })
        });
        msg.once('end', function() {
          console.log(seqno + 'Finished');
        });
      });
      f.once('error', function(err) {
        console.log('Fetch error: ' + err);
      });
      f.once('end', function() {
        console.log('Done fetching all messages!');
        imap.end();
      });
    });
  });
});

imap.once('error', function(err) {
  console.log(err);
});

imap.once('end', function() {
  console.log('Connection ended');
});

imap.connect();