Làm việc với Tin nhắn từ Máy chủ

Lấy thông tin Hộp thư

Chúng ta có thể lấy thông tin về hộp thư như số lượng tin nhắn và kích thước hộp thư bằng cách sử dụng các phương thức GetMailBoxSize() và GetMailBoxInfo().

  • Phương thức GetMailBoxSize() trả về kích thước của hộp thư tính bằng byte.
  • Phương thức GetMailBoxInfo() trả về một đối tượng kiểu Pop3MailBoxInfo.

Cũng có thể lấy số lượng tin nhắn bằng thuộc tính MessageCount và kích thước bằng thuộc tính OccupiedSize. Đoạn mã mẫu dưới đây cho thấy cách lấy thông tin về hộp thư. Nó chỉ ra cách:

  1. Tạo một Pop3Client.
  2. Kết nối đến máy chủ POP3.
  3. Lấy kích thước của hộp thư.
  4. Lấy thông tin hộp thư.
  5. Lấy số lượng tin nhắn trong hộp thư.
  6. Lấy kích thước đã chiếm.

Lấy số lượng email trong hộp thư

Đoạn mã sau cho bạn thấy cách đếm số tin nhắn email trong hộp thư.

Aspose.Email cho phép các nhà phát triển làm việc với email theo nhiều cách khác nhau. Ví dụ, họ có thể lấy thông tin tiêu đề trước khi quyết định tải xuống một email. Hoặc họ có thể lấy email từ máy chủ và lưu chúng mà không cần phân tích (nhanh hơn) hoặc sau khi phân tích (chậm hơn). Bài viết này cho thấy cách lấy và chuyển đổi email.

Truy xuất thông tin tiêu đề Email

Phần đầu (header) của email có thể cung cấp thông tin về một tin nhắn email mà chúng ta dùng để quyết định có nên tải toàn bộ tin nhắn hay không. Thông thường, thông tin header bao gồm người gửi, tiêu đề, ngày nhận, v.v. (Các header email được mô tả chi tiết trong mục Tùy chỉnh Header Email. Chủ đề này đặc biệt nói về việc gửi email bằng SMTP, nhưng thông tin nội dung header vẫn áp dụng cho email POP3). Các ví dụ sau cho thấy cách lấy header email từ máy chủ POP3 bằng số thứ tự của tin nhắn.

Truy xuất tin nhắn Email

Thành phần lớp Aspose.Email.Pop3 cung cấp khả năng truy xuất các tin nhắn email từ máy chủ POP3 và phân tích chúng thành một đối tượng MailMessage bằng sự hỗ trợ của các thành phần MailMessage. Lớp MailMessage chứa nhiều thuộc tính và phương thức để thao tác nội dung email. Bằng cách sử dụng hàm FetchMessage của lớp Pop3Client, bạn có thể lấy một đối tượng MailMessage trực tiếp từ máy chủ POP3. Đoạn mã mẫu sau cho thấy cách lấy một email hoàn chỉnh từ máy chủ POP3.

Lấy Thông tin Tóm tắt Tin nhắn bằng Id duy nhất

POP3 Client của API có thể lấy thông tin tóm tắt tin nhắn từ máy chủ bằng cách sử dụng ID duy nhất của tin nhắn. Điều này cung cấp truy cập nhanh vào thông tin ngắn gọn của tin nhắn mà không cần tải toàn bộ tin nhắn trước. Đoạn mã mẫu sau cho thấy cách lấy thông tin tóm tắt tin nhắn.

Liệt kê Tin nhắn với MultiConnection

Đối với các thao tác nặng, Aspose.Email cung cấp thuộc tính ‘use_multi_connection’ của Pop3Client lớp để sử dụng nhiều kết nối khi truy xuất email. Tuy nhiên, việc sử dụng chế độ này không nhất thiết sẽ tăng hiệu năng. Đoạn mã mẫu dưới đây cho thấy cách thiết lập kết nối tới máy chủ POP3, cấu hình client cho phép tối đa 5 kết nối đồng thời và bật chế độ đa kết nối để lấy thông tin về các tin nhắn có trên máy chủ:

import aspose.email as ae

client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)

client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
message_info_coll = client.list_messages()

Lấy tin nhắn từ máy chủ và lưu vào đĩa

Lưu tin nhắn vào đĩa mà không phân tích

Nếu bạn muốn tải xuống các tin nhắn email từ máy chủ POP3 mà không phân tích chúng, hãy sử dụng hàm SaveMessage của lớp Pop3Client. Hàm SaveMessage không phân tích nội dung email nên nhanh hơn hàm FetchMessage. Đoạn mã mẫu sau cho thấy cách lưu một tin nhắn theo số thứ tự của nó, trong trường hợp này là số 1. Phương thức SaveMessage lưu tin nhắn ở định dạng EML gốc mà không phân tích.

Phân tích tin nhắn trước khi lưu

Sử dụng phương thức ‘fetch_message’ của đối tượng client được tạo bằng Pop3Client lớp để truy xuất tin nhắn với số thứ tự cụ thể. Đoạn mã mẫu dưới đây minh họa cách lấy một tin nhắn cụ thể và lưu nó bằng tiêu đề của tin nhắn làm tên tệp bằng cách gọi phương thức ‘save’ trên đối tượng msg:

import aspose.email as ae

client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)

# Fetch the message by its sequence number and Save the message using its subject as the file name
msg = client.fetch_message(1)
msg.save("first-message_out.eml", ae.SaveOptions.default_eml)

