Haraka

Начинаем работать с Haraka

17 сентября, 2022
1 минута чтения

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»

haraka
Работа Haraka в действии

Тестирование

Для отправки тестового письма можете воспользоваться утилитой swaks. Попробуем отправить на наш сервер HTML письмо:

./swaks -h domain.com \
  --from [email protected] --to [email protected] \
  --add-header "Content-Type: text/html" \
  --body '<h1>Hello world</h1>' \
  --s localhost --port 2525
haraka listen
Результат парсинга письма

Денис Сергеевич Басковский

Философ, изобретатель и поэт.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
dialog flow alice
Предыдущая статья

Создаем диалог для Алисы используя DialogFlow и Firebase

ipld
Следующая статья

Пример работы с IPLD