IMAP API in Python: imaplib, IMAPClient, XOAUTH2 OAuth Gids (2026)

IMAP API Python Gids

IMAP API in Python: imaplib, IMAPClient & OAuth XOAUTH2 Gids

Een complete gids voor het bouwen van Python IMAP e-mailclients in 2026: van stdlib imaplib basics tot IMAPClient production patterns, OAuth XOAUTH2 authenticatie voor Gmail en Outlook, en wanneer een unified email API u volledig van de complexiteit bespaart.

imap_client.py
importeer imaplib, e-mail van e-mail.kop importeer decode_header # Verbinding maken met OAuth XOAUTH2 e-mail = imaplib.IMAP4_SSL('imap.gmail.com') auth_str = build_xoauth2(gebruiker, token) e-mail.authenticeren('XOAUTH2', lambda x: auth_str) # Ongelezen berichten ophalen e-mail.select('POSTVAK') _, id's = e-mail.zoek(Niets, 'ONGEZIEN') voor uid in ids[0].deel(): _, gegevens = e-mail.fetch(uid, '(RFC822)') bericht = e-mail.bericht_van_bytes(gegevens[0][1])
E-mails ophalen van Gmail, Outlook, IMAP...
Definitie

Wat is een IMAP Python-client?

Een IMAP API Python Een client is elk Python-programma dat via het IMAP4-protocol (RFC 3501) met een mailserver communiceert om e-mailberichten te lezen, te doorzoeken, te ordenen en te synchroniseren. In tegenstelling tot SMTP, dat alleen e-mail verstuurt, biedt IMAP je applicatie bidirectionele toegang tot een externe mailbox: je kunt kopteksten ophalen, de inhoud van berichten lezen, vlaggen instellen, berichten tussen mappen verplaatsen en met behulp van IMAP IDLE in realtime controleren of er nieuwe berichten zijn binnengekomen.

Snelle definitie

IMAP (Internet Message Access Protocol) is een standaardprotocol waarmee clients e-mailberichten kunnen ophalen en beheren die op een externe server zijn opgeslagen. Een Python IMAP-client maakt verbinding via TLS-poort 993, verifieert zich (Basic of OAuth XOAUTH2) en voert vervolgens IMAP-opdrachten uit om berichten op te halen, te doorzoeken, te markeren en te ordenen. Python biedt drie abstractieniveaus: de standaardbibliotheek imaplib, het hogere IMAPClient wrapper, en volledig asynchrone opties zoals aioimaplib. Voor een volledig overzicht van de IMAP-architectuur en use cases, zie onze IMAP API ontwikkelaarsgids.

E-mailsynchronisatie voor SaaS

Synchroniseer de inboxen van gebruikers met uw CRM, ATS of helpdesk. Met Python IMAP kunt u nieuwe berichten ophalen of (via IDLE) naar uw database pushen zonder dat u een volledige e-mailserver hoeft te beheren.

Automatisering & AI-pipelines

Extraheer, classificeer en stuur inkomende e-mails door met Python. Je IMAP-client vult een verwerkingswachtrij: het parseren van facturen, het aanmaken van tickets, het toekennen van scores aan leads of het samenvatten met een groot taalmodel.

Ontwikkelaarstools

Test e-mailbezorging, bouw inbox zero-tools, of auditeer de leverbaarheid. Python IMAP geeft je programmatische toegang tot dezelfde mailbox die je gebruikers zien. Bekijk onze e-mail API gids voor het volledige ecosysteem.

Vergelijking van bibliotheken

De 3 Python IMAP Stack Opties

De keuze voor de juiste Python IMAP-bibliotheek hangt af van je specifieke toepassing: een snel script, een productieservice of een asynchrone pijplijn. Hieronder vind je een vergelijking van de belangrijkste opties, waarna we per optie enkele codevoorbeelden zullen bekijken.

Bibliotheek Type OAuth-ondersteuning Asynchroon Hulpfuncties voor parseren Beste voor
imaplib Stdlib (geen afhankelijkheden) Handmatig Geen Minimaal Eenvoudige scripts, geen externe afhankelijkheden
IMAPClient Wrapper van derden Handmatig Geen Goed Productie IMAP zonder async
aioimaplib Async bibliotheek Handmatig Ja Beperkt asyncio-pijplijnen en IDLE op grote schaal
Unipile APIBeste Geconsolideerde REST/SDK Ingebouwd Ja Vol Meerproviderproductie op schaal
imaplib Standaardbibliotheek
OAuth:Handmatige installatie
Asynchroon:Geen
Parsen:Minimaal
Geschikt voor:Eenvoudige scripts, nul afhankelijkheden
IMAPClient — Omhulsel
OAuth:Handmatige installatie
Asynchroon:Geen
Parsen:Goede hulpjes
Geschikt voor:Productie IMAP, geen async
aioimaplib — Asynch
OAuth:Handmatige installatie
Asynchroon:Ja (asyncio)
Parsen:Beperkt
Geschikt voor:asyncio pipelines, schaalbaar IDLE
Unipile APIBeste
OAuth:Ingebouwd
Asynchroon:Ja
Parsen:Volledige gestructureerde JSON
Geschikt voor:Meerproviderproductie op schaal

