تحويل محتويات رسائل البريد الإلكتروني الخام إلى سلاسل قابلة للمقارنة هو حاجة شائعة عند بناء مرشحات البريد المزعج، أنظمة التذاكر، أو مولدات الرد الآلي. Aspose.Email Cloud SDK for Node.js يوفر واجهة برمجة تطبيقات قوية تجعل مقارنة النص في رسائل البريد الإلكتروني في 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 (منطقية).
compareOpts.leftEmail = leftBytes;
compareOpts.rightEmail = rightBytes;
const result = await emailApi.compare(compareOpts);
console.log(`Similarity: ${result.similarity}, IsSimilar: ${result.isSimilar}`);
  1. معالجة نتائج الدفعة: تكرار عبر مجلد من رسائل البريد الإلكتروني، مقارنة كل ملف برسالة بريد إلكتروني مرجعية، وتسجيل النتائج.
    لمزيد من التفاصيل حول 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 باستخدام 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. تحميل البريد الإلكتروني الأيسر (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. تحميل البريد الإلكتروني الصحيح (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 كما هو موضح في مقتطفات الشيفرة أعلاه. للحصول على قائمة كاملة بالمعلمات، راجع مرجع واجهة برمجة تطبيقات البريد الإلكتروني.

الخلاصة النهائية

إن دمج فحوصات تشابه نص البريد الإلكتروني في خلفية Node.js أصبح الآن على بُعد بضع أسطر من الشيفرة بفضل Aspose.Email Cloud SDK for Node.js. من خلال تكوين خيارات المقارنة يمكنك تخصيص الخوارزمية لتناسب حالتك الخاصة سواء كنت تحتاج إلى مطابقة صارمة أو إلى درجة تشابه أكثر تسامحًا. تذكر أن عمليات النشر في بيئة الإنتاج تتطلب ترخيصًا صحيحًا؛ يمكنك الاطلاع على تفاصيل الأسعار في صفحة المنتج والحصول على ترخيص مؤقت من صفحة الترخيص المؤقت. باستخدام SDK يمكنك بسهولة مقارنة النص في رسائل البريد الإلكتروني في Node.JS وتوسيع الحل للتعامل مع أحجام كبيرة.

أسئلة شائعة

  • ما هي أفضل طريقة للتعامل مع ترميزات البريد الإلكتروني المختلفة عند استخدام مقارنة النص في رسائل البريد الإلكتروني في Node.JS؟
    يكتشف SDK تلقائيًا UTF‑8 و UTF‑16 وغيرها من الترميزات الشائعة. إذا صادفت تنسيقًا غير مدعوم، قم بتحويل الرسالة إلى UTF‑8 قبل تمريرها إلى طريقة compare. راجع الوثائق الرسمية للحصول على أدوات التحويل.

  • هل يمكنني مقارنة محتوى البريد الإلكتروني دون المرفقات؟
    نعم. عملية compare تعمل فقط على محتوى البريد الإلكتروني الخام. يتم تجاهل المرفقات ما لم تقم باستخراجها ومقارنتها بشكل منفصل.

  • كيف يمكنني زيادة الأداء للدفعات الكبيرة؟
    استخدم نمط مجموعة العاملين (worker‑pool) الموضح في الكود النموذجي واضبط متغير concurrency. كما يمكنك التفكير في تحميل الملفات إلى تخزين Aspose Cloud مرة واحدة وإعادة استخدام المراجع المخزنة لمقارنات متعددة.

  • هل هناك حد لحجم الرسائل الإلكترونية التي يمكنني مقارنتها؟
    تقبل خدمة السحابة رسائل بريد إلكتروني تصل إلى 10 ميغابايت لكل منها. يجب تقسيم الرسائل الأكبر أو تقصيرها قبل المقارنة.

استمر في الاستكشاف