2010-03-20 11 views
9

Oggi ho avuto bisogno di inviare email da uno script Python. Come sempre ho cercato su Google e ho trovato il seguente script che si adattava alle mie esigenze.Invia un'email usando lo script 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() 

Ma quando ho cercato di eseguire il programma, ho ottenuto il seguente messaggio di errore:

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' 

come posso risolvere questo problema? Qualcuno può aiutarmi?

Grazie in anticipo, Nimmy.


cambiato il nome in emailsendin .py. Ma ho ottenuto il seguente errore

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

Come nota a margine, non creare i moduli in 'C: \ Python26'; crea il tuo posto per loro. –

+0

C: \ Python26 ftw! lol –

+0

Devo installare un server smtp sul mio PC per poter eseguire questo programma di invio e-mail? – Nav

risposta

5

Forse è il nome dello script email.py?

In tal caso, rinominare in qualcos'altro e il conflitto di denominazione che si sta verificando deve essere risolto.

14

Hai denominato il tuo modulo lo stesso di uno dei moduli interni di Python. Quando importi smtplib, prova a importare email e trova il tuo modulo al posto di quello interno. Quando due moduli si importano a vicenda, solo le variabili in ogni modulo sono visibili prima che entrambe le istruzioni di importazione siano visibili l'una all'altra. Rinominare il modulo risolverà il problema.

È possibile vedere questo, anche se è leggermente oscuro, nella traccia dello stack. La riga import email.utils da smtplib.py chiama il il modulo, in "c: /Python26/email.py".

Un'altra nota: probabilmente non è una buona idea usare la directory di installazione di Python come directory di lavoro per il codice Python.

3

È stato possibile ombreggiare il modulo stdlib email chiamando lo script email.py. Rinominare lo script con qualcosa che non è nello stdlib e riprovare.

1

Il computer dispone anche di un server di posta aperto in ascolto sulla porta predefinita? smptlib fornisce metodi per connettersi a un server di posta smtp, ma se al momento il tuo computer non ne sta eseguendo uno, non puoi inviarlo per posta.

Problemi correlati