node.js实现收取邮件,以及对特定邮件内容的自动回复,邮件正文保存的功能

废话不多说,直接上代码。。。

var Imap = require(‘imap‘);
var inspect = require(‘util‘).inspect;
var MailParser = require("mailparser").MailParser;
var nodemailer = require(‘nodemailer‘);

var fs = require(‘fs‘);
var http = require(‘http‘);

var imap = new Imap({
user: ‘youremail‘,
password: ‘yourpassword.‘,
host: ‘imap.qq.com‘,
port: 993,
tls: true
});

var smtpTransport = nodemailer.createTransport({
host: ‘smtp.qq.com‘,
port: 465,
secure: true, // use SSL
auth: {
user: ‘youremail‘,
pass: ‘yourpassword‘
}
});

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

imap.once(‘ready‘, function() {

openInbox(function(err, box) {
if (err) throw err;

imap.on(‘mail‘, function() {
console.log("收到一封新邮件!")
//readMailbox();
http.createServer(readMailbox).listen(3100);
})
});
})

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

// imap.once(‘end‘, function() {
// console.log(‘邮件收取结束‘);
// });

imap.connect();

function readMailbox(req, res) {
//只读取新邮件
//
res.writeHead(200, { ‘Content-Type‘: ‘text/html;charset=utf-8‘ });

//new代表新邮件,未读邮件

imap.search([‘NEW‘], function(err, results) {
var count = 0;
//console.log(‘unseen mail count: ‘ + results.length);
if (err) throw err;
var f = imap.fetch(results, { bodies: ‘‘, markSeen: true }); //标记为已读

f.on(‘message‘, function(msg, seqno) {
var mailparser = new MailParser();
var prefix = ‘(#‘ + seqno + ‘)‘;
//正文内容的处理
msg.on(‘body‘, function(stream, info) {
if (info.which === ‘TEXT‘) {
console.log(prefix + ‘Body [%s] found, %d total bytes‘, inspect(info.which), info.size);
}
//pipe到mailparse解析器
stream.pipe(mailparser);
var buffer = ‘‘,
count = 0;
stream.on(‘data‘, function(chunk) {
count += chunk.length;
buffer += chunk.toString(‘utf8‘);
});
//stream结束,向console发出消息
stream.on(‘end‘, function() {
// if (info.which !== ‘TEXT‘) {
// console.log(prefix + ‘Parsed header: %s‘, inspect(Imap.parseHeader(buffer)));
// } else {
// console.log(prefix + ‘Body[%s] Finished‘, inspect(info.which));
// }

});
//保存邮件内容到本地
mailparser.on("end", function(mail) {
//console.log(typeof(mail))
//mail是一个对象
fs.writeFile(‘msg- ‘ + seqno + ‘.html‘, mail.html, function(err) {
if (err) {
throw err;
}
});
//如果有附件,则存储起来。
if (mail.attachments) {
mail.attachments.forEach(function(attachment) {
fs.writeFile(‘msg-‘ + seqno + ‘-‘ + attachment.generatedFileName, attachment.content, function(err) {
if (err) {
throw err;
}
});
});
};

res.end(mail.html);

// console.log(mail.from,mail.headers);
if (mail.html.indexOf("hello") != -1) {
console.log(mail.from[0].address);

var mailOptions = {  
from: "[email protected]",
  to: mail.from[0].address,
  subject: "node邮件",
  html: ‘<h2>如果你的邮件中含有"hello"字样,将会自动收到这样一封邮件!</h2><p style="color:#e00;">来自李志祥的邮件</p>‘
}

smtpTransport.sendMail(mailOptions, function(err, resp) {  
if (err) {    
console.log(err); 
}
console.log("发送成功")  
smtpTransport.close(); //关闭连接池
});
}
});
});

f.on(‘error‘, function(err) {
console.log(‘Fetch error: ‘ + err);
});

// f.on(‘end‘, function() {
// count++;
// console.log(‘已抓取到‘ + count + ‘邮件‘);
// //imap.end()
// });
});
});
}

时间: 2024-11-05 10:44:53

node.js实现收取邮件,以及对特定邮件内容的自动回复,邮件正文保存的功能的相关文章

Node.js的线程和进程

http://www.admin10000.com/document/4196.html 前言 很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?通过本章的学习,能够让读者较为清晰的理解Node.js对于单/多线程的关系和支持情况.同时本章还将列举一些让Node.js的web服务器线程阻塞的例子,最后会提供Node.js碰到这类cpu密集型问题的解决方案. 在学习本章之前,读者需要对Node.js有一个初步的认识,熟悉Node.js基本语法.cluster模块.

【读书笔记】《Node.js入门经典》

Node.js学习笔记 Nodejs学习笔记 Nodejs介绍 npmNode Package Manager 1 npm常用命令 IO的不可预测性 回调 1 回调剖析 2 Node在读写文件使用回调 3 Node在HTTP使用回调 4 回调顺序 5 同步与异步代码 HTTP 1 HTTP响应状态代码 2 使用URL模块响应不同的请求 3 使用Nodejs创建HTTP客户端 4 将函数发布为URL服务提供客户端接口 5 两个js文件相互调用函数 数据持久化 1 将数据写入文件 2 读取环境变量

[转] Node.js的线程和进程

[From] http://www.admin10000.com/document/4196.html 前言 很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?通过本章的学习,能够让读者较为清晰的理解Node.js对于单/多线程的关系和支持情况.同时本章还将列举一些让Node.js的web服务器线程阻塞的例子,最后会提供Node.js碰到这类cpu密集型问题的解决方案. 在学习本章之前,读者需要对Node.js有一个初步的认识,熟悉Node.js基本语法.clu

Node.js应用场景及发展趋势

node主要应用场景是在大前端,阿里的思路是比较合适的,但是必须要注意,绝对不能让node做太多的业务逻辑,他只适合接受人家生成好的数据,然后或渲染后,或直接发送到客户端.如果让node做复杂的业务逻辑,那会得不偿失的.这个阿里的人可以来说明一下,你们node主要应用的场景是不是都是比较简单的逻辑. 回调模式下的异步是有明显缺陷的,程序的执行顺序必须依靠回调来保证,没有层层回调,就没有可以保障的逻辑顺序,这也就注定了,node不能做复杂的业务逻辑.javascript语言本身也一直在和回调做斗争

Node.js 常用工具

Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.inherits util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数. JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同.JavaScript 没有 提供对象继承的语言级别特性,而是通过原型复制来实现的. 在这里我们只介绍util.inherits

Node.js【5】核心模块

笔记来自<Node.js开发指南>BYVoid编著 第4章 Node.js核心模块 4.1.全局对象 Node.js中的全局对象是global,所有全局变量(除了global本身以外)都是global对象的属性.我们在Node.js中能够直接访问到对象通常都是global的属性,如console.process等. 永远使用var定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码的耦合风险. process用于描述当前Node.js进程状态的对象,提供了一个与操作系统的简单接口.

Node.js GET/POST请求

在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交. 表单提交到服务器一般都使用GET/POST请求. 本章节我们将为大家介绍 Node.js GET/POST请求. 获取GET请求内容 由于GET请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET请求的参数. node.js中url模块中的parse函数提供了这个功能. var http = require('http'); var url = require('url');

node.js简单的页面输出

在node.js基本上没有兼容问题(如果你不是从早期的node.js玩起来),而且原生对象又加了这么多扩展,再加上node.js自带的库,每个模块都提供了花样繁多的API,如果还嫌不够,github上还有上千个插件.对于想向尝试一下后端编程的JSer来说,这是极具诱惑力的.可能有人说,后端不是涉及数据库操作吗?这与比前端的DOM兼容比起来,不值一提.还有什么文件夹与文件操作 ,你就当成是一种特殊的数组操作就是.因此你完全可以愤愤不平! 好了,我们来点实质的内容吧.node.js本来就是一个htt

10个最好的 Node.js MVC 框架

Node.js 是最流行的 JavaScript 服务端平台,它允许建立可扩展的 Web 应用程序.Node.js 包含不同类型的框架,如 MVC 框架.全栈框架.REST API  以及大量的服务器库,使它能够快速构建 Web 服务器,而无需使用外部软件(如 Apache 和 Lighttpd 等).这些框架使得它更加用户友好,易于使用,还支持众多的特性和功能,只要按照几个步骤就可以开发出庞大的 Web 应用程序. 1) Sails js Sails 是一款优秀的框架,可以很容易地开发定制的,