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