Haraka это современный, высокопроизводительный и расширяемый сервер почты написанный на JavaScript.
Установка
В корне проекта NodeJS запустите:
npm install Haraka
npm install mailparser
Если вы используете Haraka как Relay сервер, то не забудьте обновить конфигурацию файла config/smtp_forward.ini
Листинг my-plugin.js
const { simpleParser } = require('mailparser');
function readMailStream(stream) {
  return new Promise((resolve, reject) => {
    const chunks = [];
    stream.on('data', (chunk) => {
      chunks.push(chunk);
    });
    stream.on('end', () => {
      simpleParser(Buffer.concat(chunks).toString('utf8'), (error, mail) => {
        if (error) {
          return reject(error);
        }
        resolve(mail);
      });
    });
  });
}
exports.register = function () {
  this.loginfo('Initializing my-plugin');
  this.register_hook('mail', 'mail');
};
exports.hook_data = function (next /*, connection */) {
  next();
};
exports.mail = function (next, connection /*, params */) {
  // Здесь вы можете прочитать данные письма: uuid, mail_from, rcpt_to, message_stream, notes
  this.loginfo(connection.transaction)
  connection.relaying = true; // Установите, если используете как Relay
  connection.transaction.parse_body = true;
  readMailStream(connection.transaction.message_stream).then((mail) => {
    this.loginfo('TEXT >>> ' + mail.text);
    this.loginfo('HTML >>> ' + mail.html);
    this.loginfo('Date >>> ' + mail.date);
    this.loginfo('Subject >>> ' + mail.subject);
  });
  next();
};
Запуск
Запуск Haraka производится следующей командой:
./node_modules/.bin/haraka -c ./src
В директории ./config/plugins добавьте свой плагин, в нашем случае с именем «my-plugin.js»

Тестирование
Для отправки тестового письма можете воспользоваться утилитой swaks. Попробуем отправить на наш сервер HTML письмо:
./swaks -h domain.com \
  --from from@domain.com --to your@domain.com \
  --add-header "Content-Type: text/html" \
  --body '<h1>Hello world</h1>' \
  --s localhost --port 2525

 
 
 
