Chuyển đổi nội dung email thô thành các chuỗi có thể so sánh là một nhu cầu phổ biến khi xây dựng bộ lọc spam, hệ thống ticketing hoặc các trình tạo phản hồi tự động. Aspose.Email Cloud SDK for Node.js cung cấp một API mạnh mẽ giúp so sánh văn bản trong email trong Node.JS trở nên đơn giản trong các ứng dụng Node.js. Trong hướng dẫn này, bạn sẽ học cách thiết lập SDK, chạy một mẫu mã hoàn chỉnh đọc các tệp .EML, thực hiện kiểm tra tương đồng hàng loạt, tinh chỉnh ngưỡng, và gọi cùng một thao tác qua các yêu cầu REST cURL.
So sánh văn bản trong email trong Node.JS trong 5 bước
Bài hướng dẫn này cho thấy cách so sánh văn bản trong email trong Node.JS bằng cách sử dụng Aspose.Email Cloud SDK.
- Cài đặt SDK và cấu hình thông tin xác thực: Thêm gói vào dự án của bạn và tạo một đối tượng
Configurationvới client ID và secret của bạn.
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);
- Tải các tệp nguồn và đích EML: Sử dụng
fs.readFileSyncđể đọc các byte thô của mỗi email.
const fs = require('fs');
function readEmailFile(filePath) {
return fs.readFileSync(filePath);
}
- Đặt tùy chọn so sánh: Tạo một thể hiện
CompareOptionsvà cấu hình các cờ nhưignoreCase,ignoreWhitespacevàsimilarityThreshold.
const { CompareOptions } = require('asposeemailcloud');
const compareOpts = new CompareOptions();
compareOpts.ignoreCase = true;
compareOpts.ignoreWhitespace = true;
compareOpts.ignorePunctuation = false;
compareOpts.similarityThreshold = 0.8; // 80%
- Thực hiện thao tác so sánh: Gọi
emailApi.comparevới các tùy chọn đã chuẩn bị. Phản hồi chứasimilarity(0‑1) vàisSimilar(boolean).
compareOpts.leftEmail = leftBytes;
compareOpts.rightEmail = rightBytes;
const result = await emailApi.compare(compareOpts);
console.log(`Similarity: ${result.similarity}, IsSimilar: ${result.isSimilar}`);
- Xử lý kết quả hàng loạt: Duyệt qua một thư mục chứa các email, so sánh từng tệp với email tham chiếu, và ghi lại kết quả.
Để biết thêm chi tiết về API, hãy tham khảo Email API Reference.
Ví dụ Hoàn chỉnh cho So sánh Văn bản Email trong Node.JS
Mã dưới đây minh họa cách so sánh văn bản trong email trong Node.JS bằng một hàm duy nhất có thể xử lý cả so sánh đơn lẻ và so sánh hàng loạt.
// 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);
}
})();
Lưu ý: Ví dụ mã này minh họa chức năng cốt lõi. Trước khi sử dụng trong dự án của bạn, hãy chắc chắn cập nhật mọi đường dẫn tệp và giá trị cấu hình để phù hợp với môi trường thực tế của bạn, xác minh rằng tất cả các phụ thuộc cần thiết đã được cài đặt đúng cách, và kiểm tra kỹ lưỡng trong môi trường phát triển. Nếu bạn gặp bất kỳ vấn đề nào, vui lòng tham khảo tài liệu chính thức hoặc liên hệ với đội hỗ trợ để được trợ giúp.
So sánh văn bản email qua REST API bằng cURL
So sánh tương tự có thể được thực hiện bằng các cuộc gọi REST trực tiếp. Dưới đây là quy trình tối thiểu.
- Lấy token truy cập (thay thế các placeholder bằng thông tin xác thực của bạn).
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"
- Tải lên email bên trái (
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
- Tải lên email đúng (
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
- Thực hiện thao tác so sánh với các tùy chọn mong muốn.
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
}'
Phản hồi trả về similarity và isSimilar. Để biết thêm chi tiết, xem tài liệu API chính thức.
Cài đặt và cấu hình Aspose.Email Cloud SDK for Node.JS
Cài đặt thư viện thông qua npm và xác minh nguồn tải xuống.
npm install @asposecloud/aspose-email-cloud
Bạn cũng có thể sao chép mã nguồn từ kho GitHub: Aspose.Email Cloud SDK for Node.js.
Đảm bảo môi trường chạy của bạn là Node.js 14 hoặc mới hơn và bạn có một tài khoản Aspose Cloud hợp lệ với thông tin xác thực client.
Cấu hình các tùy chọn so sánh cho độ tương đồng văn bản email
SDK cung cấp một số cờ ảnh hưởng đến thuật toán độ tương đồng:
- ignoreCase - Khi
true, việc so sánh sẽ bỏ qua chữ hoa/thường. - ignoreWhitespace - Bỏ qua khoảng trắng, dấu xuống dòng và tab.
- ignorePunctuation - Loại bỏ các ký tự dấu câu trước khi so sánh.
- similarityThreshold - Giá trị từ
0đến1xác định ngưỡng cắt để coi hai email là tương tự.
Bạn có thể điều chỉnh các tùy chọn này trực tiếp trên đối tượng CompareOptions như đã được hiển thị trong các đoạn mã ở trên. Để xem danh sách đầy đủ các tham số, hãy tham khảo Tham chiếu API Email.
Kết luận
Việc tích hợp kiểm tra độ tương đồng văn bản email vào backend Node.js giờ chỉ còn vài dòng mã nhờ vào Aspose.Email Cloud SDK for Node.js. Bằng cách cấu hình các tùy chọn so sánh, bạn có thể tùy chỉnh thuật toán cho trường hợp sử dụng cụ thể của mình, dù bạn cần so khớp chặt chẽ hay điểm tương đồng khoan dung hơn. Hãy nhớ rằng triển khai trong môi trường sản xuất yêu cầu giấy phép hợp lệ; bạn có thể xem chi tiết giá trên trang sản phẩm và nhận giấy phép tạm thời từ trang giấy phép tạm thời. Với SDK, bạn có thể dễ dàng so sánh văn bản trong email trên Node.JS và mở rộng giải pháp để xử lý khối lượng lớn.
Câu hỏi thường gặp
-
Cách tốt nhất để xử lý các mã hóa email khác nhau khi sử dụng so sánh văn bản trong email trên Node.JS là gì?
SDK tự động phát hiện UTF‑8, UTF‑16 và các mã hóa phổ biến khác. Nếu bạn gặp định dạng không được hỗ trợ, hãy chuyển đổi tin nhắn sang UTF‑8 trước khi truyền vào phương thứccompare. Xem tài liệu chính thức để biết các công cụ hỗ trợ chuyển đổi. -
Tôi có thể so sánh nội dung email mà không có tệp đính kèm không?
Có. Thao táccomparechỉ hoạt động trên nội dung email thô. Các tệp đính kèm sẽ bị bỏ qua trừ khi bạn tách ra và so sánh chúng một cách riêng biệt. -
Làm thế nào để tăng hiệu suất cho các batch lớn?
Sử dụng mẫu worker‑pool được hiển thị trong mã mẫu và điều chỉnh biếnconcurrency. Ngoài ra, hãy cân nhắc tải lên các tệp lên lưu trữ Aspose Cloud một lần và tái sử dụng các tham chiếu đã lưu cho nhiều so sánh. -
Có giới hạn kích thước email tôi có thể so sánh không?
Dịch vụ đám mây chấp nhận email lên tới 10 MB mỗi email. Các tin nhắn lớn hơn nên được chia nhỏ hoặc cắt bớt trước khi so sánh.