使用 Gmail 发送电子邮件的 Python 脚本

标签 python ssl smtp gmail

我对 Python 套接字编程的经验绝对为零。我基本上边走边学。不管怎样,我的导师给了我们一个任务,让我们使用这里提供的框架代码创建一个邮件客户端:http://www.cs.wm.edu/~dnguyen/cs335/project/emailclient.pdf (注意:我没有参加 WM。)

我们不允许使用 smtplib。我正在使用 Gmail 发送此练习的电子邮件,进一步阅读后,我发现我必须使用 STARTTLS,然后使用 SSL 的 wrap_socket(),然后再次发送 EHLO。这是我得到的输出,我不知道如何处理它。我在 SO 的某个地方读到最后 250 行的意思是因为它在 250 和文本之间没有连字符/破折号 (-)。

220 mx.google.com ESMTP z15sm36730pdi.6 - gsmtp

250-mx.google.com at your service, [xxx.xxx.xxx.xxx]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8

220 2.0.0 Ready to start TLS

以下只是我的部分代码。由于这是一项个人作业,我不想将整个代码发布给类的其他人。如果您想查看其他代码,请询问。

starttls = 'STARTTLS\r\n'
clientSocket.send(starttls)
recv2 = clientSocket.recv(1024)
print recv2

sslClientSocket = ssl.wrap_socket(clientSocket)
sslClientSocket.send(login)
getLogin = sslClientSocket.recv(1024)
print getLogin
sslClientSocket.send(password)
getPass = sslClientSocket.recv(1024)
print getPass

if recv2[:3] != '220':
    print '220 tls reply not received from server.'

更多代码信息:在文件的开头,我导入了 ssl 和 base64。我定义了两个变量 'login' 和 'password' 并使用 base64.b64encode() 对它们进行编码。其余代码基于上面提供的框架代码。我在每个线程的 STARTTLS 之前和之后发送 HELO:Connect to SMTP (SSL or TLS) using Python

如何读取输出以确定发生了什么?预先感谢您的帮助。

最佳答案

...and upon further reading, I found that I have to use STARTTLS ... I read somewhere on SO that the last 250 line means something as it has no hyphen/dash (-) between 250 and the text.

您就标准中明确定义的行为提出问题。 建议你看看相关标准RFC 2821RFC3207为了理解协议(protocol),而不是试图从一些 stackoverflow 帖子中猜测协议(protocol)细节。您也可以查看 smtplib 的实现,即使不允许您直接使用代码。

关于使用 Gmail 发送电子邮件的 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27007002/

相关文章:

python - 从linux中的 Pandas 数据框列中减去日期

jquery - 通过 jQuery AJAX 传输数据到 Pyramid 后端问题

python - urllib.request SSL 连接 Python 3

ruby-on-rails - 跨域用户认证

c# - 电子邮件通知架构问题

python - 将特定值写回 .csv,Python

python - 从 python 制作 .exe 包括 .txt 文件?

search - Google 或其他搜索引擎(机器人)可以扫描 SSL/HTTPS 页面/网站吗?

smtp - SMTP 消息 ID 是否全局唯一?

c# - 使用 MailKit 发送邮件到 SpecifiedPickupDirectory