生のメール本文を比較可能な文字列に変換することは、スパムフィルタ、チケットシステム、または自動返信ジェネレータを構築する際の一般的なニーズです。 Aspose.Email Cloud SDK for Node.js は、Node.js アプリケーションで Node.JS でメールのテキストを比較する を簡単にする強力な API を提供します。このガイドでは、SDK のセットアップ方法、.EML ファイルを読み取る完全なコードサンプルの実行、バッチ類似性チェックの実行、しきい値の微調整、そして REST cURL 呼び出しによる同じ操作の呼び出し方を学びます。

Node.JS でメールのテキストを比較する 5 ステップ

このチュートリアルでは、Aspose.Email Cloud SDK を使用して Node.JS でメールのテキストを比較 する方法を示します。

  1. SDK をインストールし、認証情報を設定する: パッケージをプロジェクトに追加し、クライアント ID とシークレットを使用して 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 リファレンス を参照してください。

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

注: このコード例はコア機能を示しています。プロジェクトで使用する前に、ファイルパスや構成値を実際の環境に合わせて更新し、すべての必須依存関係が正しくインストールされていることを確認し、開発環境で徹底的にテストしてください。問題が発生した場合は、公式ドキュメント または サポートチーム にお問い合わせください。

cURL を使用した REST API でメールテキストを比較する

同じ比較は直接 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 の間の値で、2つのメールを類似とみなすカットオフを定義します。

これらのオプションは、上記のコードスニペットに示すように CompareOptions オブジェクトで直接調整できます。パラメータの完全な一覧については、Email API リファレンス を参照してください。

まとめ

Node.js バックエンドにメールテキスト類似性チェックを統合することは、Aspose.Email Cloud SDK for Node.jsのおかげで、数行のコードで実現できるようになりました。比較オプションを設定することで、厳密な一致が必要か、より寛容な類似度スコアが必要かに応じて、アルゴリズムを特定のユースケースに合わせて調整できます。本番環境へのデプロイには適切なライセンスが必要であることを忘れないでください。製品ページで価格詳細を確認でき、temporary license pageから一時ライセンスを取得できます。SDK を使用すれば、Node.JS でメールのテキストを簡単に比較でき、ソリューションを大規模なボリュームに対応させてスケールさせることができます。

よくある質問

  • Node.JS でメールの比較テキストを使用する際、異なるメールエンコーディングを処理する最適な方法は何ですか?
    SDK は UTF‑8、UTF‑16、その他の一般的なエンコーディングを自動的に検出します。サポートされていない形式に遭遇した場合は、compare メソッドに渡す前にメッセージを UTF‑8 に変換してください。変換ヘルパーについては、公式ドキュメント を参照してください。

  • メール本文を添付ファイルなしで比較できますか?
    はい。compare 操作は生のメールコンテンツのみで機能します。添付ファイルは、明示的に抽出して別途比較しない限り無視されます。

  • 大規模バッチのパフォーマンスを向上させるにはどうすればよいですか?
    サンプルコードに示されているワーカープールパターンを使用し、concurrency 変数を調整してください。また、ファイルを一度 Aspose Cloud ストレージにアップロードし、複数の比較で保存された参照を再利用することも検討してください。

  • 比較できるメールのサイズに制限はありますか?
    クラウドサービスは各メール最大10 MBまで受け付けます。サイズが大きいメッセージは、比較前に分割またはトリミングしてください。

探索を続ける