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.
- Hubungkan ke server IMAP menggunakan port 993 dengan nama pengguna dan kata sandi.
- Pilih folder "Inbox" untuk bekerja dengan email masuk.
- Buat sebuah instance dari ImapQueryBuilder untuk membangun kueri pencarian.
- Tentukan kriteria pencarian, misalnya subjek email harus mengandung "Newsletter" dan tanggal internal harus sesuai dengan tanggal hari ini.
- Hasilkan kueri pencarian dengan mengambilnya dari builder.
- Gunakan kueri untuk daftar pesan yang memenuhi kriteria.
- 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.