Sla de IMAP-complexiteit over. Unipile abstraheert imaplib, OAuth en multi-providerlogica in één REST API. Eén integratie voor Gmail, Outlook en elke IMAP-server.

Gratis beginnen met bouwen
Code Handleiding

Snelle start: Verbinden met IMAP met imaplib

De standaardbibliotheek van Python wordt geleverd met imaplib - geen installatie nodig. Hier is een complete walkthrough van verbinding tot body fetch, met eerlijk commentaar op waar de pijnpunten zitten.

1
Verbinden en authenticeren

Gebruik imaplib.IMAP4_SSL op poort 993 voor een versleutelde verbinding. Voor Gmail en Outlook, zie de serveradressen in ons IMAP-server verbindingshandleiding. Basic Auth (wachtwoord) werkt voor IMAP-servers die dit nog toestaan - maar Gmail en Outlook vereisen nu OAuth XOAUTH2 (behandeld in Sectie 5).

connect.py
importeer imaplib # Verbinding maken met Gmail IMAP (TLS-poort 993) e-mail = imaplib.IMAP4_SSL('imap.gmail.com', 993) # Basisauthenticatie (alleen app-wachtwoord – OAuth heeft de voorkeur) e-mail.Login('user@gmail.com', 'app-wachtwoord') # Alle mailboxen weergeven status, postbussen = e-mail.list() voor doos in brievenbussen: printdoos.ontcijfer('utf-8')) e-mail.uitloggen()
2
Selecteer een map en zoek naar berichten

De select() oproep opent een postbus en retourneert het aantal berichten. zoek() geeft een spatiegescheiden byte-string van bericht-ID's terug - geen UID's. Je moet handmatig decoderen en splitsen.

search.py
# Selecteer INBOX (of een willekeurige map) status, aantal = e-mail.select('POSTVAK') print(Berichten: {count[0].decode()}') # Zoeken naar ONLEZEN berichten status, msg_ids = e-mail.zoek(Niets, 'ONGEZIEN') identificatiebewijzen = msg_ids[0].deel() print(Aantal ongelezen: {len(ids)}') # Zoeken op afzender _, uit_ids = e-mail.zoek(Niets, 'VAN', 'boss@company.com') # Zoeken op datumbereik _, recent = e-mail.zoek(Niets, 'sinds', '01-jan-2026')
3
Haal headers op en parse de body

Dit is waar imaplib wordt rommelig. Het ruwe antwoord is een lijst van tuples die bytes bevatten. Je moet indexeren data[0][1] om het ruwe bericht te bereiken, doorgeef het dan aan de e-mail module voor het parsen. Headers zijn RFC 2047-gecodeerd en vereisen decode_header().

haal_body.py
importeer e-mail van e-mail.kop importeer decode_header def decode_str(waarde): "RFC 2047 gecodeerde headerwaarde decoderen." onderdelen = decode_header(waarde) ontcijferd = [] voor gedeelte, insluiten in onderdelen: als isinstancedeel, bytes): gedecodeerd.toevoegen(onderdeel.ontcijfer(versleuteld of 'utf-8', fouten='vervang')) anders: gedecodeerd.toevoegen(deel) return ' '.meedoen(gedecodeerd) voor uid in ids[-5:]: # laatste 5 berichten _, gegevens = e-mail.fetch(uid, '(RFC822)') rauw = gegevens[0][1] De ellende van het uitpakken van #-tuples bericht = e-mail.bericht_van_bytesruw onderwerp = decode_str(bericht['Onderwerp'] of '') afzender = decode_str(bericht['Van'] of '') # Walk MIME-onderdelen voor een tekstblok in platte tekst als bericht.is_deel(): voor deel in bericht.lopen(): als deel.get_content_type() == 'tekst/plat': lichaam = deel.haal_payload(ontcijfer=Waar).ontcijfer('utf-8', fouten='vervang') print(Van: {sender} | Onderwerp: {subject}')

