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 self
host
port
.
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_resp
does_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 EHLO
per 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 SMTP
AUTH
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-MD5
PLAIN
,e LOGIN
; si chiamano rispettivamente SMTP.auth_cram_md5
SMTP.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’recipients
attributo 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 Message
oggetto.
Se from_addr è None
o to_addrs è None
send_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