【问题标题】:How to parse email on Haraka?如何在 Haraka 上解析电子邮件?
【发布时间】:2015-01-12 07:24:24
【问题描述】:

我一直在探索 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"}

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

【问题讨论】:

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


    【解决方案1】:

    对我来说这很有效

    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();
    }
    

    【讨论】:

      【解决方案2】:

      似乎 transaction.parse_body 需要在数据到达之前设置 - 所以在 'data' 挂钩(在 DATA 命令中调用)或更早地进行设置:

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

      然后您可以从“data_post”(在数据结束标记处调用)挂钩读取正文:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-13
          • 2015-05-08
          • 1970-01-01
          • 2013-08-18
          • 2011-01-07
          • 2018-12-01
          • 1970-01-01
          相关资源
          最近更新 更多