smtplib – SMTP protocol client¶

SMTP Objects¶

Een SMTP instantie heeft de volgende methodes:

SMTP.set_debuglevel(level)¶

Stel het debug-uitgangsniveau in. Een waarde van 1 of True voor level resulteert in bug berichten voor de verbinding en voor alle berichten verzonden naar en ontvangen van de server. Een waarde van 2 voor level resulteert in tijdstempelberichten.

Veranderd in versie 3.5: Debuglevel 2 toegevoegd.

SMTP.docmd(cmd, args=”)¶

Stuur een commando cmd naar de server. Het optionele argument args is eenvoudigweg aan het commando gekoppeld, gescheiden door een spatie.

Hiermee wordt een 2-tuple teruggegeven, bestaande uit een numerieke antwoordcode en de eigenlijke antwoordregel (meerregelige antwoorden worden samengevoegd tot één lange regel.)

In normaal bedrijf zou het niet nodig moeten zijn om deze methode expliciet aan te roepen.Het wordt gebruikt om andere methoden te implementeren en kan nuttig zijn voor het testen van privé-extensies.

Als de verbinding met de server wordt verbroken terwijl op het antwoord wordt gewacht, SMTPServerDisconnected zal worden verhoogd.

SMTP.connect(host=’localhost’, port=0)¶

Verbind je met een host op een gegeven poort. Standaard wordt er verbinding gemaakt met de localhost op de standaard SMTP-poort (25). Als de hostnaam eindigt met een dubbele punt (':')gevolgd door een nummer, wordt dat achtervoegsel verwijderd en het nummer geïnterpreteerd als het te gebruiken poortnummer. Deze methode wordt automatisch aangeroepen door de constructor als een host wordt opgegeven tijdens het instantiëren. Geeft een2-tuple terug van de responscode en het bericht dat door de server is verzonden in zijn verbindingsreactie.

Oproept een controle-gebeurtenis op smtplib.connect met argumenten selfhostport.

SMTP.helo(name=’)¶

Identificeer uzelf aan de SMTP-server met HELO. Het hostname-argument is standaard de volledig gekwalificeerde domeinnaam van de lokale host. Het door de server geretourneerde bericht wordt opgeslagen als het helo_resp attribuut van het object.

In normaal bedrijf zou het niet nodig moeten zijn om deze methode expliciet aan te roepen.Hij zal impliciet worden aangeroepen door de sendmail() wanneer dat nodig is.

SMTP.ehlo(name=”)¶

Identificeer uzelf aan een ESMTP-server met EHLO. Het hostname-argument is standaard de volledig gekwalificeerde domeinnaam van de lokale host. Onderzoekt het antwoord op ESMTP-optie en slaat ze op voor gebruik door has_extn().Stelt ook verschillende informatieve attributen in: het bericht dat door de server wordt geretourneerd wordt opgeslagen als het ehlo_resp attribuut, does_esmtpwordt op true of false gezet, afhankelijk van of de server ESMTP ondersteunt, enesmtp_featureswordt een dictionary met de namen van deSMTP service extensies die deze server ondersteunt, en hun parameters (indien aanwezig).

Tenzij u has_extn() wenst te gebruiken voor het verzenden van mail, zou het niet nodig moeten zijn om deze methode expliciet aan te roepen. Ze zal impliciet worden aangeroepen doorsendmail() wanneer nodig.

SMTP.ehlo_or_helo_if_needed()¶

Deze methode roept ehlo() en/of helo() als er geen vorig EHLO of HELO commando is geweest deze sessie. Hij probeert eerst ESMTP EHLO.

SMTPHeloError

De server heeft niet goed geantwoord op de HELO begroeting.

SMTP.has_extn(naam)¶

Return True als naam in de set van SMTP service extensies zit die door de server zijn geretourneerd, False anders. Case wordt genegeerd.

SMTP.verify(adres)¶

Controleert de geldigheid van een adres op deze server met behulp van SMTP VRFY. Geeft een atuple terug bestaande uit code 250 en een volledig RFC 822 adres (inclusief humanname) als het gebruikersadres geldig is. Anders retourneert het een SMTP foutcode van 400 of hoger en een fouttekenreeks.

Note

Vele sites schakelen SMTP uit VRFY om spammers tegen te gaan.

SMTP.login(user, password, *, initial_response_ok=True)¶

Log in op een SMTP-server die authenticatie vereist. De argumenten zijn de gebruikersnaam en het wachtwoord om mee te authenticeren. Als er geen eerderEHLO of HELO commando is geweest deze sessie, probeert deze methode eerst ESMTP EHLO. Deze methode zal normaal terugkeren als de authenticatie succesvol was, of kan de volgende uitzonderingen opleveren:

SMTPHeloError

De server heeft de HELO begroeting niet goed beantwoord.

SMTPAuthenticationError

De server heeft de gebruikersnaam/wachtwoord combinatie niet geaccepteerd.

SMTPNotSupportedError

Het AUTH commando wordt niet ondersteund door de server.

SMTPException

Er is geen geschikte authenticatiemethode gevonden.

