Ham e-posta gövdelerini karşılaştırılabilir dizelere dönüştürmek, spam filtreleri, biletleme sistemleri veya otomatik yanıt üreteçleri oluştururken yaygın bir ihtiyaçtır. Aspose.Email Cloud SDK for Node.js güçlü bir API sağlayarak Node.JS’te e-postalardaki metni karşılaştırmayı Node.js uygulamalarında kolaylaştırır. Bu rehberde SDK’yı nasıl kuracağınızı, .EML dosyalarını okuyan tam bir kod örneğini çalıştırmayı, toplu benzerlik kontrolleri yapmayı, eşik değerlerini ince ayar yapmayı ve aynı işlemi REST cURL çağrılarıyla nasıl tetikleyebileceğinizi öğreneceksiniz.

Node.JS’te E-postalardaki Metni 5 Adımda Karşılaştırma

Bu öğreticide, Aspose.Email Cloud SDK kullanarak Node.JS’te e-postalardaki metni karşılaştırmayı gösterir.

  1. SDK’yı kurun ve kimlik bilgilerini yapılandırın: Paketi projenize ekleyin ve istemci kimliğiniz ve gizli anahtarınız ile bir Configuration nesnesi oluşturun.
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. Kaynak ve hedef EML dosyalarını yükleyin: Her e-postanın ham baytlarını okumak için fs.readFileSync kullanın.
const fs = require('fs');
function readEmailFile(filePath) {
    return fs.readFileSync(filePath);
}
  1. Karşılaştırma seçeneklerini ayarlayın: Bir CompareOptions örneği oluşturun ve ignoreCase, ignoreWhitespace ve similarityThreshold gibi bayrakları yapılandırın.
const { CompareOptions } = require('asposeemailcloud');
const compareOpts = new CompareOptions();
compareOpts.ignoreCase = true;
compareOpts.ignoreWhitespace = true;
compareOpts.ignorePunctuation = false;
compareOpts.similarityThreshold = 0.8; // 80%
  1. Karşılaştırma işlemini yürütün: Hazırlanan seçeneklerle emailApi.compare çağırın. Yanıt, similarity (0‑1) ve isSimilar (boolean) içerir.
compareOpts.leftEmail = leftBytes;
compareOpts.rightEmail = rightBytes;
const result = await emailApi.compare(compareOpts);
console.log(`Similarity: ${result.similarity}, IsSimilar: ${result.isSimilar}`);
  1. Toplu sonuçları işleyin: E-posta klasörünün üzerinden döngü yapın, her dosyayı bir referans e-postasıyla karşılaştırın ve sonuçları kaydedin.
    API hakkında daha fazla ayrıntı için, Email API Referansı adresine bakın.

Node.JS’te E-posta Metni Karşılaştırması için Tam Çalışan Örnek

Aşağıdaki kod, Node.JS’te e-postalardaki metni karşılaştırma tek bir fonksiyonla, tek ve toplu karşılaştırmaları aynı anda yöneten bir şekilde gösterir.

// 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);
    }
})();

Not: Bu kod örneği temel işlevselliği göstermektedir. Projenizde kullanmadan önce, tüm dosya yollarını ve yapılandırma değerlerini gerçek ortamınıza uygun şekilde güncellediğinizden, gerekli tüm bağımlılıkların doğru şekilde yüklendiğinden emin olun ve geliştirme ortamınızda kapsamlı bir şekilde test edin. Herhangi bir sorunla karşılaşırsanız, lütfen resmi dokümantasyona bakın veya destek ekibi ile iletişime geçin.

cURL Kullanarak REST API ile E-posta Metnini Karşılaştırma

