Работа с почтой в Node.js. Примеры и возможности КриптоАРМ Server
Отправляйте и принимайте почту в серверных приложениях на Node.js — с российской криптографией. Модуль trusted-mail из состава SDK КриптоАРМ Server реализует подписание и шифрование писем по ГОСТ.
Что такое trusted-mail
trusted-mail — модуль для работы с почтовыми протоколами IMAP, SMTP и POP3 в Node.js. Он построен на открытой библиотеке MailCore2, но с важным дополнением — поддержкой российских криптографических алгоритмов.
Модуль входит в КриптоАРМ SDK и решает типовые задачи серверных приложений: отправка уведомлений, получение писем, автоматическая рассылка файлов.
Безопасность на уровне протокола
Безопасность — главное отличие от обычных почтовых библиотек:
- ГОСТ S/MIME. Подписание и шифрование писем через модуль
trusted-crypto— подтверждение авторства и конфиденциальность переписки. - ГОСТ TLS. Защищённые соединения с почтовыми серверами через cpcurl от КриптоПро.
- КриптоПро CSP. Работа с сертифицированным криптопровайдером.
Это делает trusted-mail подходящим решением для проектов с высокими требованиями к безопасности.
Отправка писем (SMTP)
Отправка письма — настройка сессии, формирование сообщения и вызов метода отправки:
const session = new SMTPAsyncSession();
session.hostname = "smtp-mail.outlook.com";
session.port = 587;
session.username = "test@hotmail.com";
session.password = "testpassword";
session.authType = AuthType.AuthTypeSASLLogin;
session.connectionType = ConnectionType.ConnectionTypeStartTLS;
// Заголовки и тело письма
const header = new MessageHeader();
header.from = "test@hotmail.com";
header.to = ["test1@hotmail.com", "test2@hotmail.com"];
header.subject = "Testing SMTP send";
const builder = new MessageBuilder();
builder.header = header;
builder.htmlBody = "<div>Test message for send by SMTP.</div>";
builder.textBody = "Test message for send by SMTP.\n-----\n";
// Отправка
session.sendMessageOperation(
"test@hotmail.com",
["test1@hotmail.com", "test2@hotmail.com"],
builder.data
).then(() => console.log("Письмо отправлено"))
.catch((e) => console.error("Ошибка:", e));
Доступны письма с вложениями, текстовый и HTML-формат, настройка параметров отправки.
Получение писем и работа с папками (IMAP)
Протокол IMAP позволяет получать письма с сервера, управлять папками, помечать письма прочитанными и удалять их:
const session = new IMAPSession();
session.hostname = "test.outlook.com";
session.port = 993;
session.username = "test@hotmail.com";
session.password = "test";
session.connectionType = ConnectionType.ConnectionTypeStartTLS;
session.checkCertificateEnabled = true;
// Список подписанных папок
const folders = session.fetchSubscribedFolders();
// Статус папки INBOX
const folderStatus = session.folderStatus("INBOX");
console.log(folderStatus.messageCount); // всего сообщений
console.log(folderStatus.unseenCount); // непрочитанные
// Сообщения по UID
const messages = session.fetchMessagesByUID("INBOX");
// Копирование сообщений между папками
session.copyMessages("INBOX", "PERSONAL", 1, 100);
Классы MessageBuilder, MessageHeader, MessageParser и Attachment покрывают формирование и чтение писем, включая автоматическую рассылку файлов по адресатам.
Подпись и шифрование писем (S/MIME)
Подпись добавляется к сообщению сертификатом подписанта — после этого письмо подтверждает авторство:
const builder = new MessageBuilder();
builder.header = header;
builder.textBody = "Текст письма";
builder.SetSignerCert(certPem); // сертификат подписанта
builder.signerCertPin = "******"; // PIN от ключа
const signed = builder.data; // подписанное письмо (S/MIME)
Шифрование выполняется на сертификаты получателей — прочитать письмо сможет только владелец закрытого ключа:
const builder = new MessageBuilder();
builder.header = header;
builder.textBody = "Текст письма";
builder.SetRecipientsCerts([cert1, cert2]); // сертификаты получателей
const encrypted = builder.data; // зашифрованное письмо
Проверку подписи и расшифрование полученного письма берёт на себя MessageParser:
const parser = new MessageParser();
parser.Import(messageBuffer);
// или: parser.Read("./message.eml");
if (parser.isSigned) {
console.log("Подпись действительна:", parser.verifyResult);
}
if (parser.isEncrypted) {
parser.decryptPin = "******";
console.log("Расшифровано:", parser.decryptResult);
}
const text = parser.PlainTextBodyRendering();
const attachments = parser.attachments;
Преимущества
- Безопасность. SSL/TLS и российские криптостандарты: ГОСТ для S/MIME подтверждает авторство письма и сохраняет конфиденциальность переписки.
- Готовность к Node.js. Модуль создан для экосистемы Node.js — интеграция в существующую архитектуру без написания сложного криптокода.
Как начать
Установите пакет trusted-mail — и следуйте инструкциям в примерах из репозитория. Если нужна помощь с настройкой или интеграцией, команда готова поддержать: support@trusted.ru.
Заключение
trusted-mail — безопасное решение для работы с электронной почтой на Node.js. ГОСТ-подпись и шифрование, поддержка почтовых протоколов и лёгкая интеграция делают его незаменимым для серверных приложений, которые работают с почтой.
Подробнее о возможностях КриптоАРМ Server — в статье «КриптоАРМ Server — возможности по интеграции и автоматизации».