2011-08-29 4 views
33

Sono riuscito a inviare e-mail usando il modulo smtplib. Ma quando l'emial viene inviata, non include l'oggetto nell'email inviata.Python: "oggetto" non mostrato durante l'invio di e-mail utilizzando il modulo smtplib

import smtplib 

SERVER = <localhost> 

FROM = <from-address> 
TO = [<to-addres>] 

SUBJECT = "Hello!" 

message = "Test" 

TEXT = "This message was sent with Python's smtplib." 
server = smtplib.SMTP(SERVER) 
server.sendmail(FROM, TO, message) 
server.quit() 

Come dovrei scrivere "server.sendmail" per includere il SOGGETTO anche nell'e-mail inviata.

Se uso, server.sendmail (Da, A, messaggio, oggetto), dà l'errore di "smtplib.SMTPSenderRefused"

risposta

71

attaccarlo come intestazione:.

message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT) 

e poi:

server = smtplib.SMTP(SERVER) 
server.sendmail(FROM, TO, message) 
server.quit() 

considera anche utilizzando il modulo standard di Python email - aiuterà y o molto durante la composizione delle e-mail.

+0

funziona come un fascino, merci –

2

Vedere la nota alla fine della documentazione del smtplib:

In general, you will want to use the email package’s features to construct an email message, which you can then convert to a string and send via sendmail(); see email: Examples.

Questo è il collegamento alla sezione degli esempi della documentazione di email, che mostra effettivamente la creazione di un messaggio con una riga dell'oggetto. http://docs.python.org/library/email-examples.html#email-examples

Sembra che smtplib non supporta direttamente oltre soggetto e si aspetta che il msg di essere stata già formattata con un soggetto, ecc Ecco dove il modulo è disponibile in email

2

Probabilmente si dovrebbe modificare il codice per qualcosa di simile:

from smtplib import SMTP as smtp 
from email.mime.text import MIMEText as text 

s = smtp(server) 

s.login(<mail-user>, <mail-pass>) 

m = text(message) 

m['Subject'] = 'Hello!' 
m['From'] = <from-address> 
m['To'] = <to-address> 

s.sendmail(<from-address>, <to-address>, m.as_string()) 

Ovviamente, le variabili <> devono essere i valori di stringa effettivi, o variabili validi, ho appena compilato come segnaposto. Questo funziona per me quando si inviano messaggi con soggetti.

+0

Sto ottenendo il errore seguente: da email.mime.text import MIMEText come testo ImportError: nessun modulo denominato mime.text – nsh

+0

@nsh - con quale versione di Python? Sto usando 2.6.6 su questa particolare installazione. È del tutto possibile che sia in un posto leggermente diverso in 3.x. –

+0

Sto usando 2.4.3 – nsh

2

Credo che bisogna includere nel messaggio:

import smtplib 

message = """From: From Person <[email protected]> 
To: To Person <[email protected]> 
MIME-Version: 1.0 
Content-type: text/html 
Subject: SMTP HTML e-mail test 

This is an e-mail message to be sent in HTML format 

<b>This is HTML message.</b> 
<h1>This is headline.</h1> 
""" 

try: 
    smtpObj = smtplib.SMTP('localhost') 
    smtpObj.sendmail(sender, receivers, message)   
    print "Successfully sent email" 
except SMTPException: 
    print "Error: unable to send email" 

codice: http://www.tutorialspoint.com/python/python_sending_email.htm

+0

Un'osservazione: da, a e campi oggetto, per esempio, deve essere al MOLTO INIZIO della variabile "messaggio", per esempio, altrimenti, i campi non saranno interpretati come deve essere previsto. Ho avuto l'esperienza con l'inserimento del campo "Oggetto", non all'inizio della variabile, e il messaggio è arrivato alla casella di posta del destinatario senza oggetto. Saluti. – ivanleoncz

4

provare questo:

import smtplib 
from email.mime.multipart import MIMEMultipart 
msg = MIMEMultipart() 
msg['From'] = 'sender_address' 
msg['To'] = 'reciver_address' 
msg['Subject'] = 'your_subject' 
server = smtplib.SMTP('localhost') 
server.sendmail('from_addr','to_addr',msg.as_string()) 
+2

E il corpo del messaggio? Dove va? – Dss

+2

Ho finito per seguire questo per inserire il corpo https://docs.python.org/2/library/email-examples.html#id5 – Nico