2016-05-30 7 views
1

Я пытаюсь написать настраиваемый плагин для haraka для сервера smtp с поддержкой nodejs. Я хочу добавить текст в почтовый ящик. вот мой код до сих пор.Haraka Smtp Server (Редактирование исходящего содержимого EMail Body)

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

Когда плагин работает здесь, это то, что он печатает в журнале.

Старый Body Логинфо:

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

New Body Log:

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

Что я хочу знать, почему она не включает данные внутри исходящей электронной почты.

как вы можете видеть, я даже пытался зарегистрировать тело сообщения внутри «hook_queue_outbound» крюка, который позже называется hook_post_data, и я могу видеть отредактированный результат. но на принимающей стороне я получаю старую электронную почту. Я делаю какую-то глупую ошибку, и я буду очень признателен, если дано направление.
Спасибо.

ответ

1

Ok Fellows я боролся, и я наконец сделал это. если кто-то еще может найти его полезным в будущем, так что я публикую, как это сделать. есть встроенный помощник в 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(); 
}