use*_*884 4 python email sendmail smtplib
我有一个包含很多行的 file.txt 文件。我希望随机选择任何一行并通过电子邮件发送。这个循环了三次。
import smtplib,datetime,random
def mail(em):
#print "yo"
fromAddress = "atadmorecouth@gmail.com"
toAddress = "atadmorecouth@gmail.com"
subject = "WOW " + str(datetime.datetime.now())
#print subject
msg = em
server=smtplib.SMTP("smtp.gmail.com", 587)
server.starttls()
password = "mypassword"
server.login(fromAddress, password)
server.sendmail(fromAddress, toAddress, msg)
#print server.sendmail(fromAddress, toAddress, msg)
for i in range(0,3):
em=str(random.choice(list(open('file.txt'))))
mail(em)
Run Code Online (Sandbox Code Playgroud)
这段代码不起作用。登录一切都很好。我注意到的唯一问题是 server.sendmail(fromAddress, toAddress, msg) 返回一个空的 {} 对此可能有什么解决办法?首先问题出在哪里?我已经在终端中运行了 mail() 函数,看起来工作正常。所有文件都托管在这里
首先,正如文档所说:
\n\n\n如果此方法不引发异常,它将返回一个字典,其中每个被拒绝的收件人都有一个条目。
\n
所以,你回来并不是{}问题;而是问题。这意味着您没有错误。
其次,您发送的消息不是有效的消息。消息必须包含标题,然后是空行,然后是正文。并且标头应至少包含From:和To:。
图书馆smtplib不会为你做这件事;如示例中所述:
\n\n请注意,消息中包含的标头必须包含在输入的消息中;此示例不\xe2\x80\x99 对 RFC 822 标头进行任何处理。特别是, \xe2\x80\x98To\xe2\x80\x99 和 \xe2\x80\x98From\xe2\x80\x99 地址必须显式包含在消息标头中。
\n...
\n注意:通常,您需要使用
\nsendmail();发送。请参阅电子邮件:示例。
或者,在sendmail文档中:
\n\n注意:
\nfrom_addr和to_addrs参数用于构造传输代理使用的消息信封。SMTP 不会以任何方式修改邮件标头。
在这种情况下(如示例中所示),只需手动制作消息就足够简单了:
\nmsg = "From: {}\\r\\nTo: {}\\r\\n\\r\\n{}\\r\\n".format(fromAddress, toAddress, em)\nRun Code Online (Sandbox Code Playgroud)\n最后,您确实应该server.quit()在函数末尾调用mail。虽然(至少在 CPython 中)server对象将在函数结束后立即销毁,但与 Python 中的许多其他对象不同,SMTP对象在销毁时不会调用close,更不用说quit. 因此,从服务器的角度来看,您突然断开了连接。虽然 RFC 建议服务器在没有 的情况下也可以QUIT正常工作,而且大多数都是这样做的,但它们还建议客户端应始终发送它并等待响应,所以 \xe2\x80\xa6 为什么不这样做呢?
| 归档时间: |
|
| 查看次数: |
7327 次 |
| 最近记录: |