smtplib和gmail-python脚本问题

2024-06-28 15:48:25 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的剧本:

#!/usr/bin/python

import smtplib
msg = 'Hello world.'

server = smtplib.SMTP('smtp.gmail.com',587) #port 465 or 587
server.ehlo()
server.starttls()
server.ehlo()
server.login('myname@gmail.com','mypass')
server.sendmail('myname@gmail.com','somename@somewhere.com',msg)
server.close()

我只是想从我的gmail帐户发送一封电子邮件。由于gmail的要求,脚本使用starttls。我在两个网络主机1和1以及网络势力上尝试过。1和1给了我一个“连接被拒绝”错误,webfaction报告没有错误,只是不发送电子邮件。我看不出脚本有什么问题,所以我想它可能与web主机有关。如有任何想法和意见,将不胜感激。

编辑:我打开了调试模式。从输出来看,它好像成功地发送了消息…我只是从来没有收到过。

send: 'ehlo web65.webfaction.com\r\n'
reply: '250-mx.google.com at your service, [174.133.21.84]\r\n'
reply: '250-SIZE 35651584\r\n'
reply: '250-8BITMIME\r\n'
reply: '250-STARTTLS\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250 PIPELINING\r\n'
reply: retcode (250); Msg: mx.google.com at your service, [174.133.21.84]
SIZE 35651584
8BITMIME
STARTTLS
ENHANCEDSTATUSCODES
PIPELINING
send: 'STARTTLS\r\n'
reply: '220 2.0.0 Ready to start TLS\r\n'
reply: retcode (220); Msg: 2.0.0 Ready to start TLS
send: 'ehlo web65.webfaction.com\r\n'
reply: '250-mx.google.com at your service, [174.133.21.84]\r\n'
reply: '250-SIZE 35651584\r\n'
reply: '250-8BITMIME\r\n'
reply: '250-AUTH LOGIN PLAIN\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250 PIPELINING\r\n'
reply: retcode (250); Msg: mx.google.com at your service, [174.133.21.84]
SIZE 35651584
8BITMIME
AUTH LOGIN PLAIN
ENHANCEDSTATUSCODES
PIPELINING
send: 'AUTH PLAIN *****\r\n'
reply: '235 2.7.0 Accepted\r\n'
reply: retcode (235); Msg: 2.7.0 Accepted
send: 'mail FROM:<myname@gmail.com> size=12\r\n'
reply: '250 2.1.0 OK 4sm652580yxq.48\r\n'
reply: retcode (250); Msg: 2.1.0 OK 4sm652580yxq.48
send: 'rcpt TO:<myname@gmail.com>\r\n'
reply: '250 2.1.5 OK 4sm652580yxq.48\r\n'
reply: retcode (250); Msg: 2.1.5 OK 4sm652580yxq.48
send: 'data\r\n'
reply: '354  Go ahead 4sm652580yxq.48\r\n'
reply: retcode (354); Msg: Go ahead 4sm652580yxq.48
data: (354, 'Go ahead 4sm652580yxq.48')
send: 'Hello world.\r\n.\r\n'
reply: '250 2.0.0 OK 1240421143 4sm652580yxq.48\r\n'
reply: retcode (250); Msg: 2.0.0 OK 1240421143 4sm652580yxq.48
data: (250, '2.0.0 OK 1240421143 4sm652580yxq.48')

Tags: comsendyourserverservicegoogleokmsg
3条回答

我认为GMail SMTP服务器对您连接的IP地址执行反向DNS查找,如果找不到域,则拒绝连接。这是为了避免垃圾邮件发送者使用他们的SMTP服务器作为开放中继。

我不知道OP是否还关心这个答案,但在这里我发现自己在努力解决类似的问题,希望其他人可能会发现这个有用的。事实证明,谷歌已经改变了他们允许使用SMTP服务器的方式。您需要检查以下几项:

  1. 您使用的地址与用于验证的“发件人”地址相同。如果我没有弄错的话,以前你可以在from字段中输入你想要的任何内容,但是为了安全起见,现在很多SMTP主机站点(包括google)都将其限制在已经通过身份验证的地址上。

  2. 允许“不太安全的应用”访问您的帐户(阅读:我们不从中产生收入的应用)。要登录到您的帐户并在此处导航: https://www.google.com/settings/security/lesssecureapps

  3. 将端口587与tls一起使用。不知道为什么,但我永远不能让465端口发挥好。

希望这能帮到别人。

你试过构造一个有效的消息吗?

from email.MIMEText import MIMEText

msg = MIMEText('body')
msg['Subject'] = 'subject'
msg['From'] = "..."
msg['Reply-to'] = "..."
msg['To'] = "..."

相关问题 更多 >