如何解析Haraka上的电子邮件?

时间:2015-01-12 07:24:24

标签: javascript node.js email smtp mail-server

我一直在探索haraka(http://haraka.github.io),我已成功将其安装在我的linux机器上。我想知道是否有一个很好的教程,使用haraka解析电子邮件元标题和内容正文。我检查他们的手册,但我找不到它。关于如何做到这一点的任何想法/建议将非常感激。谢谢。

以下是我检索电子邮件正文的脚本:

var winston = require('winston');
exports.hook_data = function (next, connection) {
    winston.log('info', '----------------------------------------');
    winston.log('info', 'hook_data');
    // enable mail body parsing
    connection.transaction.parse_body = true;
    winston.log('info', "body="+connection.transaction.body);
    winston.log('info', "mail_from="+connection.transaction.mail_from);
    next();
}

输出:

{"level":"info","message":"----------------------------------------","timestamp":"2015-01-12T07:16:28.216Z"}
{"level":"info","message":"hook_data","timestamp":"2015-01-12T07:16:28.217Z"}
{"level":"info","message":"body=null","timestamp":"2015-01-12T07:16:28.218Z"}
{"level":"info","message":"mail_from=myemail@hostname.com","timestamp":"2015-01-12T07:16:28.218Z"}

如您所见,正文包含空值。

3 个答案:

答案 0 :(得分:2)

对我来说这很有用

connection.transaction.body.children[1].bodytext
exports.hook_data = function (next, connection) {
    connection.transaction.parse_body = true;
    this.loginfo("connection.transaction.parse_body");
    next();
}

exports.hook_data_post = function (next, connection) {
    this.loginfo("connection.transaction.body.bodytext");
    this.loginfo(connection.transaction.body.children[1].bodytext);
    next();
}

答案 1 :(得分:1)

您可以使用以下代码检索电子邮件正文

connection.transaction.body.body_text_encoded
connection.transaction.body.bodytext

它的代码很容易理解。你可以阅读并按照你的意思去做。

答案 2 :(得分:1)

似乎需要在数据到达之前设置transaction.parse_body - 所以在“数据”中这样做。 hook(在DATA命令中调用)或更早版本:

exports.hook_data = function (next, connection) {
    connection.transaction.parse_body = true;
    next();
}

然后你可以从' data_post'中读取正文。 (在数据结束标记处调用)hook:

exports.hook_data_post = function (next, connection) {
    this.loginfo(connection.transaction.body.bodytext);
    next();
}