Преобразование необработанных тел электронных писем в сравнимые строки — распространённая необходимость при создании спам‑фильтров, систем тикетирования или генераторов автоматических ответов. Aspose.Email Cloud SDK for Node.js предоставляет мощный API, который делает сравнивать текст в электронных письмах в Node.JS простым в приложениях Node.js. В этом руководстве вы узнаете, как настроить SDK, запустить полный пример кода, который читает файлы .EML, выполнить пакетные проверки сходства, точно настроить пороги и вызвать ту же операцию через REST‑запросы cURL.

Сравнение текста в электронных письмах в Node.JS за 5 шагов

Этот учебник показывает, как сравнивать текст в электронных письмах в Node.JS с использованием Aspose.Email Cloud SDK.

  1. Установите SDK и настройте учетные данные: Добавьте пакет в ваш проект и создайте объект Configuration с вашим идентификатором клиента и секретом.
const { EmailApi, Configuration } = require('asposeemailcloud');
const config = new Configuration({
    clientId: process.env.ASPose_CLIENT_ID || 'YOUR_CLIENT_ID',
    clientSecret: process.env.ASPose_CLIENT_SECRET || 'YOUR_CLIENT_SECRET'
});
const emailApi = new EmailApi(config);
  1. Загрузите исходный и целевой файлы EML: используйте fs.readFileSync для чтения необработанных байтов каждого письма.
const fs = require('fs');
function readEmailFile(filePath) {
    return fs.readFileSync(filePath);
}
  1. Установить параметры сравнения: Создайте экземпляр CompareOptions и настройте флаги, такие как ignoreCase, ignoreWhitespace и similarityThreshold.
const { CompareOptions } = require('asposeemailcloud');
const compareOpts = new CompareOptions();
compareOpts.ignoreCase = true;
compareOpts.ignoreWhitespace = true;
compareOpts.ignorePunctuation = false;
compareOpts.similarityThreshold = 0.8; // 80%
  1. Выполните операцию сравнения: Вызовите emailApi.compare с подготовленными параметрами. Ответ содержит similarity (0‑1) и isSimilar (boolean).
compareOpts.leftEmail = leftBytes;
compareOpts.rightEmail = rightBytes;
const result = await emailApi.compare(compareOpts);
console.log(`Similarity: ${result.similarity}, IsSimilar: ${result.isSimilar}`);
  1. Обработать результаты пакетной обработки: Перебрать папку с письмами, сравнить каждый файл с эталонным письмом и записать результаты.
    Для получения более подробной информации об API см. Email API Reference.

Полный рабочий пример сравнения текста электронных писем в Node.JS

Следующий код демонстрирует, как сравнивать текст в электронных письмах в Node.JS с помощью одной функции, которая обрабатывает как одиночные, так и пакетные сравнения.

// Compare Text in Emails using Aspose.Email Cloud SDK for Node.js

const fs = require('fs');
const path = require('path');
const { EmailApi, CompareOptions, Configuration } = require('asposeemailcloud');

// -----------------------------------------------------------------------------
// Configuration – replace with your Aspose Cloud credentials
// -----------------------------------------------------------------------------
const config = new Configuration({
    clientId: process.env.ASPose_CLIENT_ID || 'YOUR_CLIENT_ID',
    clientSecret: process.env.ASPose_CLIENT_SECRET || 'YOUR_CLIENT_SECRET'
});
const emailApi = new EmailApi(config);

// -----------------------------------------------------------------------------
// Helper: read an .eml file and return its raw bytes (Buffer)
// -----------------------------------------------------------------------------
function readEmailFile(filePath) {
    return fs.readFileSync(filePath);
}

// -----------------------------------------------------------------------------
// Compare two email bodies and return similarity (0‑1)
// -----------------------------------------------------------------------------
async function compareEmailTexts(leftPath, rightPath, options) {
    const leftBytes = readEmailFile(leftPath);
    const rightBytes = readEmailFile(rightPath);

const compareOpts = new CompareOptions();
    compareOpts.leftEmail = leftBytes;
    compareOpts.rightEmail = rightBytes;
    compareOpts.ignoreCase = options.ignoreCase ?? true;
    compareOpts.ignoreWhitespace = options.ignoreWhitespace ?? true;
    compareOpts.ignorePunctuation = options.ignorePunctuation ?? false;
    compareOpts.similarityThreshold = options.similarityThreshold ?? 0.8; // default 80%

// API call – returns { similarity: number, isSimilar: boolean }
    const result = await emailApi.compare(compareOpts);
    return result;
}

// -----------------------------------------------------------------------------
// Batch processing – compare a reference email against many others
// -----------------------------------------------------------------------------
// Performance tip: limit parallelism to avoid overwhelming the service.
// Here we process 5 emails concurrently.
async function batchCompare(referenceEmailPath, emailsFolder, options) {
    const files = fs.readdirSync(emailsFolder)
        .filter(f => f.toLowerCase().endsWith('.eml'))
        .map(f => path.join(emailsFolder, f));

const concurrency = 5;
    let index = 0;
    const results = [];

async function worker() {
        while (true) {
            const i = index++;
            if (i >= files.length) break;
            const targetPath = files[i];
            try {
                const res = await compareEmailTexts(referenceEmailPath, targetPath, options);
                results.push({
                    target: path.basename(targetPath),
                    similarity: res.similarity,
                    isSimilar: res.isSimilar
                });
                console.log(`[${path.basename(targetPath)}] Similarity: ${res.similarity.toFixed(3)} – ${res.isSimilar ? 'Similar' : 'Different'}`);
            } catch (err) {
                console.error(`Error comparing ${targetPath}:`, err.message);
            }
        }
    }

// launch workers
    const workers = [];
    for (let i = 0; i < concurrency; i++) workers.push(worker());
    await Promise.all(workers);
    return results;
}

