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();
复制代码

 

posted @   侯振宇  阅读(6158)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示