Elke authenticatiemethode die door smtplib wordt ondersteund, wordt achtereenvolgens geprobeerd als wordt geadverteerd dat ze door de server wordt ondersteund. Zie auth() voor een lijst van ondersteunde authenticatiemethodes. initial_response_ok wordt doorgegeven aan auth().

Het optionele sleutelwoordargument initial_response_ok geeft aan of voor authenticatiemethoden die dit ondersteunen, een “eerste antwoord” zoals gespecificeerd in RFC 4954 samen met het AUTH-commando kan worden verzonden, in plaats van een uitdaging/antwoord.

Veranderd in versie 3.5: SMTPNotSupportedError kan worden verhoogd, en de parameterinitial_response_ok is toegevoegd.

SMTP.auth(mechanisme, authobject, *, initial_response_ok=True)¶

Geef een SMTPAUTH commando voor het gespecificeerde authenticatiemechanisme, en verwerk het uitdagingsantwoord via authobject.

mechanism specificeert welk authenticatiemechanisme moet worden gebruikt als argument voor het AUTH commando; de geldige waarden zijn die welke staan vermeld in het auth element van esmtp_features.

authobject moet een aanroepbaar object zijn met een optioneel enkel argument:

data = authobject(challenge=None)

Als het optionele sleutelwoordargument initial_response_ok waar is, wordt authobject() als eerste aangeroepen zonder argument. Het kan hetRFC 4954 “initiële antwoord” ASCII str teruggeven dat zal worden gecodeerd en verzonden met het AUTH commando zoals hieronder. Als de authobject() geen initieel antwoord ondersteunt (bijvoorbeeld omdat het een uitdaging vereist), moet hetNone teruggeven wanneer het wordt aangeroepen met challenge=None. Als initial_response_okfalse is, dan zal authobject() niet eerst worden aangeroepen met None.

Als de controle van het initiële antwoord None teruggeeft, of als initial_response_ok niet waar is, dan wordt authobject() aangeroepen om het uitdagingsantwoord van de server te verwerken; het uitdagingsargument dat wordt doorgegeven is een bytes. Het moet ASCII str data teruggeven die base64 gecodeerd zal worden en naar de server gestuurd.

De klasse SMTP levert authobjects voor de CRAM-MD5PLAIN,en LOGIN mechanismen; ze heten respectievelijk SMTP.auth_cram_md5SMTP.auth_plain, en SMTP.auth_login. Zij vereisen allemaal dat de user en password eigenschappen van de SMTP instantie op de juiste waarden worden ingesteld.

Gebruikerscode hoeft auth normaal gesproken niet direct aan te roepen, maar kan in plaats daarvan de login()-methode aanroepen, die elk van de bovenstaande mechanismen om beurten zal proberen, in de genoemde volgorde. auth wordt gebruikt om de implementatie te vergemakkelijken van authenticatiemethoden die niet (of nog niet) rechtstreeks door smtplib worden ondersteund.

Nieuw in versie 3.5.

SMTP.starttls(keyfile=None, certfile=None, context=None)¶

Plaats de SMTP-verbinding in TLS-modus (Transport Layer Security). Alle SMTP-commando’s die volgen zullen worden versleuteld. U moet dan ehlo() opnieuw aanroepen.

Als keyfile en certfile zijn meegegeven, worden deze gebruikt om eenssl.SSLContext aan te maken.

De optionele context parameter is een ssl.SSLContext object; Dit is een alternatief voor het gebruik van een keyfile en een certfile en als deze worden opgegeven moeten zowel keyfile als certfile None zijn.

Als er geen eerder EHLO of HELO commando is geweest in deze sessie, probeert deze methode eerst ESMTP EHLO.

Vervreemd sinds versie 3.6: keyfile en certfile zijn verouderd ten gunste van context.Gebruik in plaats daarvan ssl.SSLContext.load_cert_chain(), of laatssl.create_default_context() de vertrouwde CAcertificaten van het systeem voor u selecteren.

SMTPHeloError

De server heeft niet goed geantwoord op de HELO begroeting.

SMTPNotSupportedError

De server ondersteunt de STARTTLS-extensie niet.

RuntimeError

SSL/TLS-ondersteuning is niet beschikbaar voor uw Python-interpreter.

Veranderd in versie 3.3: context is toegevoegd.

Veranderd in versie 3.4: De methode ondersteunt nu hostnaamcontrole metSSLContext.check_hostname en Server Name Indicator (zieHAS_SNI).

Veranderd in versie 3.5: De foutmelding bij gebrek aan STARTTLS-ondersteuning is nu deSMTPNotSupportedError subklasse in plaats van de basisSMTPException.

SMTP.sendmail(from_addr, to_addrs, msg, mail_options=(), rcpt_options=())¶

