Перетворення необроблених тіл електронних листів у порівнювані рядки є поширеною потребою при створенні спам‑фільтрів, систем тикетування або генераторів автоматичних відповідей. 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.
- Встановіть SDK та налаштуйте облікові дані: Додайте пакет до вашого проєкту та створіть об’єкт
Configurationз вашим client ID та secret.
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);
- Завантажте вихідний та цільовий файли EML: використайте
fs.readFileSync, щоб прочитати необроблені байти кожного листа.
const fs = require('fs');
function readEmailFile(filePath) {
return fs.readFileSync(filePath);
}
- Встановіть параметри порівняння: Створіть екземпляр
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%
- Виконайте операцію порівняння: Викличте
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}`);
- Обробка пакетних результатів: Ітеруйте папку з електронними листами, порівнюйте кожен файл із еталонним листом і реєструйте результати.
Для отримання докладнішої інформації про API зверніться до Довідка API електронної пошти.
Повний робочий приклад порівняння тексту електронних листів у 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. Нижче наведено мінімальний робочий процес.
- Отримайте токен доступу (замініть заповнювачі вашими обліковими даними).
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"
- Завантажте лівий лист (
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
- Завантажте правильний лист (
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
- Виконайте операцію порівняння з потрібними параметрами.
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 МБ кожен. Великі повідомлення слід розділити або скоротити перед порівнянням.