המרת גופי אימייל גולמיים למחרוזות שניתן להשוות ביניהן היא צורך נפוץ בעת בניית מסנני ספאם, מערכות ניהול כרטיסים, או יוצרי תגובות אוטומטיות. 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 (בוליאני).
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 באמצעות פונקציה יחידה שמטפלת גם בהשוואות בודדות וגם בהשוואות קבוצתיות.

// השוואת טקסט במיילים באמצעות Aspose.Email Cloud SDK for Node.js

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

// -----------------------------------------------------------------------------
// תצורה – החלף במידע האישי של Aspose Cloud שלך
// -----------------------------------------------------------------------------
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 והחזרת הבייטים הגולמיים (Buffer)
// -----------------------------------------------------------------------------
function readEmailFile(filePath) {
    return fs.readFileSync(filePath);
}

// -----------------------------------------------------------------------------
// השוואת שני גופי מייל והחזרת דמיון (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 – מחזירה { similarity: number, isSimilar: boolean }
    const result = await emailApi.compare(compareOpts);
    return result;
}

// -----------------------------------------------------------------------------
// עיבוד קבוצתי – השוואת מייל התייחסות נגד רבים אחרים
// -----------------------------------------------------------------------------
// טיפ ביצועים: הגבל מקביליות כדי למנוע עומס על השירות.
// כאן אנו מעבדים 5 מיילים במקביל.
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 ? 'דומה' : 'שונה'}`);
            } catch (err) {
                console.error(`שגיאה בהשוואת ${targetPath}:`, err.message);
            }
        }
    }

    // השקת עובדים
    const workers = [];
    for (let i = 0; i < concurrency; i++) workers.push(worker());
    await Promise.all(workers);
    return results;
}

// -----------------------------------------------------------------------------
// הרצה ראשית
// -----------------------------------------------------------------------------
(async () => {
    try {
        const referenceEmail = path.resolve(__dirname, 'reference.eml'); // מייל התייחסות
        const emailsDir = path.resolve(__dirname, 'emails'); // תיקייה עם קבצי .eml להשוואה

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

        console.log('מתחילים השוואת קבוצה...');
        const batchResults = await batchCompare(referenceEmail, emailsDir, compareOptions);

        // דוגמה: סיכום תוצאות
        const similarCount = batchResults.filter(r => r.isSimilar).length;
        console.log(`\nהקבוצה הושלמה. ${similarCount} מתוך ${batchResults.length} מיילים דומים להתייחסות.`);
    } catch (err) {
        console.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.
ודא שהסביבת הריצה שלך היא Node.js 14 או גרסה חדשה יותר ושיש לך חשבון Aspose Cloud תקף עם אישורי לקוח.

הגדרת אפשרויות השוואה לדמיון טקסט של אימייל

ה‑SDK חושף מספר דגלים המשפיעים על אלגוריתם הדמיון.

  • ignoreCase - כאשר true, ההשוואה מתעלמת מרישיות האותיות.
  • ignoreWhitespace - מדלג על רווחים, מעברי שורה וטאבים.
  • ignorePunctuation - מסיר תווי פיסוק לפני ההשוואה.
  • similarityThreshold - ערך בין 0 ל-1 שמגדיר את הסף לשקול שני אימיילים דומים.

אתה יכול להתאים את האפשרויות האלה ישירות על האובייקט CompareOptions כפי שמוצג בקטעי הקוד למעלה. לקבלת רשימה מלאה של הפרמטרים, עיין ב-הפניה ל‑API של דוא"ל.

מחשבות סופיות

שילוב בדיקות דמיון טקסט של אימיילים במערכת backend של 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 מ"ב כל אחד. הודעות גדולות יותר יש לפצל או לקצץ לפני ההשוואה.

המשך לחקור