2012-08-01 146 views
-1

Possible Duplicate:
Send email with python试图与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 = '[email protected]' 
TO = ['[email protected]'] 

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

SMTP服务器不需要任何身份验证吗?因为他们通常会做 – BorrajaX 2012-08-01 23:44:34

+0

您需要使用实际的邮件服务器作为服务器地址。你不能放入任何随机的主机名。 – geoffspear 2012-08-01 23:46:21

回答

2

这里的键位:

return socket.create_connection((port, host), timeout) 
socket.error: [Errno 60] Operation timed out 

Python的说法:我无法连接到该服务器,我试过,但它似乎并没有回应

这里的第二个键位:

SERVER = 'addisonbean.com' 

这不是一个邮件服务器,是吗?

+0

不是。我真的不知道邮件服务器是什么... – Addison 2012-08-01 23:49:30

+0

不幸的是,在不知道邮件服务器是什么的情况下发送电子邮件非常困难。你会认为这件事今天会很容易,但还没有完成。你应该从学习电子邮件开始! – slezica 2012-08-02 03:35:18

1

虽然addisonbean.com听25端口和答案220 accra.dreamhost.com ESMTP - 你似乎是代理或某种防火墙。你能从你的控制台做telnet addisonbean.com 25吗?

+0

不会。它说这个addisonbean:节点名称或服务名称提供,或不知道 – Addison 2012-08-01 23:54:00

+0

没关系对不起 – Addison 2012-08-01 23:57:06

+0

没有。它说:尝试69.163.221.133 ... telnet:连接到地址69.163.221.133:操作超时 telnet:无法连接到远程主机 – Addison 2012-08-01 23:58:25

0

它看起来像你托管你的页面在dreamhost.com,托管服务提供商。

当您设置您的帐户,他们可能给你创建电子邮件帐户的机会与您的域名([email protected]

您可能希望创建一个,得到的信息结束:主机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服务器),您的“发件人”可能是[email protected]但实际的信息连接到dreamhost的。com SMTP服务器可能会有所不同:我猜'smtpUsername'可能是您用于在您的网站管理员中登录的用户名,'smtpHost'可能会更改为类似smtp.dreamhost.com或类似的内容......我并不真的知道。

你有一个lot of resources如何做到这一点。

也似乎是一个设计师或者摄影师...的事情怎么看的屏幕上,所有...那么你可能想调查什么MiME emails是其中的一个 花花公子 人们所关注。你知道...所以电子邮件不是只发送文本,但你可以把花哨的HTML放在它... 你知道我在说什么吗?