今天我需要从Python脚本发送电子邮件。一如既往,我搜索了谷歌并找到了符合我需要的以下脚本。
import smtplib
SERVER = "localhost"
FROM = "sender@example.com"
TO = ["user@example.com"] # 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()
但是当我尝试运行该程序时,我收到以下错误消息:
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'
我该如何解决这个问题?任何人都可以帮助我吗?
提前致谢, Nimmy。
将名称更改为emailsendin .py。但是我收到了以下错误
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
答案 0 :(得分:14)
您已将模块命名为与Python内部模块相同的模块。导入smtplib
时,它会尝试导入email
,并找到您的模块而不是内部模块。当两个模块相互导入时,只有在两个import语句之前可见的每个模块中的变量才会彼此可见。重命名模块将解决问题。
你可以在堆栈跟踪中看到这个,虽然它有点模糊。来自import email.utils
的{{1}}行在“c:/Python26/email.py”中调用您的模块。
另一个注意事项:使用Python安装目录作为Python代码的工作目录可能不是一个好主意。
答案 1 :(得分:5)
您是否为脚本命名email.py
?
如果是这样,请重命名为其他内容,并且应该解决您遇到的命名冲突。
答案 2 :(得分:3)
您已设法通过调用脚本email
来隐藏stdlib email.py
模块。将脚本重命名为stdlib以外的内容,然后重试。
答案 3 :(得分:1)
您的计算机是否还有一个开放式邮件服务器正在侦听默认端口? smptlib提供连接到smtp邮件服务器的方法,但如果您的计算机当前没有运行,则无法向其发送邮件。