Verstuur mail. De benodigde argumenten zijn een RFC 822 from-adres string, een lijst van RFC 822 to-adres strings (een kale string zal worden behandeld als een lijst met 1 adres), en een bericht string. De aanroeper kan een lijst van ESMTP opties (zoals 8bitmime) doorgeven om te gebruiken in MAIL FROM commando’s als mail_options.ESMTP opties (zoals DSN-commando’s) die met alle RCPT-commando’s moeten worden gebruikt, kunnen als rcpt_options worden doorgegeven. (Als je verschillende ESMTPoptions moet gebruiken voor verschillende ontvangers moet je de low-level methoden gebruiken zoalsmail()rcpt() en data() om het bericht te versturen.)

Note

De parameters from_addr en to_addrs worden gebruikt om de berichtenvelop te construeren die door de transportagenten wordt gebruikt. sendmail wijzigt de berichtkoppen op geen enkele manier.

msg kan een tekenreeks zijn met tekens in het ASCII-bereik, of een bytestring. Een string wordt gecodeerd naar bytes met behulp van de ascii-codec, en de eenzame \ren \n tekens worden geconverteerd naar \r\n tekens. Een byte string wordt niet gewijzigd.

Als er geen eerder EHLO of HELO commando is geweest in deze sessie, probeert deze methode eerst ESMTP EHLO. Als de server ESMTP doet, zal de berichtgrootte en elk van de gespecificeerde opties worden doorgegeven (als de optie in de kenmerkenreeks zit die de server adverteert). Als EHLO mislukt, HELO wordt geprobeerd en ESMTP opties worden onderdrukt.

Deze methode zal normaal terugkeren als de mail voor tenminste één ontvanger wordt aanvaard. Anders zal het een exception opleveren. Dat wil zeggen, als deze methode geen exception oproept, dan zou iemand je mail moeten krijgen. Als deze methode geen exceptie oproept, retourneert ze een dictionary, met één entry voor elke ontvanger die geweigerd werd. Elke entry bevat een tuple van de SMTP error code en de bijbehorende foutmelding die door de server is verstuurd.

Als SMTPUTF8 is opgenomen in mail_options, en de server ondersteunt dit, dan mogen from_addr en to_addrs niet-ASCII karakters bevatten.

Deze methode kan de volgende uitzonderingen opleveren:

SMTPRecipientsRefused

Alle ontvangers werden geweigerd. Niemand heeft de mail ontvangen. Het recipientsattribuut van het exceptie-object is een woordenboek met informatie over de geweigerde ontvangers (zoals degene die wordt geretourneerd wanneer ten minste één ontvanger is geaccepteerd).

SMTPHeloError

De server heeft niet goed geantwoord op de HELO begroeting.

SMTPSenderRefused

De server heeft de from_addr niet geaccepteerd.

SMTPDataError

De server heeft geantwoord met een onverwachte foutcode (anders dan een weigering van arecipient).

SMTPNotSupportedError

SMTPUTF8was gegeven in de mail_options maar wordt niet ondersteund door deserver.

Niet anders vermeld, blijft de verbinding open, zelfs nadat een exception is gereleased.

Veranderd in versie 3.2: msg kan een byte string zijn.

Veranderd in versie 3.5: SMTPUTF8 ondersteuning toegevoegd, en SMTPNotSupportedError kan beraised worden als SMTPUTF8 is opgegeven maar de server dit niet ondersteunt.

SMTP.send_message(msg, from_addr=None, to_addrs=None, mail_options=(), rcpt_options=())¶

Dit is een gemakkelijke methode om sendmail() aan te roepen met de boodschap vertegenwoordigd door een email.message.Message object. De argumenten hebben dezelfde betekenis als voor sendmail(), behalve dat msg een Messageobject is.

Als from_addr None of to_addrs None is, dan vult send_message deze argumenten met adressen die uit de headers van msg zijn gehaald, zoals gespecificeerd in RFC 5322: from_addr wordt ingesteld op het Sender veld als dat aanwezig is, en anders op het From veld.to_addrs combineert de waarden (indien aanwezig) van de To,Cc, en Bcc velden van msg. Als er precies een set Resent-* headers in het bericht voorkomt, worden de gewone headers genegeerd en worden de Resent-* headers in plaats daarvan gebruikt. Als het bericht meer dan een set Resent-* headers bevat, wordt er een ValueError aangemaakt, omdat er geen manier is om ondubbelzinnig de meest recente set Resent- headers te detecteren.

send_message serialiseert msg met behulp vanBytesGenerator met \r\n als de linesep, en roept sendmail() aan om het resulterende bericht te verzenden. Ongeacht de waarden van from_addr en to_addrs, verzendt send_message geen enkele Bcc of Resent-Bcc headers die in msg kunnen voorkomen. Als een van de adressen in from_addr en to_addrs niet-ASCII karakters bevatten en de server geen SMTPUTF8 ondersteuning adverteert, wordt een SMTPNotSupported fout opgewekt. Anders wordt de Message ge-erialiseerd met een kloon van zijn policy met hetutf8 attribuut ingesteld op True, enSMTPUTF8 en BODY=8BITMIME zijn toegevoegd aan mail_options.

Nieuw in versie 3.2.

Nieuw in versie 3.5: Ondersteuning voor geïnternationaliseerde adressen (SMTPUTF8).

SMTP.quit

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *