Cari dan Filter Email IMAP dalam Python

Untuk mengambil semua pesan dari kotak surat Aspose.Email menyediakan metode ’list_messages’ dari ImapClient kelas. Untuk mengambil hanya pesan yang memenuhi kondisi tertentu, Anda dapat menggunakan metode ’list_messages’ yang di‑overload dan menerima sebuah MailQuery sebagai argumen. The MailQuery kelas menawarkan berbagai properti untuk mendefinisikan kondisi ini, seperti tanggal, subjek, pengirim, dan penerima.

Contoh kode pertama menunjukkan cara memfilter pesan berdasarkan tanggal dan subjek. Contoh tambahan menampilkan pemfilteran berdasarkan kriteria lain dan membangun kueri yang lebih kompleks. Selain itu, API mendukung kriteria pencarian yang case-sensitive untuk penyaringan yang tepat dan memungkinkan Anda menentukan encoding dari string pencarian saat memfilter pesan dari kotak surat.

Filter dan Ambil Pesan dari Server IMAP

Bangun Kuery IMAP Sederhana

Gunakan potongan kode berikut untuk terhubung ke kotak surat IMAP dan mendapatkan pesan yang tiba hari ini serta memiliki kata "newsletter" di subjek.

  1. Hubungkan ke server IMAP menggunakan port 993 dengan nama pengguna dan kata sandi.
  2. Pilih folder "Inbox" untuk bekerja dengan email masuk.
  3. Buat sebuah instance dari ImapQueryBuilder untuk membangun kueri pencarian.
  4. Tentukan kriteria pencarian, misalnya subjek email harus mengandung "Newsletter" dan tanggal internal harus sesuai dengan tanggal hari ini.
  5. Hasilkan kueri pencarian dengan mengambilnya dari builder.
  6. Gunakan kueri untuk daftar pesan yang memenuhi kriteria.
  7. Cetak total jumlah pesan yang cocok dengan kriteria pencarian.

Buat Kriteria Pencarian Kompleks

Aspose.Email juga memungkinkan pembuatan kriteria pencarian kompleks untuk query dan penyaringan pesan email seperti tanggal pengiriman, dalam rentang, pengirim tertentu, domain tertentu, atau penerima tertentu. Untuk tujuan ini, gunakan MailQueryBuilder kelas dan properti-propertinya. Contoh kode di bawah akan menunjukkan cara mengambil pesan berdasarkan kriteria tertentu.

Filter Email berdasarkan Tanggal Hari Ini

Untuk mengambil pesan berdasarkan tanggal pengiriman, gunakan properti ‘internal_date’ dari MailQueryBuilder kelas seperti yang ditunjukkan dalam contoh kode di bawah ini:

import aspose.email as ae
from datetime import datetime

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

Filter Email Berdasarkan Rentang Tanggal

Untuk mengambil pesan dalam rentang tanggal, gunakan properti ‘internal_date’ yang sama dengan menentukan rentang tanggal seperti yang ditunjukkan dalam contoh kode di bawah:

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))

Filter Email berdasarkan Pengirim Spesifik

Untuk mengambil pesan dari pengirim tertentu, gunakan properti ‘from_address’ dari MailQueryBuilder kelas seperti yang ditunjukkan dalam contoh kode di bawah ini:

import aspose.email as ae

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

Filter Email Berdasarkan Domain Tertentu

Untuk mengambil pesan dari domain tertentu, gunakan properti ‘from_address’ seperti yang ditunjukkan dalam contoh kode di bawah:

import aspose.email as ae

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

Filter Email Berdasarkan Penerima Tertentu

Untuk mengambil pesan ke penerima tertentu, gunakan properti ’to’ seperti yang ditunjukkan dalam contoh kode di bawah:

import aspose.email as ae

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

Filter Pesan Berdasarkan Tanggal Internal

