smtplib – Client del protocollo SMTP¶

Oggetti SMTP¶

Un’istanza SMTP ha i seguenti metodi:

SMTP.set_debuglevel(level)¶

Imposta il livello di uscita di debug. Un valore di 1 o True per il livello risulta in messaggi di debug per la connessione e per tutti i messaggi inviati e ricevuti dal server. Un valore di 2 per il livello ha come risultato che questi messaggi vengono cronometrati.

Cambiato nella versione 3.5: Aggiunto debuglevel 2.

SMTP.docmd(cmd, args=”)¶

Invia un comando cmd al server. L’argomento opzionale args è semplicemente concatenato al comando, separato da uno spazio.

Ritorna una 2-tupla composta da un codice di risposta numerico e dalla riga di risposta effettiva (le risposte multilinea sono unite in una riga lunga.)

Nel funzionamento normale non dovrebbe essere necessario chiamare esplicitamente questo metodo.Viene usato per implementare altri metodi e può essere utile per testare le estensioni private.

Se la connessione al server viene persa durante l’attesa della risposta,SMTPServerDisconnected verrà sollevato.

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

Connettersi a un host su una data porta. L’impostazione predefinita è di connettersi al localhost sulla porta standard SMTP (25). Se il nome dell’host termina con due punti (':')seguito da un numero, questo suffisso verrà rimosso e il numero verrà interpretato come il numero di porta da usare. Questo metodo viene invocato automaticamente dal costruttore se viene specificato un host durante l’istanza. Restituisce una2-tupla del codice di risposta e del messaggio inviato dal server nella sua risposta di connessione.

Lancia un evento di auditing smtplib.connect con argomenti selfhostport.

SMTP.helo(name=”)¶

Identificarsi al server SMTP utilizzando HELO. L’argomento hostname ha come valore predefinito il nome di dominio pienamente qualificato dell’host locale.Il messaggio restituito dal server è memorizzato come attributo helo_resp dell’oggetto.

Nel funzionamento normale non dovrebbe essere necessario chiamare questo metodo esplicitamente.Sarà chiamato implicitamente dal sendmail() quando necessario.

SMTP.ehlo(name=”)¶

Identificarsi in un server ESMTP usando EHLO. L’argomento hostname ha come valore predefinito il nome di dominio pienamente qualificato dell’host locale. Esamina le risposte per l’opzione ESMTP e le memorizza per l’uso di has_extn().Imposta anche diversi attributi informativi: il messaggio restituito dal server è memorizzato come attributo ehlo_respdoes_esmtp è impostato a true o false a seconda che il server supporti ESMTP, eesmtp_features sarà un dizionario contenente i nomi delle estensioni del servizio SMTP che questo server supporta, e i loro parametri (se presenti).

A meno che non si voglia usare has_extn() prima di inviare la posta, non dovrebbe essere necessario chiamare questo metodo esplicitamente. Sarà implicitamente chiamato dasendmail() quando necessario.

SMTP.ehlo_or_helo_if_needed()¶

Questo metodo chiama ehlo() e/o helo() se non ci sono stati EHLO o HELO comandi precedenti in questa sessione. Prova ESMTP EHLO prima.

SMTPHeloError

Il server non ha risposto correttamente al HELO saluto.

SMTP.has_extn(name)¶

Return True se name è nel set di estensioni del servizio SMTP restituito dal server, False altrimenti. Il caso è ignorato.

SMTP.verify(indirizzo)¶

Controlla la validità di un indirizzo su questo server usando SMTP VRFY. Restituisce un’atupla composta dal codice 250 e da un indirizzo RFC 822 completo (compreso l’humanname) se l’indirizzo dell’utente è valido. Altrimenti restituisce un codice di errore SMTP di 400 o superiore e una stringa di errore.

Nota

Molti siti disabilitano l’SMTP VRFY per evitare gli spammer.

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

Log in su un server SMTP che richiede autenticazione. Gli argomenti sono il nome utente e la password con cui autenticarsi. Se non c’è stato alcun precedenteEHLO o HELO comando in questa sessione, questo metodo prova ESMTP EHLOper primo. Questo metodo ritornerà normalmente se l’autenticazione ha avuto successo, o può sollevare le seguenti eccezioni:

SMTPHeloError

Il server non ha risposto correttamente al HELO saluto.

SMTPAuthenticationError

Il server non ha accettato la combinazione username/password.

SMTPNotSupportedError

Il comando AUTH non è supportato dal server.

SMTPException

Nessun metodo di autenticazione adatto è stato trovato.

