2011-08-29 14 views
33

Tengo éxito al enviar correos electrónicos utilizando el módulo smtplib. Pero cuando se envía el emial, no incluye el tema en el correo electrónico enviado.Python: "sujeto" no se muestra al enviar correo electrónico utilizando el módulo 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() 

Cómo debería escribir "server.sendmail" para incluir también el ASUNTO en el correo electrónico enviado.

Si uso, server.sendmail (De, A, mensaje, tema), da error sobre "smtplib.SMTPSenderRefused"

Respuesta

71

adjuntarlo como un encabezado:.

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

y luego:

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

también considere el uso de módulo de Python estándar email - que ayudará y O mucho mientras escribes correos electrónicos.

+0

funciona como un encanto, merci –

2

Véase la nota al pie de la documentación de 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.

Aquí está el enlace a la sección de ejemplos de la documentación de email, que de hecho muestra la creación de un mensaje con una línea de asunto. http://docs.python.org/library/email-examples.html#email-examples

Parece que smtplib no soporta además sujeta directamente y espera que el MSG para ya tener el formato de un tema, etc. Ahí es donde el módulo email viene en

2

Probablemente debería modificar el código para algo como esto:

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()) 

Obviamente, los <> las variables tienen que ser los valores de cadena reales, o variables válidas, sólo los ha cumplimentado como marcadores de posición. Esto funciona para mí cuando envío mensajes con sujetos.

+0

estoy consiguiendo el siguiente error: from email.mime.text import MIMEText as text ImportError: Ningún módulo llamado mime.text – nsh

+0

@nsh - ¿con qué versión de Python? Estoy usando 2.6.6 en esta instalación en particular. Es muy posible que esté en un lugar ligeramente diferente en 3.x. –

+0

Estoy usando 2.4.3 – nsh

2

Yo creo que hay que incluirla en el mensaje:

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" 

código de: http://www.tutorialspoint.com/python/python_sending_email.htm

+0

Una observación: desde, hacia y los campos de asunto, por ejemplo, deben estar al MISMO COMIENZO de la variable "mensaje", por ejemplo, o bien, los campos no serán interpretados como debe ser esperado. Tuve la experiencia de solo insertar el campo "Asunto", no al principio de la variable, y el mensaje llegó al buzón del destinatario sin asunto. Aclamaciones. – ivanleoncz

4

intente esto:

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

¿Qué hay del cuerpo del mensaje? ¿A dónde va eso? – Dss

+2

Terminé siguiendo esto para poner en el cuerpo https://docs.python.org/2/library/email-examples.html#id5 – Nico

Cuestiones relacionadas