我正在尝试从书中学习python(“Hello!Python”)。根据这本书,这段代码应该发送一封电子邮件。到目前为止没有运气。
import os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
def send_message(message):
s = smtplib.SMTP('smtp.me.com')
s.sendmail(message['From'], message['To'], message.as_string())
s.quit()
def mail_report(to, ticker_name):
outer = MIMEMultipart()
outer['Subject'] = "Stock report for " + ticker_name
outer['From'] = "myemail@mac.com"
outer['To'] = to
# Internal text container
inner = MIMEMultipart('alternative')
text = "Here is the stock report for " + ticker_name
html = """\
<html>
<head></head>
<body>
<p>Here is teh stock report for
<b> """ + ticker_name + """ </b>
</p>
</body>
</html>
"""
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
inner.attach(part1)
inner.attach(part2)
outer.attach(inner)
filename = 'stocktracker-%s.csv' % ticker_name
csv_text = ''.join(file(filename).readlines())
csv_part = MIMEText(csv_text, 'csv')
csv_part.add_header('Content-Disposition', 'attachment', filename=filename), outer.attach(csv_part)
return outer
if __name__ == '__main__':
email = mail_report('myemail@mac.com', 'GOOG')
send_message(email)
我没有收到错误,但我也没有收到电子邮件。 (不用说,我正在使用我的实际电子邮件,而不是'myemail@mac.com')所有建议和建议阅读都赞赏。
答案 0 :(得分:2)
您可以运行本地smtp调试服务器。找到smtpd.py所在的位置,然后运行命令:
$ python /usr/lib/python2.7/smtpd.py -n -c DebuggingServer localhost:8025
然后在第二个终端屏幕上运行Python解释器:
>>> import smtplib
>>> s = smtplib.SMTP('localhost', 8025)
>>> s.sendmail('me', 'you', 'Hi!')
你应该看到'嗨!'在第一个屏幕上。
答案 1 :(得分:0)
smtplib.sendmail如果无法发送邮件,最终会引发异常 - 由于防火墙断开连接,可能需要一段时间才能超时。给它几分钟。同时,请阅读下面可能出现的问题。
代码尝试直接连接到 smtp.me.com 并通过SMTP(端口25)发送邮件。这只适用于:
550 5.1.1 unknown or illegal alias: myemail@mac.com
)您可以将任何其他邮件服务器替换为 smtp.me.com ,最好是您的ISP,它应该愿意将电子邮件转发到任何地址(与smtp.me.com不同,这将是只关心mac.com域名。)