Ognuno dei metodi di autenticazione supportati da smtplib viene provato a turno se è pubblicizzato come supportato dal server. Vedere auth() per una lista dei metodi di autenticazione supportati. initial_response_ok viene passato a auth().

L’argomento opzionale initial_response_ok specifica se, per i metodi di autenticazione che lo supportano, una “risposta iniziale” come specificato in RFC 4954 può essere inviata insieme al comando AUTH, piuttosto che richiedere un challenge/response.

Cambiato nella versione 3.5: SMTPNotSupportedError può essere sollevato, ed è stato aggiunto il parametroinitial_response_ok.

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

Eseguire un SMTPAUTH comando per il meccanismo di autenticazione specificato, e gestire la risposta di sfida tramite authobject.

meccanismo specifica quale meccanismo di autenticazione deve essere usato come argomento del comando AUTH; i valori validi sono quelli elencati nell’elemento auth di esmtp_features.

authobject deve essere un oggetto richiamabile che prende un singolo argomento opzionale:

data = authobject(challenge=None)

Se l’argomento opzionale initial_response_ok è vero,authobject() sarà chiamato per primo senza argomento. Può restituire la “risposta iniziale” RFC 4954 ASCII str che sarà codificata e inviata con il comando AUTH come segue. Se il authobject() non supporta una risposta iniziale (ad esempio perché richiede una sfida), dovrebbe restituireNone quando viene chiamato con challenge=None. Se initial_response_ok èfalse, allora authobject() non sarà chiamato prima con None.

Se il controllo della risposta iniziale restituisce None, o se initial_response_ok èfalso, authobject() sarà chiamato per processare la challengeresponse del server; l’argomento di sfida passato sarà un bytes. Dovrebbe restituire dati ASCII str che saranno codificati in base64 e inviati al server.

La classe SMTP fornisce authobjects per i meccanismi CRAM-MD5PLAIN,e LOGIN; si chiamano rispettivamente SMTP.auth_cram_md5SMTP.auth_plain, e SMTP.auth_login. Tutti richiedono che le proprietà user e password dell’istanza SMTP siano impostate su valori appropriati.

Il codice dell’utente non ha normalmente bisogno di chiamare direttamente auth, ma può invece chiamare il metodo login(), che proverà ciascuno dei meccanismi di cui sopra a turno, nell’ordine indicato. auth è esposto per facilitare l’implementazione di metodi di autenticazione non (o non ancora) supportati direttamente da smtplib.

Nuovo nella versione 3.5.

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

Porta la connessione SMTP in modalità TLS (Transport Layer Security). Tutti i comandi SMTP che seguono saranno criptati. Dovresti quindi chiamare ehlo() di nuovo.

Se vengono forniti keyfile e certfile, vengono usati per creare unssl.SSLContext.

Il parametro di contesto opzionale è un oggetto ssl.SSLContext; questa è un’alternativa all’uso di un keyfile e di un certfile e se specificato sia il keyfile che il certfile dovrebbero essere None.

Se non c’è stato un precedente EHLO o HELO comando in questa sessione, questo metodo prova prima l’ESMTP EHLO.

Depresso dalla versione 3.6: keyfile e certfile sono deprecati in favore di context.Please use ssl.SSLContext.load_cert_chain() instead, or letssl.create_default_context() select the system’s trusted CAcertificates for you.

SMTPHeloError

Il server non ha risposto correttamente al HELO saluto.

SMTPNotSupportedError

Il server non supporta l’estensione STARTTLS.

RuntimeError

Il supporto SSL/TLS non è disponibile al tuo interprete Python.

Cambiato nella versione 3.3: è stato aggiunto il contesto.

Cambiato nella versione 3.4: Il metodo ora supporta il controllo dell’hostname conSSLContext.check_hostname e l’indicatore del nome del server (vediHAS_SNI).

Cambiato nella versione 3.5: L’errore sollevato per mancanza di supporto STARTTLS è ora laSMTPNotSupportedError sottoclasse invece della baseSMTPException.

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

Invia posta. Gli argomenti richiesti sono una stringa RFC 822 from-address, una lista di stringhe RFC 822 to-address (una stringa nuda sarà trattata come una lista con 1address), e una stringa di messaggio. Il chiamante può passare una lista di opzioni ESMTP (come 8bitmime) da usare nei comandi MAIL FROM come mail_options.Le opzioni ESMTP (come i comandi DSN) che dovrebbero essere usate con tutti i comandi RCPT possono essere passate come rcpt_options. (Se hai bisogno di usare diverse ESMTPoptions per diversi destinatari devi usare i metodi di basso livello comemail()rcpt() e data() per inviare il messaggio.)

