IMAP API'si Pythonimaplib, IMAPClient & OAuth XOAUTH2 Rehberi
2026'da Python IMAP e-posta istemcileri oluşturmak için eksiksiz bir kılavuz: stdlib imaplib temellerinden IMAPClient üretim desenlerine, Gmail ve Outlook için OAuth XOAUTH2 kimlik doğrulamasına ve birleşik bir e-posta API'sinin sizi karmaşıklıktan ne zaman tamamen kurtarabileceğine kadar.
İthalat imaplib, eposta
itibaren e-posta.başlık İthalat başlığı_çöz
# OAuth ile bağlan XOAUTH2
posta = imaplib.IMAP4_SSL('imap.gmail.com')
auth_str = build_xoauth2(kullanıcı, jeton)
posta.kimlik doğrula('XOAUTH2', lambda x: kimlik_doğrulama_dizesi)
# Okunmamış mesajları getir
posta.seç('GELEN KUTUSU')
_, kimlikler = posta.arama(Hiçbiri, 'GÖRÜLMEMİŞ')
için kimlik numarası içinde kimlikler[0].bölmek():
_, veri = posta.fetch(kullanıcı kimliği, '(RFC822)')
mesaj = e-posta.bayttan_mesaj(veri[0][1])IMAP Python İstemcisi Nedir?
Bir IMAP API Python istemci, e-posta iletilerini okumak, aramak, düzenlemek ve eşitlemek için IMAP4 protokolünü (RFC 3501) kullanarak bir posta sunucusuyla iletişim kuran herhangi bir Python programıdır. Yalnızca e-posta gönderen SMTP'nin aksine IMAP, uygulamanıza uzak bir posta kutusuna çift yönlü erişim sağlar: üstbilgileri alabilir, gövdeleri okuyabilir, işaretleri ayarlayabilir, iletileri klasörler arasında taşıyabilir ve IMAP IDLE kullanarak yeni gelenleri gerçek zamanlı olarak dinleyebilirsiniz.
İMAP (İnternet Mesaj Erişim Protokolü) uzak bir sunucuda depolanan e-postaları almak ve yönetmek için istemcilere izin veren standart bir protokoldür. Bir Python IMAP istemcisi, TLS port 993 üzerinden bağlanır, kimlik doğrulaması yapar (Temel veya OAuth XOAUTH2) ve ardından iletileri almak, aramak, işaretlemek ve düzenlemek için IMAP komutları verir. Python, üç düzeyde soyutlama sunar: standart kütüphane imaplib, daha üst düzey IMAPİstemci wrapper, ve tamamen asenkron seçenekler gibi aioimaplib. IMAP mimarisi ve kullanım örnekleri hakkında tam bir genel bakış için lütfen şuralara bakınız IMAP API geliştirici kılavuzu.
CRM, ATS veya yardım masanıza kullanıcı gelen kutularını senkronize edin. Python IMAP, tam bir posta sunucusu yönetmeden yeni iletileri veritabanınıza çekmenize veya göndermenize (IDLE) olanak tanır.
Python kullanarak gelen e-postaları ayıklayın, sınıflandırın ve yönlendirin. IMAP istemciniz bir işlem kuyruğuna beslenir: fatura ayrıştırma, bilet oluşturma, potansiyel müşteri puanlaması veya LLM özetlemesi.
E-posta gönderme işlemlerini test edin, "gelen kutusu sıfır" araçları oluşturun veya teslim edilebilirliği denetleyin. Python IMAP, kullanıcılarınızın gördüğü aynı posta kutusuna programlı erişim sağlar. Bizimkilere göz atın e-posta API kılavuzu tüm ekosistem için.
3 Python IMAP Yığın Seçeneği
Doğru Python IMAP kütüphanesini seçmek kullanım alanınıza bağlıdır: hızlı bir betik, üretim hizmeti veya eşzamansız bir işlem hattı. Her biri için kod örneklerine dalmadan önce ana seçeneklerin karşılaştırması burada yer almaktadır.
| Kütüphane | Tip | OAuth Desteği | Asenkron | Ayrıştırma Yardımcıları | İçin En İyisi |
|---|---|---|---|---|---|
| imaplib | Stdlib (sıfır bağımlılık) | El Kitabı | Hayır | Minimal | Basit betikler, harici bağımlılık yok |
| IMAPİstemci | Üçüncü taraf sarmalayıcı | El Kitabı | Hayır | İyi | Üretim IMAP async olmadan |
| aioimaplib | Asenkron kütüphane | El Kitabı | Evet | Sınırlı | asyncio işlem hatları & büyük ölçekte BOŞTA |
| Unipile APIEn iyisi | Birleşik REST/SDK | Yerleşik | Evet | Tam | Çoklu sağlayıcıyla ölçekte üretim |
IMAP karmaşasını atlayın. Unipile, Gmail, Outlook ve herhangi bir IMAP sunucusu için tek bir entegrasyon sağlayarak imaplib, OAuth ve çoklu sağlayıcı mantığını tek bir REST API'de soyutlar.
Ücretsiz oluşturmaya başlaHızlı Başlangıç: imaplib ile IMAP'e Bağlanma
Python standart kütüphanesi şunlarla birlikte gelir imaplib - kurulum gerektirmez. Bağlantıdan vücut çekimine kadar, zorlu noktalar hakkında dürüst yorumlarla eksiksiz bir adım adım anlatım.
Kullanım imaplib.IMAP4_SSL şifreli bir bağlantı için 993 numaralı bağlantı noktasında. Gmail ve Outlook için, sunucu adreslerini bizim IMAP sunucu bağlantı kılavuzu. Temel Kimlik Doğrulama (parola), henüz izin veren IMAP sunucularında çalışır - ancak Gmail ve Outlook artık OAuth XOAUTH2'yi gerektirir (Bölüm 5'te ele alınmıştır).
İthalat imaplib
#'yi Gmail IMAP'a bağla (TLS bağlantı noktası 993)
posta = imaplib.IMAP4_SSL('imap.gmail.com', 993)
# Temel kimlik doğrulama (sadece uygulama şifresi – OAuth tercih edilir)
posta.Giriş('user@gmail.com', 'uygulama parolası')
# Tüm posta kutularını listele
durum, posta kutuları = posta.list()
için kutu içinde posta kutuları
printkutu.çöz('utf-8'))
posta.çıkış()Bu seç() Çağrı bir posta kutusu açar ve mesaj sayısını döndürür. ara() mesaj kimliklerinin boşlukla ayrılmış bayt dizisini döndürür - UID'ler değil. Manuel olarak kod çözmeniz ve ayırmanız gerekir.
# Gelen Kutusu'nu (veya herhangi bir klasörü) seçin
durum, sayı = posta.seç('GELEN KUTUSU')
print(Mesajlar: {count[0].decode()}')
# Görünmeyen mesajları ara
durum, mesaj_kimlikleri = posta.arama(Hiçbiri, 'GÖRÜLMEMİŞ')
kimlikler = msg_ids[0].bölmek()
print(Okunmamış sayı: {len(ids)}')
# Gönderene göre arama
_, kimliklerden = posta.arama(Hiçbiri, 'İLE', 'boss@company.com')
# Tarih aralığına göre arama
, son = posta.arama(Hiçbiri, 'DANİ', '01-Oca-2026')İşte burası imaplib karışır. Ham yanıt, bayt içeren bir demet listesidir. İndekslemeniz gerekir veri[0][1] ham mesaja ulaşmak, sonra onu şuraya geçirmek için e-posta Ayrıştırma için modül. Başlıklar RFC 2047 ile kodlanmıştır ve gereklidir decode_header().
İthalat e-posta
itibaren e-posta.başlık İthalat başlığı_çöz
fonksiyon diziyi_çöz(değer):
"RFC 2047 kodlu başlık değerini çöz."
parçalar = başlığı_çöz(değer)
çözülmüş = []
için parça, şifrelemek içinde parçalar
eğer isinstanceparça, bayt):
çözülmüş.eklekısım.çöz(şifrele veya 'utf-8', hatalar='değiştir'))
aksi takdirde:
çözülmüş.ekleparça
return ' '.katıl(çözülmüş)
için kimlik numarası içinde ids[-]5:]: # son 5 mesaj
_, veri = posta.fetch(kullanıcı kimliği, '(RFC822)')
çiğ = veri[0][1] # tuple'larının açılmasındaki zorluklar
mesaj = e-posta.bayttan_mesaj(ham)
konu = diziyi_çöz(mesaj['Konu'] veya '')
sender = diziyi_çöz(mesaj['Dan'] veya '')
# Walk MIME bileşenleri (düz metin gövdesi için)
eğer mesaj.çok parçalı():
için parça içinde mesaj.yürümek():
eğer parça.içerik_türünü_al() == 'metin/düz':
vücut = parça.yükü_al(çöz=Doğru).çöz('utf-8', hatalar='değiştir')
print('{sender} Tarafından | Konu: {konu}')imaplib'in can sıkıcı yönleri: ham bayt yanıtları dikkatli demet indekslemesi gerektirirveri[0][1]), başlıklar RFC 2047 kodludur ve decode_header(), çok parçalı MIME gövdeleri tam bir yürümek, ve UID'lere karşı sıra numaraları için yerleşik yardımcılar yoktur. Üretim iş yükleri için IMAPClient'ı (Bölüm 4) veya bir birleştirilmiş IMAP API yerine.
Daha İleriye Gitmek: Üretim İçin IMAPClient
imaplib'i üretime aldığınızda, yanıt ayrıştırmasının kırılganlığını, tutarsız UID kullanımını ve yaygın görevler için yardımcıların bulunmadığını hızla fark edersiniz. IMAPClient, IMAP spesifikasyonuna yakın kalarak bu pürüzleri gideren Pythonik bir sarmalayıcıdır.
veri[0][1]uid() manuel olarak sarmalayıcı)kullan_uid=True)ara(), fetch(), hareket et(), kopyala() APIboşta / boşta_kontrol()itibaren imapistemci İthalat IMAPİstemci
İthalat pprint
#, IMAPClient ile bağlan (varsayılan olarak use_uid=True)
sunucu = IMAPİstemci('imap.gmail.com', ssl=Doğru, kullanıcı_uid=Doğru)
sunucu.Giriş('user@gmail.com', 'uygulama parolası')
# Seç ve ara
sunucu.klasör_seç('GELEN KUTUSU')
mesajlar = sunucu.arama(['GÖRÜLMEMİŞ'])
print({len(messages)} okunmamış mesaj')
# Fetch - ham baytlar yerine yapılandırılmış bir sözlük döndürür
response = sunucu.fetch(mesajlar[:10], ['ZARF', 'BODY[]', 'BAYRAKLAR'])
için uid, veri içinde cevap.eşyalar():
zarf = veri[Zarf']
print(UID {uid}: {envelope.subject}')
# Mesajları klasöre taşı
sunucu.taşımak(mesajlar[:5], 'Arşiv')
# BEKLEME - yeni mesajları bekle (Gmail'de en fazla 29 dakika)
sunucu.boşta()
yanıtlar = sunucu.boşta_kontrolsüre aşımı=60)
print('BOŞ yanıtı:', yanıtlar)
sunucu.boşta_tamamlandı()
sunucu.çıkış()IMAPClient bile OAuth jetonu yönetimini manuel olarak yapmayı ve birden fazla sağlayıcıyla ilgilenmeyi gerektirir. Unipile, tüm bunları - OAuth yenileme, sağlayıcıya özgü davranışlar, IDLE yeniden bağlantıları - tek bir REST API'nin arkasında soyutlar. Tamamını görmek için e-posta API kılavuzu.
Unipile ile oluşturunPython'da OAuth XOAUTH2: Gmail ve Microsoft 365
Temel parola kimlik doğrulaması büyük sağlayıcılar için ölüdür. Gmail, standart hesaplar için Mayıs 2022'den beri bunu engelledi. Microsoft 365, Eylül 2024'te IMAP için Temel Kimlik Doğrulamayı kullanımdan kaldırdı. XOAUTH2 (bir OAuth 2.0 SASL mekanizması) artık üretim düzeyinde bir Python IMAP istemcisini kimlik doğrulamak için tek yoldur. Tam OAuth akışı açıklaması için lütfen OAuth e-posta API kılavuzu.
XOAUTH2, OAuth Bearer belirtecini şu biçimde bir base64 dizesine kodlayan bir SASL kimlik doğrulama mekanizmasıdır: kullanıcı={email}\x01auth=Bearer {token}\x01\x01. Bu dize şuna aktarılır imaplib.IMAP4_SSL.authenticate('XOAUTH2', callback). Geri çağırma, base64 ile kodlanmış dizeyi döndürür. IMAP bağlantısı yapmadan önce OAuth erişim jetonunu Google veya Microsoft kimlik uç noktaları aracılığıyla almaktan ve yenilemekten siz sorumlusunuz. Gerekli Gmail kapsamları için bkz. Gmail API kapsamları kılavuzu.
İthalat imaplib, base64, json
itibaren google.oauth2.kimlik bilgileri İthalat Kimlik Bilgileri
itibaren google.auth.transport.requests İthalat Talep
fonksiyon build_xoauth2_string(kullanıcı_e_postası, erişim_jetonu):
"IMAP kimlik doğrulaması için XOAUTH2 SASL dizesi oluştur."""
kimlik doğrulama dizesi = user={user_email}\x01auth=Bearer {access_token}\x01\x01'
return base64.b64encode(yetkilendirme_dizesi.kodlamak('ascii'))
fonksiyon geçerli_belirteç_al(kimlik_bilgileri_sözlüğü):
"Google-Auth kütüphanesini kullanarak yenileme jetonu süresi dolduğunda yenileme."
kimlik bilgileri = Kimlik Bilgileri.yetkilendirilmiş_kullanıcı_bilgileri(kimlik_bilgileri_sözlüğü)
eğer kimlik bilgileri.geçmiş ve creds.yenileme_belirteci:
kimlik bilgileri.yenile(Talep())
return kimlik bilgileri.jeton
# için gerekli Gmail IMAP kapsamı: https://mail.google.com/
kullanici_e_postasi = 'user@gmail.com'
erişim_belirteci = geçerli_belirteç_al(kimlik_bilgileri_sözlüğü)
posta = imaplib.IMAP4_SSL('imap.gmail.com')
kimlik doğrulama dizesi = build_xoauth2_string(kullanıcı_e_postası, erişim_anahtarı)
posta.kimlik doğrula('XOAUTH2', lambda x: kimlik_dizesi
# Artık normal şekilde kullanın
posta.seç('GELEN KUTUSU')
_, kimlikler = posta.arama(Hiçbiri, 'HEPSİ')
print(Toplam mesaj: {ids[0].split().length}')https://mail.google.com/ kapsam (değil gmail.yalnızcaoku Yalnız - bu kapsam, IMAP erişimi sağlamaz). Bizim Gmail API kapsamları kılavuzu tam bir döküm için. Ayrıca Gmail ayarlarında IMAP'i etkinleştirmeniz ve doğru yönlendirme URI'sine sahip bir Google Cloud OAuth 2.0 istemci kimliği kullanmanız gerekir.
İthalat imaplib, base64
İthalat msal
fonksiyon build_xoauth2_string(kullanıcı_e_postası, erişim_jetonu):
kimlik doğrulama dizesi = user={user_email}\x01auth=Bearer {access_token}\x01\x01'
return base64.b64encode(yetkilendirme_dizesi.kodlamak('ascii'))
# MSAL - Python için Microsoft Kimlik Doğrulama Kütüphanesi
MÜŞTERİ_KODU = 'azure-uygulama-istemci-kimliğiniz'
KİRACI_KODU = 'kiracı-kimliğiniz'
IMAP erişimi için # Ekranı (Outlook / Microsoft 365)
KAPSAM = ['https://outlook.office365.com/IMAP.AccessAsUser.All']
uygulama = MSAL.PublicClientApplication(CLIENT_ID, yetki=https://login.microsoftonline.com/{TENANT_ID}')
# Jetonu al (etkileşimli olarak veya yenileme jetonu aracılığıyla)
sonuç = uygulama.yetkilendirme_kodu_ile_token_edin(kod, kapsamlar=SCOPE, yönlendirme_url=redirect_uri)
erişim_belirteci = sonuç['erişim_belirteci']
#, XOAUTH2 ile Outlook IMAP'a bağlan
kullanici_e_postasi = 'user@outlook.com'
posta = imaplib.IMAP4_SSL('outlook.office365.com')
kimlik doğrulama dizesi = build_xoauth2_string(kullanıcı_e_postası, erişim_anahtarı)
posta.kimlik doğrula('XOAUTH2', lambda x: kimlik_dizesi
posta.seç('GELEN KUTUSU')OAuth XOAUTH2, sağlayıcı başına 50 satırı aşan bir kod yığınına sahip. Unipile, belirteç yenileme, XOAUTH2 anlaşması ve sağlayıcıya özgü tuhaflıkları ele alır, böylece Python kodunuz iş mantığına odaklanır, kimlik doğrulama altyapısına değil.
OAuth akışınızı oluşturmakÇoklu-Sağlayıcı Gerçeklik Kontrolü
Her sağlayıcının kendine özgü kimlik doğrulama tuhaflıkları, sunucu adresleri ve hız sınırlamaları vardır. Python IMAP istemcinizin her biri için işlemesi gerekenler şunlardır. Sunucu ana bilgisayar adları ve TLS bağlantı noktası ayrıntıları için özel IMAP sunucu bağlantı kılavuzu.
https://mail.google.com/IMAP.ErişimKullanıcıOlarak.TümBirden fazla sağlayıcıyı desteklemek, ayrı kimlik doğrulama akışları, sunucu yapılandırmaları ve özel sorun çözümleri sürdürmek anlamına gelir. Unipile, Gmail, Outlook ve herhangi bir IMAP sunucusunu tek bir API'de birleştirir. Bizi okuyun E-posta API Sağlayıcıları Karşılaştırması bağlam için.
Çoklu sağlayıcılı e-posta oluşturIMAP'ten Tamamen Ne Zaman Vazgeçilmeli: Birleşik API Yaklaşımı
imaplib, IMAPClient ve XOAUTH2'yi inceledikten sonra tek bir gerçek netleşiyor: Python'da ham IMAP, desteklediğiniz her sağlayıcı için yüzlerce satır kod gerektiriyor. Unipile, bir birleştirilmiş IMAP API bunu tek bir REST arayüzünde soyutlar. Kullanıcı hesaplarını (Gmail, Outlook veya herhangi bir IMAP sunucusu) OAuth ile bağlarsınız ve Unipile sizin adınıza her protokol ayrıntısını halleder.
# 1. OAuth jetonu al (50+ satır)
# 2. XOAUTH2 dizesini oluştur
# 3. Bağlan ve kimlik doğrulama yap
# 4. Klasörü seçin
# 5. Mesajları ara
# 6. Ham baytları al
# 7. Tuple verilerini [0][1] olarak ayrıştır
# 8. RFC 2047 başlıklarını çözümle
# 9. MIME parçalarını yürü
# 10. Tutamak ekleri
# 11. Bekleme zaman aşımlarını yönetme
# 12. Hata durumunda yeniden bağlan
# 13. Outlook için de aynısını yapın...
# 14. IMAP sunucuları için de aynısını tekrarlayın...İthalat istekleri
# Bağlı herhangi bir hesaptan e-postaları al
r = istemler.olsun(
'https://api6.unipile.com/api/v1/e-postalar',
başlıklar='X-API-ANAHTARI': api_anahtar},
parametresi={'hesap_kimliği': hesap_kimliği}
)
e-postalar = r.json()['ürünler']
#, Gmail, Outlook ve tüm IMAP hesaplarıyla uyumludurUnipile, Gmail ve Outlook için XOAUTH2 token alımını, yenilenmesini ve geçerlilik süresini yönetir. Kodunuzda MSAL veya google-auth kurulumuna gerek yoktur.
Ham bayt yok, tuple ayrıştırma yok, RFC 2047 kod çözme yok. Her e-posta ayrıştırılmış başlıklar, gövde ve eklerle birlikte temiz yapılandırılmış JSON olarak geri döner.
Yoksayılmış oturumları ve yeniden bağlantıları yönetmek yerine, Unipile yeni e-posta olaylarını webhook uç noktanıza iletir. Yoklama, yuva yönetimi yok.
Tek bir API uç noktası Gmail, Outlook ve herhangi bir IMAP sunucusuna hizmet verir. Kod değişikliği yapmadan hesap bağlayarak yeni sağlayıcılar ekleyin.
Unipile, e-postanın tüm yaşam döngüsünü yönetir. Her şeyi aynı API üzerinden okuyabilir, arayabilir, taşıyabilir, işaretleyebilir ve gönderebilirsiniz. Bize göz atın Python ile e-posta gönderme rehberi gönderen taraf için.
Kullanıcılarınızın her biri, OAuth aracılığıyla kendi hesaplarını bağlar. Unipile, paylaşılan bir kimlik bilgisi havuzu değil, kimliği doğrulanmış her kullanıcının adına bağımsız bir teknik aracılık yapar.
Üretimde Sık Yapılan Hatalar
Yerel olarak çalışan bir Python IMAP istemcisi edindikten sonra, üretimde sessiz veri kaybına, bağlantı kopmalarına veya bozuk karakter kodlamasına neden olabilecek uç durumlarla karşılaşılır. İşte en yaygın sorunlar ve bunları nasıl çözeceğiniz.
Microsoft, tüm Microsoft 365 kiracıları için IMAP'de Temel Kimlik Doğrulama'yı kaldırma işlemini tamamladı Eylül 2024. Python kodu kullanan mail.girisyap(kullanici, sifre) karşı outlook.office365.com artık alacak Kimlik doğrulama başarısız oldu. Tüm Microsoft 365 / Outlook IMAP entegrasyonları için XOAUTH2'ye geçiş (Bölüm 5) zorunludur. Şirket içi Exchange dağıtımları, sunucu yapılandırmasına bağlı olarak Temel Kimlik Doğrulamayı hala destekleyebilir.
Gmail, IDLE bağlantılarını yaklaşık 29 dakika sonra sessizce sonlandırır. Kodunuz IDLE oturumunu yenilemezse, herhangi bir istisna yükseltilmeden yeni mesajların gönderilmesi durur.
boşta_tamamlandı() her 25 dakikada bir, sonra hemen ara boşta Tekrar. Kullan INBOX'u seç(salt-okunur=Yanlış) yeniden bağlandığında mesaj sayısını yeniden kontrol etmek.Konu ve Gönderen gibi e-posta başlıkları RFC 2047 kodlaması kullanırİngilizce'den Türkçeye çeviri yapamam.Çağrı Yapılıyor msg['Konu'].toString() Bays değerine doğrudan bir şey döndürmek çöp veya yükseltir. UnicodeDecodeError.
email.header.decode_header() ve her bölümün kodlamasını açıkça ele alın. Geçir errors='değiştir' için .decode() bozuk başlıklarda çöküşleri önlemek için.Ekler iç içe MIME parçalarında bulunur. Çağrı get_payload() Çok parçalı bir mesaj, içeriği değil, parçaların bir listesini döndürür. Satır içi görseller Content-Disposition: inline ve bir İçerik Kimliği.
msg.yürü(), kontrol et içerik_yönlendirmesini_al() için ek, ve ara get_payload(decode=True) kodlanmış baytları almak için ek parçalar.imaplib.IMAP4_SSL Bağlantılar iş parçacığı açısından güvenli DEĞİLDİR. Birden çok iş parçacığında bir bağlantı kullanmak, bozuk yanıtlar almanıza neden olur. İstek başına yeni bir bağlantı oluşturmak maliyetlidir ve hız sınırlamalarına tabidir.
aioimaplib. Her zaman yeniden bağlanma girişimleri için üslü geri çekilme uygulayın IMAP4.iptal istisnalar.Gmail IMAP bağlantılarını hesap başına 15 eşzamanlı bağlantıyla sınırlar ve bant genişliği kotalarını (IMAP üzerinden günde 2.500 MB) uygular. RFC822'nin tamamının gövdelerini ölçekte almak bu sınırlara hızla ulaşacaktır.
RFC822.BAŞLIK), sonra gövdeleri seçici olarak al. Kullan BODY.PEEK yerine RFC822 otomatik olarak okunmuş olarak işaretlenmesini önlemek için. Üstel geri çekilme uygulayın [AŞTI] Yanıtlar.Google ve Microsoft'tan gelen erişim jetonları 3.600 saniye (1 saat) sonra süresi dolar. Jeton süresi dolduğunda IMAP oturumunuz hala açıksa, süresi dolduktan sonraki ilk komut sessizce başarısız olur veya geri döner HAYIR.
geçerlilik_bitiş_tarihi zaman damgası. Her toplu işlemden önce, belirtecin 5 dakika içinde sona erip ermediğini kontrol edin ve proaktif olarak yenileyin. Yenileme belirteçlerini güvenli bir şekilde saklayın. Tam olarak bu şekilde Unipile otomatik olarak yönetir.Tüm 6 tuzaktan kaçınmak önemli ölçüde altyapı gerektirir. Unipile, IDLE yeniden bağlantıları, belirteç yenileme, hız sınırlama ve çoklu sağlayıcı normalleştirme işlemlerini halleder - böylece siz ürün mantığınıza odaklanabilirsiniz. Tam ürünümüzün bir parçası e-posta API kılavuzu.
Zararlardan kaçınarak inşa etSıkça Sorulan Sorular
Python IMAP istemcileri, imaplib, IMAPClient, XOAUTH2 kimlik doğrulaması ve birleşik e-posta API'sini ne zaman kullanmak gerektiğine dair sık sorulan sorular.
imap.gmail.com 993 numaralı bağlantı noktasını kullanarak imaplib.IMAP4_SSL. Ancak Gmail, üçüncü taraf uygulamalar için artık düz kullanıcı adı/parola ile girişi kabul etmiyor. Kullanmanız gereken OAuth ve XOAUTH2 Google'dan alınan bir erişim belirteci ile kimlik doğrulama https://mail.google.com/ kapsam. Bizim Gmail API kapsamları kılavuzu Tam kapsamlı döküm için. Uygulama şifreleri, 2 adımlı doğrulama etkinleştirilmiş kişisel hesaplar için hala çalışır, ancak uygulamalar için OAuth gereklidir.kullanıcı={email}\x01auth=Bearer {token}\x01\x01 base64'e, ardından şunu geçirin: imaplib.IMAP4_SSL.authenticate('XOAUTH2', callback). Bu, Gmail ve Microsoft 365 için kullanımdan kaldırılmış Temel Kimlik Doğrulama oturum açma işleminin yerine geçer. Tam uygulama örnekleri bu kılavuzun 5. Bölümündedir. Ayrıca bkz. OAuth e-posta API kılavuzu.base64(f'user={email}\x01auth=Bearer {token}\x01\x01'). 3) Ara mail.authenticate('XOAUTH2', lambda x: auth_string). Gmail için şunu kullanın google-kimlikdoğrulama Outlook/Microsoft 365 için belirteç yenileme işlemlerini yönetmek üzere kitaplık kullanın, msal Python kütüphanesi. Her ikisi de Google Cloud Console veya Azure AD'de bir OAuth uygulaması kaydetmeyi gerektirir. Tam imap python oauth kodu yukarıdaki Bölüm 5'te yer almaktadır.ara()/fetch()/hareket et() yöntemler ve yerleşik IDLE desteği içerir. Her ikisi de OAuth belirteç yönetimini kendiniz halletmenizi gerektirir. Hiçbiri eşzamansız değil - asyncio tabanlı işlem hatları için şunu düşünün: aioimaplib. IMAPClient'i kurun pip install imapclient.outlook.office365.com 993 numaralı bağlantı noktasını kullanarak imaplib.IMAP4_SSL. Eylül 2024'ten itibaren Microsoft 365 için Temel Kimlik Doğrulama devre dışı bırakıldı - XOAUTH2 kullanmalısınız. Bir Azure AD uygulaması kaydedin, isteyin IMAP.ErişimKullanıcıOlarak.Tüm erişim izni, alın bir erişim jetonu kullanarak msal Python kütüphanesi, ardından kimlik doğrulaması yapın mail.authenticate('XOAUTH2', ...). Kişisel Outlook.com hesapları için aynı OAuth akışı geçerlidir. Sunucu ayrıntıları ve TLS yapılandırması için şunları inceleyin: IMAP sunucu bağlantı kılavuzu.outlook.office365.com:993. Ancak, Eylül 2024'ten itibaren Microsoft, Microsoft 365 kiracıları üzerinde IMAP için Temel Kimlik Doğrulamayı tamamen devre dışı bırakmıştır. XOAUTH2 SASL mekanizması ile OAuth 2.0 kullanmanız gerekmektedir. Azure AD yöneticinizin Exchange yönetim merkezinde IMAP erişimini etkinleştirmesi de gerekebilir. Bir alternatif ise şunu kullanmaktır Microsoft Graph API (REST) IMAP'ı tamamen ortadan kaldıran ve daha zengin meta veriler sağlayan.server.bos() IDLE moduna girmek için, sonra server.idle_check(zaman_aşımı=60) olayları beklemek için. Gmail yaklaşık 29 dakika sonra sessizce bağlantıyı kesiyor, bu nedenle yenilemeniz gerekiyor: ara server.boşta_tamamlandı() her 25 dakikada bir, sonra server.bos() Tekrar. Ham imaplib ile IDLE, manuel soket düzeyinde yönetim gerektirir - bu durum önemli ölçüde daha karmaşıktır. Üretim düzeyinde gerçek zamanlı e-posta için webhook tabanlı bir yaklaşım (Unipile'ın sunduğu gibi), IDLE oturumlarını sürdürmekten daha güvenilirdir.aioimaplib kütüphane, Python için asyncio uyumlu bir IMAP4 istemcisi sağlar. Asenkron bağlamda standart IMAP komutlarını ve IDLE'ı destekler, bu da onu aynı anda birçok posta kutusunu yönettiğiniz yüksek eşzamanlılık hatlarına uygun hale getirir. Ancak, aioimaplib imaplib veya IMAPClient'tan daha küçük bir topluluğa sahip ve OAuth desteği hala manuel XOAUTH2 uygulaması gerektiriyor. Takımlar için geliştirici hızını ayrıntılı kontrolün önüne koyan, REST tabanlı birleşik API, webhook'lar aracılığıyla gerçek zamanlı e-posta sunar ve eşzamansız soket yönetimi gerektirmez.