Reputation: 5381
Today I needed to send email from a Python script. As always I searched Google and found the following script that fits to my need.
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()
But when I tried to run the program, I got the following error message:
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'
How can i solve this problem? Any one can help me?
Thanks in advance, Nimmy.
changed the name to emailsendin .py. But I got the following 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
Upvotes: 9
Views: 13326
Reputation: 1
Does your computer also have an open mail server listening on the default port? smptlib provides methods to connect to an smtp mail server, but if your computer is not currently running one, then you cannot send mail to it.
Upvotes: 1
Reputation: 90191
You've named your module the same as one of Python's internal modules. When you import smtplib
, it tries to import email
, and finds your module instead of the internal one. When two modules import one another, only the variables in each module visible before the both import statements will be visible to one another. Renaming your module will fix the problem.
You can see this, although it's slightly obscure, in the stack trace. The import email.utils
line from smtplib.py
is calling your module, in "c:/Python26/email.py".
Another note: it's probably not a great idea to use your Python install directory as your working directory for Python code.
Upvotes: 14
Reputation: 798536
You have managed to shadow the stdlib email
module by calling your script email.py
. Rename your script to something not in the stdlib and try again.
Upvotes: 3
Reputation: 34337
Did you name your script email.py
?
If so, rename to something else and the naming conflict you're encountering should be solved.
Upvotes: 5