2010-03-20 20 views
9

Hoy necesitaba enviar un correo electrónico desde una secuencia de comandos de Python. Como siempre, busqué en Google y encontré la siguiente secuencia de comandos que se ajusta a mis necesidades.Enviar un correo electrónico utilizando la secuencia de comandos python

import smtplib 

SERVER = "localhost" 

FROM = "[email protected]" 
TO = ["[email protected]"] # must be a list 

SUBJECT = "Hello!" 

TEXT = "This message was sent with Python's smtplib." 

# Prepare actual message 

message = """\ 
From: %s 
To: %s 
Subject: %s 

%s 
""" % (FROM, ", ".join(TO), SUBJECT, TEXT) 

# Send the mail 

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

Pero cuando traté de ejecutar el programa, que tiene el siguiente mensaje de error:

Traceback (most recent call last): 
    File "C:/Python26/email.py", line 1, in <module> 
    import smtplib 
    File "C:\Python26\lib\smtplib.py", line 46, in <module> 
    import email.utils 
    File "C:/Python26/email.py", line 24, in <module> 
    server = smtplib.SMTP(SERVER) 
AttributeError: 'module' object has no attribute 'SMTP' 

¿Cómo puedo solucionar este problema? ¿Alguien puede ayudarme?

Gracias de antemano, Nimmy.


cambió el nombre a emailsendin .py. Pero tengo el siguiente error

Traceback (most recent call last): 
    File "C:\Python26\emailsending.py", line 24, in <module> 
    server = smtplib.SMTP(SERVER) 
    File "C:\Python26\lib\smtplib.py", line 239, in __init__ 
    (code, msg) = self.connect(host, port) 
    File "C:\Python26\lib\smtplib.py", line 295, in connect 
    self.sock = self._get_socket(host, port, self.timeout) 
    File "C:\Python26\lib\smtplib.py", line 273, in _get_socket 
    return socket.create_connection((port, host), timeout) 
    File "C:\Python26\lib\socket.py", line 512, in create_connection 
    raise error, msg 
error: [Errno 10061] No connection could be made because the target machine actively refused it 
+3

Como nota al margen, no cree sus módulos dentro de 'C: \ Python26'; crea tu propio lugar para ellos. –

+0

C: \ Python26 ftw! lol –

+0

¿Tengo que instalar un servidor smtp en mi PC para poder ejecutar este programa de envío de correo electrónico? – Nav

Respuesta

5

¿Ha asignado el script email.py?

En caso afirmativo, cambie el nombre a otra cosa y el conflicto de nomenclatura que encuentre debe resolverse.

14

Has nombrado tu módulo igual que uno de los módulos internos de Python. Cuando importa smtplib, intenta importar email y encuentra su módulo en lugar del interno. Cuando dos módulos se importan entre sí, solo las variables en cada módulo visible antes de las dos instrucciones de importación serán visibles entre sí. Cambiar el nombre de su módulo solucionará el problema.

Puede ver esto, aunque es un poco oscuro, en el seguimiento de la pila. La línea import email.utils de smtplib.py llama al su módulo, en "c: /Python26/email.py".

Otra nota: probablemente no sea una buena idea usar el directorio de instalación de Python como su directorio de trabajo para el código de Python.

3

Ha logrado sombrear el módulo stdlib email llamando al script email.py. Cambie el nombre de su script a algo que no esté en el stdlib y vuelva a intentarlo.

1

¿Su computadora también tiene un servidor de correo abierto que escucha en el puerto predeterminado? smptlib proporciona métodos para conectarse a un servidor de correo smtp, pero si su computadora no está ejecutando uno actualmente, entonces no puede enviar correo a él.

Cuestiones relacionadas