可能重复:
Send email with python
我正在尝试使用python发送电子邮件但是当我运行脚本时需要一两分钟然后我收到此错误:
Traceback (most recent call last):
File "./emailer", line 19, in <module>
server = smtplib.SMTP(SERVER)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 239, in __init__
(code, msg) = self.connect(host, port)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 295, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 273, in _get_socket
return socket.create_connection((port, host), timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 512, in create_connection
raise error, msg
socket.error: [Errno 60] Operation timed out
这是剧本:
#!/usr/bin/env python
import smtplib
SERVER = 'addisonbean.com'
FROM = 'myemail@gmail.com'
TO = ['myemail@gmail.com']
SUBJECT = 'Hello!'
message = """\
Bla
Bla Bla
Bla Bla Bla
Bla Bla Bla Bla
"""
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
我也尝试将我的网站IP地址作为服务器,但也做了同样的事情。
有人可以告诉我为什么会这样做以及如何解决这个问题?谢谢!
答案 0 :(得分:2)
这是关键位:
return socket.create_connection((port, host), timeout)
socket.error: [Errno 60] Operation timed out
Python的说法:我无法连接到该服务器,我已经尝试但似乎没有响应。
这是第二个关键位:
SERVER = 'addisonbean.com'
那不是邮件服务器,不是吗?
答案 1 :(得分:1)
虽然addisonbean.com
会侦听25端口并回答220 accra.dreamhost.com ESMTP
- 但您似乎落后于代理或某种防火墙。你可以从你的控制台做telnet addisonbean.com 25
吗?
答案 2 :(得分:0)
您好像是在托管服务商dreamhost.com托管您的网页。
当您设置帐户时,他们可能会让您有机会创建以您的域名结尾的电子邮件帐户( yaddayadda@addisonbean.com )
您可能想要创建一个,获取信息:SMTP(“邮件服务器”)所在的主机,用户名,密码......您必须填写脚本中的所有内容。
我建议您开始使用其他常规帐户(Gmail.com, Hotmail Outlook.com)进行测试,并阅读(相当多)有关SMTP服务器的内容(即服务器)你必须与之交谈以便发送你的电子邮件)
这是一个简单的脚本,应该使用Gmail帐户发送电子邮件。用星号填写用星号显示的信息,看看它是否有效:
#!/usr/bin/env python
import traceback
from smtplib import SMTP
from email.MIMEText import MIMEText
smtpHost = "smtp.gmail.com"
smtpPort = 587
smtpUsername = "***@gmail.com"
smtpPassword = "***"
sender = "***@gmail.com"
def sendEmail(to, subject, content):
retval = 1
if not(hasattr(to, "__iter__")):
to = [to]
destination = to
text_subtype = 'plain'
try:
msg = MIMEText(content, text_subtype)
msg['Subject'] = subject
msg['From'] = sender # some SMTP servers will do this automatically, not all
conn = SMTP(host=smtpHost, port=smtpPort)
conn.set_debuglevel(True)
#conn.login(smtpUsername, smtpPassword)
try:
if smtpUsername is not False:
conn.ehlo()
if smtpPort != 25:
conn.starttls()
conn.ehlo()
if smtpUsername and smtpPassword:
conn.login(smtpUsername, smtpPassword)
else:
print("::sendEmail > Skipping authentication information because smtpUsername: %s, smtpPassword: %s" % (smtpUsername, smtpPassword))
conn.sendmail(sender, destination, msg.as_string())
retval = 0
except Exception, e:
print("::sendEmail > Got %s %s. Showing traceback:\n%s" % (type(e), e, traceback.format_exc()))
retval = 1
finally:
conn.close()
except Exception, e:
print("::sendEmail > Got %s %s. Showing traceback:\n%s" % (type(e), e, traceback.format_exc()))
retval = 1
return retval
if __name__ == "__main__":
sendEmail("***@gmail.com", "Subject: Test", "This is a simple test")
一旦你获得了域的等效信息( smtpHost,smtpPort,smtpUsername ... ),它也可以正常工作(取决于他们使用的端口,它可能是25,是非加密连接的默认值...或者不是......您必须使用 dreamhost.com 进行检查)
请注意(因为您使用的托管可能与其他人共享其SMTP服务器),您的“发件人”可能是 yaddayadda@addisonbean.com 但是要连接到 dreamhost.com SMTP服务器可能有所不同:我猜测“smtpUsername
”可能是您用来登录网站管理员的用户名,“smtpHost
”可能改为像smtp.dreamhost.com
这样的东西......我真的不知道。
你有lot of resources如何做到这一点。
你似乎也是一名设计师或摄影师......其中一个 dudes 让人关注屏幕上的事物以及所有......然后你可能想要调查一下{{3} } 是。你知道......所以电子邮件不会只发送文字,但你可以把精美的HTML放进去...... 你知道我在说什么吗?