// -----------------------------------------------------------------------------
// Main execution
// -----------------------------------------------------------------------------
(async () => {
    try {
        const referenceEmail = path.resolve(__dirname, 'reference.eml'); // reference email
        const emailsDir = path.resolve(__dirname, 'emails'); // folder with .eml files to compare

const compareOptions = {
            ignoreCase: true,
            ignoreWhitespace: true,
            ignorePunctuation: false,
            similarityThreshold: 0.75 // 75% similarity required to be considered similar
        };

console.log('Starting batch comparison...');
        const batchResults = await batchCompare(referenceEmail, emailsDir, compareOptions);

// Example: summarize results
        const similarCount = batchResults.filter(r => r.isSimilar).length;
        console.log(`\nBatch completed. ${similarCount} out of ${batchResults.length} emails are similar to the reference.`);
    } catch (err) {
        console.error('Unexpected error:', err);
    }
})();

Примечание: Этот пример кода демонстрирует базовый функционал. Прежде чем использовать его в вашем проекте, убедитесь, что обновили все пути к файлам и значения конфигурации в соответствии с вашей реальной средой, проверьте, что все необходимые зависимости правильно установлены, и тщательно протестируйте в вашей среде разработки. Если вы столкнётесь с какими‑либо проблемами, обратитесь к официальной документации или свяжитесь с командой поддержки для получения помощи.

Сравнение текста электронного письма через REST API с использованием cURL

Тот же процесс сравнения можно выполнить с помощью прямых вызовов REST. Ниже приведён минимальный рабочий процесс.

  1. Получить токен доступа (замените заполнители вашими учётными данными).
curl -X POST "https://api.aspose.cloud/connect/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
  1. Загрузите левый email (left.eml).
curl -X PUT "https://api.aspose.cloud/v4.0/email/storage/file/left.eml" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -H "Content-Type: application/octet-stream" \
     --data-binary @left.eml
  1. Загрузите правильный email (right.eml).
curl -X PUT "https://api.aspose.cloud/v4.0/email/storage/file/right.eml" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -H "Content-Type: application/octet-stream" \
     --data-binary @right.eml
  1. Выполните операцию сравнения с желаемыми параметрами.
curl -X POST "https://api.aspose.cloud/v4.0/email/compare" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{
           "leftEmail": "left.eml",
           "rightEmail": "right.eml",
           "ignoreCase": true,
           "ignoreWhitespace": true,
           "ignorePunctuation": false,
           "similarityThreshold": 0.75
         }'

Ответ возвращает similarity и isSimilar. Для получения более подробной информации см. официальную документацию API.

Установка и настройка Aspose.Email Cloud SDK for Node.JS

Установите библиотеку через npm и проверьте источник загрузки.

npm install @asposecloud/aspose-email-cloud

Вы также можете клонировать исходный код из репозитория GitHub: Aspose.Email Cloud SDK for Node.js.
Убедитесь, что ваша среда выполнения — Node.js 14 или новее, и что у вас есть действующая учетная запись Aspose Cloud с клиентскими учетными данными.

Настройка параметров сравнения для схожести текста электронных писем

SDK предоставляет несколько флагов, влияющих на алгоритм схожести:

  • ignoreCase - Когда true, сравнение игнорирует регистр букв.
  • ignoreWhitespace - Пропускает пробелы, разрывы строк и табуляцию.
  • ignorePunctuation - Удаляет знаки пунктуации перед сравнением.
  • similarityThreshold - Значение от 0 до 1, определяющее порог для рассмотрения двух электронных писем как похожих.

Вы можете настроить эти параметры непосредственно в объекте CompareOptions, как показано в приведённых выше фрагментах кода. Для полного списка параметров обратитесь к Email API Reference.

Заключительные мысли

Интеграция проверки схожести текста электронных писем в бэкенд Node.js теперь доступна в несколько строк кода благодаря Aspose.Email Cloud SDK for Node.js. Настраивая параметры сравнения, вы можете адаптировать алгоритм под ваш конкретный сценарий, будь то строгое совпадение или более терпимый коэффициент схожести. Помните, что для продакшн‑развертываний требуется действующая лицензия; детали ценообразования можно посмотреть на странице продукта и получить временную лицензию со страницы временной лицензии. С помощью SDK вы легко можете сравнивать текст в электронных письмах в Node.JS и масштабировать решение для обработки больших объёмов.

Общие вопросы

  • Как лучше всего обрабатывать разные кодировки электронной почты при использовании сравнения текста в письмах в Node.JS?
    SDK автоматически определяет UTF‑8, UTF‑16 и другие распространённые кодировки. Если вы столкнётесь с неподдерживаемым форматом, преобразуйте сообщение в UTF‑8 перед передачей его в метод compare. См. официальную документацию для справки по конвертации.

  • Могу ли я сравнивать тела электронных писем без вложений?
    Да. Операция compare работает только с необработанным содержимым письма. Вложения игнорируются, если вы явно не извлечёте их и не сравните отдельно.

  • Как повысить производительность при работе с большими партиями?
    Используйте шаблон пула рабочих, показанный в примере кода, и настройте переменную concurrency. Также рассмотрите возможность загрузки файлов в хранилище Aspose Cloud один раз и повторного использования сохранённых ссылок для нескольких сравнений.

  • Есть ли ограничение на размер писем, которые я могу сравнивать?
    Облачный сервис принимает письма размером до 10 МБ каждое. Более крупные сообщения следует разбить или обрезать перед сравнением.

Продолжайте исследовать