zoukankan      html  css  js  c++  java
  • Meteor + node-imap(nodejs) + mailparser(nodejs) 实现完整收发邮件

    版本信息:

    Meteor:windows MIS安装  0.6.4

    node-imap:npm指定的0.8.0版,不是默认的0.7.x版。

    mailparser:npm安装0.3.6

    以下是记录踩到的坑:

    1. 使用meteor的email来发送邮件时,设置process.env.MAIL_URL要注意,如果你的gmail账号是自己设置了domain的,如“xxx@unitedstack.com”。那么process.env.MAIL_URL的写法应该是:“smtp://xxx%40unitedstack.com:YOUR_PASSWORD@smtp.googlemail.com:465”。一定注意第一个@写成“%40”。

    2.github上node-imap的版本和例子都是适用于0.8.0的。使用npm如果安装默认的0.7.x版则跑不通官网例子。

    3.windows下安装mailparser时会出现 “MSBuild” 报出的错误。安装 visual studio 然后重启就行了。

    因为线上搜到的node-imap+mailparser的例子都有版本的问题。以下给出一个能在上面描述的版本中跑通的例子:

    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();
  • 相关阅读:
    Redis集群~StackExchange.redis连接Twemproxy代理服务器
    开源的Android视频播放器
    Servlet 实现文件的上传与下载
    HDU1878 欧拉回路
    C#根据域名查询IP(CMD命令参数输入或者启动程序后再输入查询)
    Windows API获取系统配置文件的配置参数
    Lucene核心--构建Lucene搜索(下篇,理论篇)
    Lucene核心--构建Lucene搜索(上篇,理论篇)
    hdu1397(素数组和成偶数的个数 用 标记法)
    hdu1248
  • 原文地址:https://www.cnblogs.com/sskyy/p/3200086.html
Copyright © 2011-2022 走看看