De pijnpunten van imaplib: ruwe byte-antwoorden vereisen zorgvuldige tuple-indexering (data[0][1]), koppen zijn RFC 2047-gecodeerd en moeten decode_header(), meerdelige MIME-lichamen vereisen een volledige lopen(), en er zijn geen ingebouwde hulpmiddelen voor UID's versus volgnummers. Overweeg voor productie-workloads IMAPClient (paragraaf 4) of een geünificeerde IMAP API in plaats daarvan.

Productiebibliotheek

Verder gaan: IMAPClient voor Productie

Zodra je met imaplib in productie gaat, merk je al snel de kwetsbare response parsing, inconsistente UID-handling en het ontbreken van hulpmiddelen voor veelvoorkomende taken. IMAPClient is een Pythonic wrapper die deze ruwe randjes gladstrijkt en tegelijkertijd dicht bij de IMAP-specificatie blijft.

Waarom imaplib breekt in productie
Reacties zijn ruwe bytes-tuples — fragile tuple-indexering data[0][1]
Standaard geen UID-gebaseerd ophalen (gebruik uid() (wrapper handmatig)
Geen ingebouwde MIME-parsing of body-extractiehulpmiddelen
IDLE vereist handmatig socketbeheer
Het decoderen van RFC 2047-headers is uw probleem
Wat IMAPClient je geeft
Gestructureerde dict-antwoorden - geen tuple-uitpakking vereist
UID-modus standaard (gebruik_uid=True)
Schoonmaker zoek(), ophalen(), verplaats(), kopiëren() API
Ingebouwde IDLE-ondersteuning met idle() / idle_check()
Werkt met elke IMAP-server - Gmail, Outlook, aangepaste IMAP
imapclient_voorbeeld.py
van imapclient importeer IMAPClient importeer mooi afdrukken # Verbinding maken met IMAPClient (use_uid=True is standaard ingesteld) server = IMAPClient('imap.gmail.com', ssl=Waar, gebruik_uid=Waar) server.Login('user@gmail.com', 'app-wachtwoord') # Selecteren en zoeken server.map_selecteren('POSTVAK') berichten = server.zoek(['ONGEZIEN']) print({len(messages)} ongelezen berichten') # Fetch - retourneert een gestructureerd woordenboek, geen ruwe bytes response = server.fetch(berichten[:10], ['ENVELOP', 'LICHAMAAM[]', 'VLAGGEN']) voor uid, gegevens in antwoord.artikelen(): envelop = gegevens[ENVELOPE'] print(UID {uid}: {envelope.subject}') # Berichten naar map verplaatsen server.verplaatsen(berichten[:5], 'Archief') # IDLE - wachten op nieuwe berichten (maximaal 29 minuten bij Gmail) server.inactief() reacties = server.idle_check(tijdslimiet=60) print('IDLE-reactie:', antwoorden) server.idle_klaar() server.uitloggen()

Zelfs IMAPClient vereist handmatig tokenbeheer via OAuth en omgang met meerdere providers. Unipile abstraheert dit alles – OAuth-vernieuwingen, provider-specifieke eigenaardigheden, IDLE-herverbindingen – achter één enkele REST API. Bekijk onze complete e-mail API gids.

Bouw het met Unipile
OAuth XOAUTH2

OAuth XOAUTH2 in Python: Gmail en Microsoft 365

Basale wachtwoordauthenticatie is dood voor grote providers. Gmail heeft het sinds mei 2022 geblokkeerd voor standaardaccounts. Microsoft 365 heeft Basic Auth in september 2024 afgeschaft voor IMAP. XOAUTH2 (een OAuth 2.0 SASL-mechanisme) is nu de enige productie-geschikte manier om een Python IMAP-client te authenticeren. Voor de volledige uitleg van de OAuth-flow, zie onze OAuth e-mail API-handleiding.

Hoe XOAUTH2 werkt

XOAUTH2 is een SASL-authenticatiemechanisme dat een OAuth Bearer-token codeert in een base64-string met het volgende formaat: gebruiker={email}\x01auth=Bearer {token}\x01\x01. Deze tekenreeks wordt doorgegeven aan imaplib.IMAP4_SSL.authenticate('XOAUTH2', callback). De callback retourneert de base64-gecodeerde string. U bent verantwoordelijk voor het verkrijgen en vernieuwen van de OAuth-toegangstoken via Google- of Microsoft-identiteit eindpunten voordat u de IMAP-verbinding maakt. Zie onze [documentatie](https://cloud.google.com/resource-manager/reference/rest/v1/projects/create) voor de vereiste Gmail-scopes. Gmail API scopes handleiding.

Gmail Gmail
Outlook Microsoft 365
gmail_xoauth2.py
importeer imaplib, base64, json van google.oauth2.credentials importeer Geloofsbrieven van google.auth.transport.requests importeer Verzoek def build_xoauth2_string(user_e-mailadres, toegangstoken): "XOAUTH2 SASL-string voor IMAP-authenticatie bouwen." auth_string = user={user_email}\x01auth=Bearer {access_token}\x01\x01' return base64.b64encode(auth_string.coderen('ascii')) def get_geldig_token(creds_dict): "Vernieuw token indien verlopen met behulp van de google-auth bibliotheek." credit = Inloggegevens.van_geautoriseerde_gebruikersinformatie(geloofsbrieven_dict) als credits.verlopen en creds.refresh_token: credits.verversen(Verzoek()) return creds.token # Vereiste IMAP-toegang tot Gmail: https://mail.google.com/ gebruikers_email = 'user@gmail.com' toegangstoken = get_geldig_token(geloofsbrieven_dict) e-mail = imaplib.IMAP4_SSL('imap.gmail.com') auth_string = build_xoauth2_string(user_email, toegangstoken) e-mail.authenticeren('XOAUTH2', lambda x: auth_string) # Gebruik het nu zoals gewoonlijk e-mail.select('POSTVAK') _, id's = e-mail.zoek(Niets, 'ALLE') print(Totaal aantal berichten: {len(ids[0].split())}')
Gmail scope-eis: De toegangstoken moet worden verkregen met de https://mail.google.com/ bereik (niet gmail.alleenlezen alleen - die scope geeft geen IMAP-toegang). Zie onze Gmail API scopes handleiding voor een volledige uitsplitsing. Je moet ook IMAP inschakelen in de Gmail-instellingen en een Google Cloud OAuth 2.0-client-ID gebruiken met de juiste omleidings-URI.
outlook_xoauth2.py
importeer imaplib, base64 importeer msal def build_xoauth2_string(user_e-mailadres, toegangstoken): auth_string = user={user_email}\x01auth=Bearer {access_token}\x01\x01' return base64.b64encode(auth_string.coderen('ascii')) # MSAL - Microsoft-authenticatiebibliotheek voor Python CLIENT_ID = 'uw-azure-app-client-id' TENANT_ID = 'uw-tenant-id' # Scope voor IMAP-toegang (Outlook / Microsoft 365) REIKWIJDTE = ['https://outlook.office365.com/IMAP.AccessAsUser.All'] app = msal.PublicClientApplication(KLANT_ID, autoriteit=f'https://login.microsoftonline.com/{TENANT_ID}') # Token ophalen (interactief of via een vernieuwingstoken) resultaat = app.verkrijgen_token_met_autorisatie_code(code, scopes=SCOPE, redirect_uri=redirect_uri) toegangstoken = resultaat['toegangstoken'] # Verbinding maken met Outlook IMAP via XOAUTH2 gebruikers_email = 'user@outlook.com' e-mail = imaplib.IMAP4_SSL('outlook.office365.com') auth_string = build_xoauth2_string(user_email, toegangstoken) e-mail.authenticeren('XOAUTH2', lambda x: auth_string) e-mail.select('POSTVAK')
Microsoft 365 IMAP-opmerking: Sinds september 2024 heeft Microsoft Basic Auth voor IMAP op alle Microsoft 365-tenants uitgeschakeld. Je moet XOAUTH2 gebruiken. Registreer een Azure AD-applicatie, schakel de machtiging "IMAP.AccessAsUser.All" in en gebruik MSAL voor het verkrijgen van tokens. Zie onze [link] voor Microsoft Graph als alternatief voor IMAP. Microsoft Graph OAuth e-mailgids.

OAuth XOAUTH2 is meer dan 50 regels per provider. Unipile regelt token vernieuwing, XOAUTH2 handshake en provider-specifieke eigenaardigheden, zodat uw Python-code gericht kan blijven op bedrijfslogica - niet op authenticatiemechanismen.

Bouw je OAuth-stroom
Provider Matrix

Multi-Provider Realiteitstest

Elke provider heeft zijn eigen authenticatie-eigenaardigheden, serveradressen en snelheidslimieten. Hier is wat uw Python IMAP-client voor elk moet afhandelen. Voor serverhostnamen en TLS-poortdetails, zie onze speciale IMAP-server verbindingshandleiding.

Gmail-logo
Gmail
imap.gmail.com:993
Auth:XOAUTH2 vereist
Reikwijdtehttps://mail.google.com/
WERKELOOS:Ondersteund (29 min max)
Eigenaardigheden:Gmail-labels komen overeen met IMAP-mappen. Schakel IMAP in de instellingen in.
Vereist een Google Cloud-project met OAuth 2.0-client. Zie Gmail scopes handleiding voor details over het toepassingsgebied.
Outlook-logo
Outlook / Microsoft 365
outlook.office365.com:993
Auth:XOAUTH2 vereist
ReikwijdteIMAP.ToegangAlsGebruiker.Alle
WERKELOOS:Ondersteund
Eigenaardigheden:Basisverificatie uitgeschakeld in september 2024. Azure AD-app + beheerdersgoedkeuring vereist voor M365.
Zie REST-gebaseerd alternatief voor IMAP Microsoft Graph OAuth e-mailgids.
IMAP logo
Generieke IMAP
jouw-server:993
Auth:Inloggen/wachtwoord OK
WERKELOOS:Varieert per server
Eigenaardigheden:Server-specifieke mapnamen, MOGELIJKHEDEN variëren, sommigen missen IDLE.
Voorbeelden:Fastmail, ProtonMail Bridge, Postfix/Dovecot zelf gehost
Dekt vrijwel elke IMAP4rev1-server. Zie IMAP API-gids voor de volledige lijst.
Yahoo Mail
imap.mail.yahoo.com:993
Auth:App-wachtwoord vereist (geen XOAUTH2 voor derden)
WERKELOOS:Ondersteund
Yahoo heeft de ondersteuning voor XOAUTH2 voor apps van derden stopgezet. Genereer een app-specifiek wachtwoord in de instellingen voor accountbeveiliging van Yahoo.
iCloud-e-mail
imap.mail.me.com:993
Auth:App-wachtwoord vereist
WERKELOOS:Ondersteund
Tweefactorauthenticatie moet zijn ingeschakeld voor de Apple ID. Genereer een wachtwoord voor specifieke apps op appleid.apple.com.

Het ondersteunen van meerdere providers betekent dat je aparte authenticatiestromen, serverconfiguraties en werkmethoden voor specifieke situaties moet onderhouden. Unipile normaliseert Gmail, Outlook en elke IMAP-server tot één API. Lees onze e-mail API providers vergelijking voor context.

Bouw multi-provider e-mail
Unified API Alternatief

Wanneer je IMAP volledig moet overslaan: Unificatie API-aanpak

Na het doorlopen van imaplib, IMAPClient en XOAUTH2, wordt één waarheid duidelijk: ruwe IMAP in Python vereist honderden regels boilerplate voor elke provider die je ondersteunt. Unipile is een geünificeerde IMAP API dat abstraheert dit allemaal naar één REST-interface. Je koppelt gebruikersaccounts (Gmail, Outlook of een willekeurige IMAP-server) met OAuth, en Unipile regelt elk protocoldetail namens jou.

Met de ruwe imaplib (50+ regels per provider)
raw_imap.py
# 1. OAuth-token ophalen (meer dan 50 regels) # 2. XOAUTH2-string samenstellen # 3. Verbinden + authenticeren # 4. Selecteer map # 5. Berichten zoeken # 6. Ruwe bytes ophalen # 7. Analyseer tuple-gegevens[0][1] # 8. RFC 2047-headers decoderen # 9. MIME-onderdelen doornemen # 10. Bevestigingselementen # 11. Time-outs voor inactiviteit beheren # 12. Opnieuw verbinden bij een fout # 13. Herhaal dit voor Outlook... # 14. Herhaal dit voor IMAP-servers...
Met de Unipile REST API (5 regels)
unipile_email.py
importeer verzoekt # E-mails ophalen van elk gekoppeld account r = verzoeken.krijgen( 'https://api6.unipile.com/api/v1/emails', headers={'X-API-KEY': api_key}, params={'account_id': account_id} ) e-mails = r.json()['artikelen'] # werkt met Gmail, Outlook en alle IMAP-accounts
OAuth wordt voor u afgehandeld

Unipile beheert de acquisitie, vernieuwing en het verlopen van XOAUTH2-tokens voor Gmail en Outlook. Geen MSAL of google-auth setup nodig in uw code.

Genormaliseerde JSON-antwoorden

Geen ruwe bytes, geen tuple unpacking, geen RFC 2047-decodering. Elke e-mail komt terug als schone, gestructureerde JSON met geparseerde headers, body en bijlagen.

Real-time webhooks

In plaats van inactieve sessies en herverbindingen te beheren, stuurt Unipile nieuwe e-mailgebeurtenissen naar uw webhook-eindpunt. Geen polling, geen socketbeheer.

Multi-provider standaard

Eén API-endpoint bedient Gmail, Outlook en elke IMAP-server. Voeg nieuwe providers toe door accounts te koppelen - geen codewijzigingen aan jouw kant vereist.

Stuur ook e-mails

Unipile dekt de volledige e-maillevenscyclus. Lezen, zoeken, verplaatsen, markeren en verzenden - allemaal vanuit dezelfde API. Bekijk onze Python e-mail verzenden handleiding voor de verzendende kant.

Per-gebruiker gekoppelde accounts

Elke gebruiker koppelt zijn eigen account via OAuth. Unipile fungeert als een onafhankelijke technische tussenpersoon namens elke geauthenticeerde gebruiker - niet een gedeeld credential-pool.

Productievalkuilen

Veelvoorkomende valkuilen in productie

Nadat een Python IMAP-client lokaal werkend is gekregen, onthult de productie randgevallen die stille gegevensverlies, verbindingsonderbrekingen of defecte tekencodering kunnen veroorzaken. Hier zijn de meest voorkomende problemen en hoe ze op te lossen.

2026 Doorvoerwijziging: Einde Microsoft Basic Auth IMAP-ondersteuning

Microsoft heeft de verwijdering van Basic Authentication voor IMAP op alle Microsoft 365 tenants voltooid in September 2024. Elke Python-code die wordt gebruikt mail.login(gebruiker, wachtwoord) tegen outlook.office365.com zal nu ontvangen AUTHENTICATIE mislukt. Migratie naar XOAUTH2 (sectie 5) is verplicht voor alle Microsoft 365 / Outlook IMAP-integraties. Exchange on-premises implementaties kunnen Basic Auth nog steeds ondersteunen, afhankelijk van de serverconfiguratie.

01
IMAP IDLE time-out (29 minuten op Gmail)

Gmail beëindigt IDLE-verbindingen stilzwijgend na ongeveer 29 minuten. Als je code de IDLE-sessie niet vernieuwt, stoppen nieuwe berichten met aankomen zonder dat er een uitzondering wordt gegenereerd.

Repareren: Zet een timer op idle_klare() elke 25 minuten, bel dan onmiddellijk idle() nog een keer. Gebruik select_folder('POSTVAK', readonly=False) om het aantal berichten opnieuw te controleren bij herverbinding.
02
Fouten bij RFC 2047 charset-decodering

E-mailheaders zoals Onderwerp en Van gebruiken RFC 2047-codering (Dit is het begin van een e-mailonderwerp. Het geeft aan dat de tekst die volgt gecodeerd is met UTF-8 en Base64. Het gebruik van "=?UTF-8?B?..." is de standaard manier om dergelijke onderwerpen in e-mails te formatteren. Om je te helpen, zou ik de rest van de e-mailonderwerpregel nodig hebben om het daadwerkelijk te decoderen. Als je de hele regel deelt, kan ik het voor je vertalen.. Bellen str(msg['Onderwerp']) direct op een byte-waarde retourneert garbage of veroorzaakt een fout UnicodeDecodeError.

Repareren: Altijd gebruiken email.header.decode_header() en codeer elk deel expliciet. Door fouten='vervang' naar .decode() om crashes te voorkomen bij verkeerd gevormde headers.
03
Bijlageparsen uit multipartberichten

Bijlagen bevinden zich in geneste MIME-onderdelen. Bellen ophalen_payload() op een meerdelig bericht retourneert een lijst met delen, niet de inhoud. In-line afbeeldingen zijn Content-Disposition: inline en heb een Content-ID.

Repareren: Loop alle onderdelen met msg.loop(), controleer get_content_disposition() voor bijlage, en bel get_payload(decode=True) aanhulsels om gedecodeerde bytes te krijgen.
04
Connection pooling en thread-veiligheid

imaplib.IMAP4_SSL instanties zijn NIET thread-safe. Het gebruik van één verbinding over meerdere threads veroorzaakt rommelige antwoorden. Het aanmaken van een nieuwe verbinding per verzoek is duur en beperkt in snelheid.

Repareren: Gebruik een connection pool (één verbinding per worker thread) of een asynchrone bibliotheek zoals aioimaplib. Implementeer altijd exponentiële backoff voor herverbindingspogingen na IMAP4.afbreken uitzonderingen.
05
Limieten en uitputting van quota

Gmail beperkt IMAP-verbindingen tot 15 gelijktijdige verbindingen per account en handhaaft bandbreedtelimieten (2.500 MB/dag via IMAP). Het opvragen van volledige RFC822-body's op schaal zal deze limieten snel bereiken.

Repareren: Haal eerst de headers op (RFC822.HEADER), dan lichamen selectief ophalen. Gebruik BODY.PEEK[] in plaats van RFC822 om handmatige markering als gelezen te voorkomen. Implementeer exponentiële backoff op [OVERQUOTA] reacties.
06
OAuth-token verloopt halverwege de sessie

Toegangstokens van Google en Microsoft verlopen na 3.600 seconden (1 uur). Als uw IMAP-sessie nog open is wanneer het token verloopt, mislukt het volgende commando na afloop stilzwijgend of retourneert het NEE.

Repareren: Volg verloopt_op timestamp. Controleer voor elke batchbewerking of de token binnen 5 minuten verloopt en vernieuw proactief. Sla vernieuwingstokens veilig op. Dit is precies wat Unipile handelt automatisch.

Het vermijden van alle 6 de valkuilen vereist aanzienlijke infrastructuur. Unipile regelt IDLE herverbindingen, tokenvernieuwing, snelheidsbeperking en normalisatie van meerdere providers - zodat u zich kunt richten op uw productlogica. Onderdeel van onze volledige e-mail API gids.

Bouwen zonder de valkuilen
FAQ

Veelgestelde vragen

Veelgestelde vragen over Python IMAP-clients, imaplib, IMAPClient, XOAUTH2-authenticatie en wanneer je in plaats daarvan een unified email API kunt gebruiken.

01
Wat is de beste Python IMAP-bibliotheek?
Voor eenvoudige scripts, imaplib vanuit de standaardbibliotheek is voldoende met nul afhankelijkheden. Voor productiegebruik, IMAPClient biedt een schonere API met gestructureerde antwoorden en ingebouwde IDLE-ondersteuning. Voor asynchrone workloads op schaal, aioimaplib integreert met asyncio. Als u ondersteuning voor meerdere providers nodig heeft (Gmail, Outlook en aangepaste IMAP-servers) met automatisch afgehandelde OAuth, een uniforme IMAP API zoals Unipile de meeste complexiteit wegneemt.
02
Kan imaplib Gmail-e-mails lezen in Python?
Ja. Verbind met imap.gmail.com op poort 993 met imaplib.IMAP4_SSL. Echter, Gmail ondersteunt geen gewone gebruikersnaam/wachtwoord-aanmeldingen meer voor apps van derden. Je moet gebruiken OAuth XOAUTH2 authenticatie met een toegangstoken verkregen van Google via de https://mail.google.com/ bereik. Zie onze Gmail API scopes handleiding voor de volledige reikwijdte. App-wachtwoorden werken nog steeds voor persoonlijke rekeningen met tweestapsverificatie, maar OAuth is vereist voor toepassingen.
03
Wat is XOAUTH2 in Python?
XOAUTH2 is een SASL (Simple Authentication and Security Layer) mechanisme dat wordt gebruikt om IMAP-verbindingen te authenticeren met een OAuth 2.0 Bearer token in plaats van een wachtwoord. In Python codeer je de string gebruiker={email}\x01auth=Bearer {token}\x01\x01 in base64, geef het vervolgens door aan imaplib.IMAP4_SSL.authenticate('XOAUTH2', callback). Dit vervangt de verouderde Basic Auth-login voor Gmail en Microsoft 365. Volledige implementatievoorbeelden staan in sectie 5 van deze handleiding. Zie ook onze OAuth e-mail API-handleiding.
04
Hoe gebruik ik OAuth met imaplib?
Om OAuth te gebruiken met imaplib: 1) Vraag een toegangstoken aan bij de provider (Google OAuth 2.0 of Microsoft MSAL). 2) Bouw de XOAUTH2-string: base64(f'user={email}\x01auth=Bearer {token}\x01\x01'). 3) Roepen mail.authenticate('XOAUTH2', lambda x: auth_string). Voor Gmail, gebruik de google-authenticatie bibliotheek om het vernieuwen van tokens te beheren. Gebruik voor Outlook/Microsoft 365 de msal Python-bibliotheek. Beide vereisen het registreren van een OAuth-toepassing in Google Cloud Console of Azure AD. De volledige imap Python OAuth-code staat in Sectie 5 hierboven.
05
imaplib versus IMAPClient - welke moet ik gebruiken?
Gebruik imaplib wanneer je geen externe afhankelijkheden nodig hebt of alleen een eenvoudig eenmalig script. Gebruik IMAPClient voor product code: het retourneert gestructureerde dictionaries in plaats van ruwe byte-tuples, gebruikt standaard UIDs, biedt een schonere zoek()/ophalen()/verplaats() methoden, en bevatten ingebouwde IDLE-ondersteuning. Beide vereisen dat u OAuth-tokentoezicht zelf afhandelt. Geen van beide is asynchroon - overweeg voor asyncio-gebaseerde pijplijnen aioimaplib. Installeer IMAPClient met pip install imapclient.
06
Hoe lees ik Outlook-e-mails met Python IMAP?
Aansluiten op outlook.office365.com op poort 993 met imaplib.IMAP4_SSL. Sinds september 2024 is Basic Auth uitgeschakeld voor Microsoft 365 - u moet XOAUTH2 gebruiken. Registreer een Azure AD-toepassing, vraag de IMAP.ToegangAlsGebruiker.Alle toestemming, verkrijg een toegangstoken met behulp van de msal Python-bibliotheek, daarna authenticeren met mail.authenticate('XOAUTH2', ...). Voor persoonlijke Outlook.com-accounts geldt dezelfde OAuth-stroom. Zie voor servergegevens en TLS-configuratie onze IMAP-server verbindingshandleiding.
07
Werkt IMAP met Microsoft 365?
Ja, Microsoft 365 ondersteunt IMAP op outlook.office365.com:993. Echter, sinds september 2024 heeft Microsoft Basic Authentication voor IMAP op Microsoft 365-tenants volledig uitgeschakeld. U moet OAuth 2.0 gebruiken met het XOAUTH2 SASL-mechanisme. Uw Azure AD-beheerder moet mogelijk ook IMAP-toegang inschakelen in het Exchange-beheercentrum. Een alternatief is om de Microsoft Graph API (REST) die IMAP volledig vermijdt en rijkere metadata biedt.
08
Hoe ga ik om met IMAP IDLE in Python?
Met IMAP IDLE kan de server meldingen versturen wanneer er nieuwe berichten binnenkomen. Met IMAPClient: roep server.idle() om de IDLE-modus te activeren, daarna server.idle_check(timeout=60) wachten op gebeurtenissen. Gmail verbreekt stilletjes de verbinding na ongeveer 29 minuten, dus u moet verlengen: bel server.idle_done() om de 25 minuten, en dan server.idle() opnieuw. Bij het gebruik van de onbewerkte imaplib vereist IDLE handmatig beheer op socketniveau – wat aanzienlijk complexer is. Voor realtime e-mail in een productieomgeving is een op webhooks gebaseerde aanpak (zoals Unipile die biedt) betrouwbaarder dan het onderhouden van IDLE-sessies.
09
Kan ik asynchrone IMAP in Python gebruiken?
Ja. De aioimaplib De library biedt een asyncio-compatibele IMAP4-client voor Python. Het ondersteunt standaard IMAP-commando's en IDLE in een asynchrone context, waardoor het geschikt is voor pipelines met hoge concurrentie waarbij u veel postbussen tegelijkertijd beheert. Echter, aioimaplib heeft een kleinere community dan imaplib of IMAPClient, en OAuth-ondersteuning vereist nog steeds handmatige XOAUTH2-implementatie. Voor teams die prioriteit geven aan ontwikkelsnelheid boven fijngranige controle, levert een REST-gebaseerde uniforme API real-time e-mail via webhooks zonder asynchrone socketbeheer.
10
Hoe verhoudt Unipile zich tot imaplib voor e-mailintegratie?
imaplib is een standaardbibliotheek op laag niveau in Python die 50-200 regels per provider vereist: OAuth-tokenbeheer, XOAUTH2-constructie, parseren van ruwe bytes, RFC 2047-headerdecodering, MIME-body traversal, IDLE-herverbreekingslussen. Eenpaal een uniforme REST API die dit alles abstraheert in één enkele HTTP-oproep met gestandaardiseerde JSON-antwoorden, ingebouwde OAuth voor Gmail en Outlook, webhook-levering voor nieuwe e-mails en ondersteuning voor meerdere providers. De afweging: Unipile is een beheerde service met eigen prijzen, terwijl imaplib gratis is maar aanzienlijke investeringen in infrastructuur vereist. Zie onze volledige IMAP API-gids en provider vergelijking.

Nog vragen over de IMAP API in Python? Ons team kan u helpen de juiste aanpak te kiezen voor uw use case - ruwe IMAP of unified API.

Praat met een expert
nl_NLNL