تبدیل بدنه‌های خام ایمیل به رشته‌های قابل مقایسه یک نیاز رایج هنگام ساخت فیلترهای اسپم، سیستم‌های تیکت‌گذاری یا تولیدکنندگان پاسخ خودکار است. Aspose.Email Cloud SDK for Node.js یک API قدرتمند ارائه می‌دهد که compare text in emails in 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، به مرجع 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 انجام شود. در زیر یک جریان کاری حداقل آورده شده است.

  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.
اطمینان حاصل کنید که زمان اجرا (runtime) شما Node.js 14 یا بالاتر باشد و یک حساب Aspose Cloud معتبر با اعتبارهای مشتری داشته باشید.

پیکربندی گزینه‌های مقایسه برای شباهت متن ایمیل

SDK چندین پرچم را که بر الگوریتم شباهت تأثیر می‌گذارند، افشا می‌کند:

  • ignoreCase - وقتی true باشد، مقایسه حروف را بدون در نظر گرفتن حروف بزرگ/کوچک انجام می‌دهد.
  • ignoreWhitespace - فضاها، شکست خطوط و تب‌ها را نادیده می‌گیرد.
  • ignorePunctuation - قبل از مقایسه، کاراکترهای نقطه‌گذاری را حذف می‌کند.
  • similarityThreshold - مقداری بین 0 و 1 که حد قطع را برای در نظر گرفتن دو ایمیل مشابه تعریف می‌کند.

می‌توانید این گزینه‌ها را به‌صورت مستقیم روی شیء CompareOptions تنظیم کنید همان‌طور که در قطعه‌های کد بالا نشان داده شده است. برای دریافت فهرست کامل پارامترها، به مرجع API ایمیل مراجعه کنید.

جمع‌بندی

ادغام بررسی شباهت متن ایمیل در یک بک‌اند Node.js اکنون تنها با چند خط کد امکان‌پذیر است، به لطف Aspose.Email Cloud SDK for Node.js. با پیکربندی گزینه‌های مقایسه می‌توانید الگوریتم را متناسب با مورد استفاده خاص خود تنظیم کنید، چه به دنبال تطبیق دقیق باشید و چه به نمره شباهت تحمل‌پذیرتر. به یاد داشته باشید که استقرارهای تولیدی به یک لایسنس معتبر نیاز دارند؛ می‌توانید جزئیات قیمت‌گذاری را در صفحه محصول مشاهده کنید و یک لایسنس موقت را از صفحهٔ مجوز موقت دریافت کنید. با این SDK می‌توانید به راحتی متن ایمیل‌ها را در Node.JS مقایسه کنید و راه‌حل را برای پردازش حجم‌های بزرگ مقیاس‌بندی کنید.

سؤالات متداول

  • بهترین روش برای مدیریت رمزگذاری‌های مختلف ایمیل هنگام استفاده از compare text در ایمیل‌ها در Node.JS چیست؟
    SDK به‌صورت خودکار UTF‑8، UTF‑16 و سایر رمزگذاری‌های رایج را شناسایی می‌کند. اگر با فرمت پشتیبانی‌نشده‌ای مواجه شدید، پیام را به UTF‑8 تبدیل کنید قبل از اینکه به متد compare پاس بدهید. برای راهنمایی‌های تبدیل، به مستندات رسمی مراجعه کنید.

  • آیا می‌توانم بدنه‌های ایمیل را بدون پیوست‌ها مقایسه کنم؟
    بله. عملیات compare فقط بر روی محتوای خام ایمیل کار می‌کند. پیوست‌ها نادیده گرفته می‌شوند مگر اینکه به‌طور صریح آن‌ها را استخراج و به‌صورت جداگانه مقایسه کنید.

  • چگونه عملکرد برای دسته‌های بزرگ را افزایش دهم؟
    از الگوی worker‑pool که در کد نمونه نشان داده شده استفاده کنید و متغیر concurrency را تنظیم کنید. همچنین در نظر بگیرید که فایل‌ها را یک‌بار به ذخیره‌سازی Aspose Cloud بارگذاری کنید و برای مقایسات متعدد از مراجع ذخیره‌شده استفاده کنید.

  • آیا محدودیتی برای اندازه ایمیل‌هایی که می‌توانم مقایسه کنم وجود دارد؟
    سرویس ابری ایمیل‌ها را تا حداکثر ۱۰ مگابایت هر کدام می‌پذیرد. پیام‌های بزرگ‌تر باید پیش از مقایسه تقسیم یا کوتاه شوند.

ادامهٔ کاوش