Lọc tin nhắn theo Người gửi, Người nhận hoặc Ngày

Lớp Pop3Client, được mô tả trong phần Kết nối tới máy chủ POP3, cung cấp phương thức list_messages() để lấy tất cả tin nhắn từ hộp thư. Để chỉ lấy những tin nhắn thỏa mãn một số điều kiện, sử dụng phương thức ListMessages() được overload, nhận một đối số là MailQuery. Lớp MailQuery cung cấp nhiều thuộc tính để chỉ định các điều kiện truy vấn, ví dụ: ngày, tiêu đề, người gửi, người nhận, v.v. Lớp MailQueryBuilder được dùng để xây dựng biểu thức tìm kiếm. Đầu tiên, đặt tất cả các điều kiện và ràng buộc, sau đó MailQuery được điền với truy vấn do MailQueryBuilder tạo ra. Đối tượng lớp MailQuery được Pop3Client dùng để trích xuất thông tin đã lọc từ máy chủ. Bài viết này chỉ ra cách lọc email từ hộp thư. Ví dụ đầu tiên minh họa cách lọc tin nhắn dựa trên ngày và tiêu đề. Chúng tôi cũng trình bày cách lọc theo các tiêu chí khác và cách xây dựng truy vấn phức tạp hơn. Ngoài ra, nó còn cho thấy cách áp dụng bộ lọc Ngày và Giờ để lấy các email cụ thể từ hộp thư. Thêm nữa, cách áp dụng lọc phân biệt chữ hoa chữ thường cũng được trình bày.

Lọc tin nhắn từ Hộp thư

Để lọc tin nhắn từ hộp thư:

  1. Kết nối và đăng nhập vào máy chủ POP3.
  2. Tạo một thể hiện của MailQuery và thiết lập các thuộc tính mong muốn.
  3. Gọi phương thức Pop3Client.list_messages(MailQuery query) và truyền MailQuery vào tham số để chỉ lấy các tin nhắn đã lọc.

Đoạn mã mẫu sau cho bạn cách kết nối tới hộp thư POP3 và lấy các tin nhắn đến trong ngày và có từ "newsletter" trong tiêu đề.

Lấy các tin nhắn đáp ứng tiêu chí cụ thể

Aspose.Email cũng cho phép xây dựng tiêu chí tìm kiếm phức tạp để truy vấn và lọc email. Để mục đích này, sử dụng MailQueryBuilder lớp và các thuộc tính của nó. Các tiêu chí để lấy dữ liệu như sau:

  • Lấy tin nhắn theo ngày giao nhận.
  • Lấy tin nhắn trong một khoảng.
  • Lấy tin nhắn từ một người gửi cụ thể.
  • Lấy tin nhắn từ một miền cụ thể.
  • Lấy tin nhắn tới một người nhận cụ thể.

Ngày hôm nay

Để lấy tin nhắn theo ngày giao nhận, sử dụng thuộc tính ‘internal_date’ như trong đoạn mã mẫu dưới đây:

import aspose.email as ae
from datetime import datetime

builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())

Khoảng ngày

Để lấy tin nhắn trong một khoảng thời gian, sử dụng cùng thuộc tính ‘internal_date’ chỉ định khoảng ngày như trong đoạn mã mẫu dưới đây:

import aspose.email as ae
from datetime import datetime, timedelta

builder = ae.tools.search.MailQueryBuilder()
# Emails that arrived in last 7 days
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))

Người gửi cụ thể

Để lấy tin nhắn từ người gửi cụ thể, sử dụng thuộc tính ‘from_address’ như trong đoạn mã mẫu dưới đây:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")

Miền cụ thể

Để lấy tin nhắn từ một miền cụ thể, sử dụng thuộc tính ‘from_address’ như trong đoạn mã mẫu dưới đây:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")

Người nhận cụ thể

Để lấy tin nhắn gửi tới một người nhận cụ thể, sử dụng thuộc tính ’to’ như trong đoạn mã mẫu dưới đây:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")

Xây Dựng Truy Vấn Phức Tạp

Đôi khi cần thỏa mãn hơn một truy vấn. Aspose.Email cho phép điều này bằng cách kết hợp các truy vấn trong nhiều câu lệnh. Tạo một MailQueryBuilder đối tượng và sử dụng các thuộc tính của nó để xây dựng các truy vấn cụ thể.

Kết Hợp Truy Vấn với AND

Đoạn mã sau cho bạn thấy cách kết hợp các truy vấn bằng AND.

import aspose.email as ae
from datetime import datetime, timedelta

builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
builder.from_address.contains("SpecificHost.com")

Kết Hợp Truy Vấn với OR

Đoạn mã mẫu sau cho bạn cách kết hợp các truy vấn với OR.

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))

Áp dụng bộ lọc phân biệt chữ hoa chữ thường

API cũng cung cấp khả năng lọc email từ hộp thư dựa trên tiêu chí phân biệt chữ hoa chữ thường. Các phương thức sau của StringComparisonField lớp cung cấp khả năng tìm kiếm email với cờ phân biệt chữ hoa chữ thường.

Phương thức Aspose.Email.StringComparisonField.contains(value, ignore_case) Phương thức Aspose.Email.StringComparisonField.equals(value, ignore_case) Phương thức Aspose.Email.StringComparisonField.not_contains(value, ignore_case) Phương thức Aspose.Email.StringComparisonField.not_equals(value, ignore_case)

Đoạn mã mẫu sau cho thấy cách triển khai khả năng này vào dự án của bạn:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)