Aynı karşılaştırma doğrudan REST çağrılarıyla gerçekleştirilebilir. Aşağıda minimal bir iş akışı bulunmaktadır.

  1. Erişim belirteci alın (yer tutucuları kimlik bilgilerinizle değiştirin).
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. Sol e-postayı yükleyin (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. Doğru e-postayı yükleyin (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. Karşılaştırma işlemini yürütün istenen seçeneklerle.
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
         }'

Yanıt similarity ve isSimilar değerlerini döndürür. Daha fazla ayrıntı için, resmi API belgelerine bakın.

Installing and Configuring Aspose.Email Cloud SDK for Node.JS

Kütüphaneyi npm üzerinden kurun ve indirme kaynağını doğrulayın.

npm install @asposecloud/aspose-email-cloud

Kaynağı GitHub deposundan da klonlayabilirsiniz: Aspose.Email Cloud SDK for Node.js.
Çalışma zamanınızın Node.js 14 veya daha yeni bir sürüm olduğundan ve geçerli bir Aspose Cloud hesabınızın istemci kimlik bilgileriyle bulunduğundan emin olun.

E-posta Metni Benzerliği için Karşılaştırma Seçeneklerini Yapılandırma

SDK, benzerlik algoritmasını etkileyen çeşitli bayrakları ortaya çıkarır:

  • ignoreCase - true olduğunda, karşılaştırma harf duyarlılığını göz ardı eder.
  • ignoreWhitespace - Boşlukları, satır sonlarını ve sekmeleri atlar.
  • ignorePunctuation - Karşılaştırmadan önce noktalama işaretlerini kaldırır.
  • similarityThreshold - 0 ile 1 arasında bir değer olup, iki e-postanın benzer kabul edilmesi için eşik değerini tanımlar.

Bu seçenekleri, yukarıdaki kod parçacıklarında gösterildiği gibi CompareOptions nesnesi üzerinde doğrudan ayarlayabilirsiniz. Tüm parametrelerin tam listesi için Email API Reference adresine bakın.

Son Düşünceler

E-posta metni benzerliği kontrollerini bir Node.js arka ucuna entegre etmek, artık Aspose.Email Cloud SDK for Node.js sayesinde birkaç satır kodla mümkün. Karşılaştırma seçeneklerini yapılandırarak algoritmayı belirli kullanım durumunuza göre özelleştirebilirsiniz; katı eşleşme mi yoksa daha toleranslı bir benzerlik skoru mu istediğinize karar verin. Üretim dağıtımları için geçerli bir lisans gerektiğini unutmayın; ürün sayfasında fiyatlandırma detaylarını görebilir ve temporary license page üzerinden geçici bir lisans alabilirsiniz. SDK ile e-postalardaki metni Node.JS’te karşılaştır ve çözümü büyük hacimlerle başa çıkacak şekilde ölçeklendirebilirsiniz.

Common Questions

  • Node.JS’te e-postalarda karşılaştırma metni kullanırken farklı e-posta kodlamalarını yönetmenin en iyi yolu nedir?
    SDK, UTF‑8, UTF‑16 ve diğer yaygın kodlamaları otomatik olarak algılar. Desteklenmeyen bir formatla karşılaşırsanız, mesajı compare yöntemine geçirmeden önce UTF‑8’e dönüştürün. Dönüştürme yardımcıları için resmi belgeler bölümüne bakın.

  • E-posta gövdelerini ekler olmadan karşılaştırabilir miyim?
    Evet. compare işlemi yalnızca ham e-posta içeriği üzerinde çalışır. Ekler, açıkça ayıklayıp ayrı ayrı karşılaştırmadığınız sürece göz ardı edilir.

  • Büyük toplu işlemler için performansı nasıl artırabilirim?
    Örnek kodda gösterilen worker‑pool desenini kullanın ve concurrency değişkenini ayarlayın. Ayrıca dosyaları bir kez Aspose Cloud storage’a yükleyip, birden fazla karşılaştırma için saklanan referansları yeniden kullanmayı düşünün.

  • E-posta karşılaştırması yapabileceğim boyut sınırlaması var mı?
    Bulut hizmeti her bir e-postayı 10 MB’a kadar kabul eder. Daha büyük mesajlar karşılaştırmadan önce bölünmeli veya kırpılmalıdır.

Keşfetmeye Devam Et