Haraka Smtp服务器(编辑出站电子邮件正文内容)



我正在尝试为haraka编写一个自定义插件,haraka是一个nodejs支持的smtp服务器。我想在邮件正文中添加一些文本。这是我迄今为止的代码。

var utils  = require('./utils');
var util   = require('util');
exports.hook_data = function (next, connection) 
{
connection.transaction.parse_body = true; 
next();
}
exports.hook_data_post = function (next,connection)
{
var plugin = this ;
plugin.loginfo(connection.transaction.body.bodytext);
var pos =connection.transaction.body.bodytext.indexOf('</body>');
connection.transaction.body.bodytext = connection.transaction.body.bodytext.splice(pos-1, 0,  '<p>add this paragraph to the existing body.</p>  r n');
plugin.loginfo(connection.transaction.body.bodytext);
next();
}
String.prototype.splice = function(idx, rem, str) 
{
return this.slice(0, idx) + str + this.slice(idx + Math.abs(rem));
};
exports.hook_queue_outbound = function(next,connection)
{
var plugin = this;
plugin.loginfo(connection.transaction.body.bodytext);
next();
}

当插件运行时,这里是它打印到日志中的内容。

旧机身登录信息:

[INFO] [-] [add_some_data] <html>
<body>
olddata
<p>add this paragraph to the existing body.</p>  r
</body>
</html>

新的身体日志:

[INFO] [-] [add_some_data] <html>
<body>
olddata
<p>add this paragraph to the existing body.</p>  r
</body>
</html>

我想知道的是为什么它没有在发送的电子邮件中包含数据。

正如您所看到的,我甚至试图将消息正文记录在"hookqueue_outbound"中,这是一个稍后调用hookpost_data的hook,我可以看到编辑后的结果。但在接收端,我收到了旧的电子邮件。我犯了一个愚蠢的错误,如果能给我一个指示,我将不胜感激
谢谢。

好吧,伙计们,我很挣扎,我终于做到了。以防其他人将来会觉得这很有帮助,所以我发布了我是如何做到的。haraka add_body_filter中有一个内置的助手,我用过了。:)
欢呼

exports.hook_data = function (next, connection) 
{ 
var plugin = this;
connection.transaction.parse_body = true; 
connection.transaction.add_body_filter(/text/(plain|html)/, function (ct, enc, buff)
{
var buf = buff.toString('utf-8');
var pos = buf.indexOf('</body>');
buf = buf.splice(pos-1, 0,  '<p>add this paragraph to the existing body.</p>');
return new Buffer(buf);
});
next();
}

最新更新