Buat kueri berdasarkan kondisi tertentu seperti "internal date" dan "subject contains". "Internal date" mengacu pada tanggal dan waktu saat pesan email diterima atau ditambahkan ke server email dan dapat diatur menggunakan properti ‘internal_date’ dari ImapQueryBuilder kelas. Contoh kode di bawah ini menunjukkan cara mengambil email tertentu dari kotak masuk berdasarkan kriteria subjek dan tanggal:

import aspose.email as ae
from datetime import datetime

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.select_folder("Inbox")

# Set conditions, Subject contains "Newsletter", Emails that arrived today
builder = ae.clients.imap.ImapQueryBuilder()
builder.subject.contains("Newsletter")
builder.internal_date.on(datetime.now())

# Build the query and Get list of messages
query = builder.get_query()
messages = client.list_messages(query)
for info in messages:
    print(f"Internal Date: {info.internal_date}")

Filter Pesan Berdasarkan Flag Kata Kunci Khusus

Buat kueri untuk mencari kotak surat IMAP yang berisi email dengan flag kata kunci khusus, khususnya "custom1" dan "custom2". Untuk membangun kueri, gunakan ImapQueryBuilder kelas yang memfilter email saat mengambilnya dari server IMAP.

Untuk memulai, buat instance dari pembangun kueri. Menggunakan has_flags metode, tambahkan kondisi untuk menyertakan hanya email yang membawa flag kata kunci IMAP yang ditentukan. Kata kunci khusus di IMAP, yang juga disebut flag buatan pengguna, memungkinkan pengguna menandai atau mengkategorikan email untuk berbagai tujuan, seperti menandai statusnya.

Potongan kode berikut menggambarkan cara membuat kueri untuk mengambil email berdasarkan flag kata kunci khusus:


builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))

Membangun Kuiri Kompleks

Terkadang diperlukan untuk memenuhi lebih dari satu kueri. Aspose.Email memungkinkan hal ini dengan menggabungkan kueri dalam beberapa pernyataan. Buat sebuah MailQueryBuilder objek dan gunakan propertinya untuk membangun kueri spesifik.

Menggabungkan Kuiri dengan AND

Potongan kode berikut menunjukkan cara menggabungkan kueri dengan 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")

Menggabungkan Kuiri dengan OR

Potongan kode berikut menunjukkan cara menggabungkan kueri dengan OR.


builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))

Menerapkan Filter Sensitif Huruf Besar/Kecil

API juga menyediakan kemampuan untuk memfilter email dari kotak surat berdasarkan kriteria sensitif huruf. Metode berikut dari StringComparisonField kelas menyediakan kemampuan untuk mencari email dengan menentukan flag sensitif huruf.

  • StringComparisonField.contains(value, ignore_case)
  • StringComparisonField.equals(value, ignore_case)
  • StringComparisonField.not_contains(value, ignore_case)
  • StringComparisonField.not_equals(value, ignore_case)

Potongan kode berikut menunjukkan cara mengimplementasikan kemampuan ini ke dalam proyek Anda:


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

Lakukan Kuery Pencarian Khusus

Buat kueri pencarian untuk kotak surat IMAP yang memfilter email berdasarkan kriteria pencarian Gmail khusus — khususnya, email yang memiliki lampiran.

Mulailah dengan membuat instance dari ImapQueryBuilder, yang membantu membangun kueri pencarian IMAP yang kompleks. Gunakan custom_search metode untuk menambahkan string pencarian khusus Gmail ke pembangun kueri.

String pencarian X-GM-RAW "has:attachment" memanfaatkan atribut IMAP ekstended Gmail X-GM-RAW, memungkinkan penggunaan sintaks pencarian webmail Gmail yang kuat dalam kueri IMAP. Di sini, operator has:attachment mengembalikan semua email yang berisi lampiran.

Potongan kode berikut menunjukkan cara memfilter email untuk mendapatkan semua pesan dengan lampiran:


builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")

mailQuery = builder.get_query()

Metode ini memungkinkan pemfilteran khusus Gmail yang canggih untuk mengambil email yang ditargetkan.