Nota

I parametri from_addr e to_addrs sono usati per costruire il messageenvelope usato dagli agenti di trasporto. sendmail non modifica in alcun modo le intestazioni del messaggio.

msg può essere una stringa contenente caratteri nell’intervallo ASCII o una stringa bytest. Una stringa è codificata in byte usando il codec ascii, e i caratteri \r e \n soli sono convertiti in \r\n caratteri. Una stringa di byte non viene modificata.

Se non c’è stato un precedente comando EHLO o HELO in questa sessione, questo metodo prova prima ESMTP EHLO. Se il server fa ESMTP, la dimensione del messaggio e ciascuna delle opzioni specificate gli saranno passate (se l’opzione è nel set di caratteristiche che il server pubblicizza). Se EHLO fallisce, HELO sarà provato e le opzioni ESMTP soppresse.

Questo metodo ritornerà normalmente se la posta è accettata per almeno un destinatario. Altrimenti solleverà un’eccezione. Cioè, se questo metodo non solleva un’eccezione, allora qualcuno dovrebbe ricevere la vostra posta. Se questo metodo non solleva un’eccezione, restituisce un dizionario, con una voce per ogni destinatario che è stato rifiutato. Ogni voce contiene una tupla del codice di errore SMTP e il messaggio di errore che lo accompagna inviato dal server.

Se SMTPUTF8 è incluso in mail_options, e il server lo supporta, from_addr e to_addrs possono contenere caratteri non-ASCII.

Questo metodo può sollevare le seguenti eccezioni:

SMTPRecipientsRefused

Tutti i destinatari sono stati rifiutati. Nessuno ha ricevuto la posta. L’recipientsattributo dell’oggetto eccezione è un dizionario con informazioni sui destinatari rifiutati (come quello restituito quando almeno un destinatario è stato accettato).

SMTPHeloError

Il server non ha risposto correttamente al HELO saluto.

SMTPSenderRefused

Il server non ha accettato il from_addr.

SMTPDataError

Il server ha risposto con un codice di errore inaspettato (diverso da un rifiuto di arecipiente).

SMTPNotSupportedError

SMTPUTF8 è stato dato nelle mail_options ma non è supportato dalserver.

Se non diversamente specificato, la connessione rimarrà aperta anche dopo aver sollevato un’eccezione.

Cambiato nella versione 3.2: msg può essere una stringa di byte.

Cambiato nella versione 3.5: SMTPUTF8 supporto aggiunto, e SMTPNotSupportedError può essere cambiato se SMTPUTF8 è specificato ma il server non lo supporta.

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

Questo è un metodo di convenienza per chiamare sendmail() con il messaggio rappresentato da un oggetto email.message.Message. Gli argomenti hanno lo stesso significato che per sendmail(), eccetto che msg è un Messageoggetto.

Se from_addr è None o to_addrs è Nonesend_message riempie questi argomenti con indirizzi estratti dalle intestazioni di msg come specificato in RFC 5322: from_addr è impostato sul campo Sender se è presente, e altrimenti sul campo From.to_addrs combina i valori (se presenti) dei campi To, Cc e Bcc del msg. Se nel messaggio appare esattamente una serie di intestazioni Resent-*, le intestazioni regolari vengono ignorate e vengono invece usate le intestazioni Resent-*. Se il messaggio contiene più di una serie di intestazioni Resent-*, viene sollevato un ValueError, poiché non c’è modo di individuare in modo univoco la serie più recente di intestazioni Resent-.

send_message serializza il msg usandoBytesGenerator con \r\n come linesep, e chiama sendmail() per trasmettere il messaggio risultante. Indipendentemente dai valori di from_addr e to_addrs, send_message non trasmette alcuna intestazione Bcc o Resent-Bcc che possa apparire nel messaggio. Se uno qualsiasi degli indirizzi in from_addr e to_addrs contiene caratteri non ASCII e il server non pubblicizza il supporto SMTPUTF8, viene sollevato un errore SMTPNotSupported. Altrimenti il Message viene serializzato con un clone del suo policy con l’attributoutf8 impostato su True, eSMTPUTF8 e BODY=8BITMIME sono aggiunti a mail_options.

Nuovo nella versione 3.2.

Nuovo nella versione 3.5: Supporto per gli indirizzi internazionalizzati (SMTPUTF8).

SMTP.quit

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *