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

时间:2014-11-19 00:45:56

标签: 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'和密码'并使用base64.b64encode()对它们进行编码。其余代码基于上面提供的框架代码。我按照此主题发送STARTTLS之前和之后发送HELO:Connect to SMTP (SSL or TLS) using Python

如何阅读输出以确定发生了什么?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

  

......并且在进一步阅读时,我发现我必须使用STARTTLS ...我在某处读到最后250行意味着什么,因为它在250和文本之间没有连字符/短划线( - )。

您询问有关标准中明确定义的行为的问题。 我建议您阅读相关标准RFC 2821RFC3207以了解协议,而不是尝试从某些stackoverflow帖子中猜测协议详细信息。您可能还会看一下smtplib的实现,即使您不允许直接使用该代码。