![](/img/trans.png)
[英]How to send SMTP email for office365 with python using tls/ssl
[英]Connect to SMTP (SSL or TLS) using Python
我正在尝试连接到Gmail SMTP邮件服务器,并按照给我的框架代码所述执行任务。 只允许使用socket
s(因此不允许使用smtplib
)。 我需要:发送HELO
命令, MAIL FROM
, RCPT TO
和DATA
。
发布了许多类似问题的案例,但他们没有得到正确答案。 例如: 在Python中实现传输层安全性 - 简单邮件客户端
该程序需要通过端口587
连接到smtp.gmail.com
。 我采取了两种不同的方法:
使用STARTTLS:
mailserver = 'smtp.gmail.com' clientSocket = socket(AF_INET, SOCK_STREAM) clientSocket.connect((mailserver, 587)) recv = clientSocket.recv(1024) print recv if recv[:3] != '220': print '220 reply not received from server.' #Send HELO command and print server response heloCommand = 'HELO Alice\\r\\n' clientSocket.send(heloCommand) recv1 = clientSocket.recv(1024) print recv1 if recv1[:3] != '250': print '250 reply not received from server.' #Send MAIL FROM command and print server response. command = "STARTTLS\\r\\n" clientSocket.send(command) recvdiscard = clientSocket.recv(1024) print recvdiscard clientSocket.send("MAIL From: email\\r\\n") recv2 = clientSocket.recv(1024) print recv2 if recv2[:3] != '250': print '250 reply not received from server.'
使用SSL:
clientSocketSSL = ssl.wrap_socket(clientSocket)
然后clientSocketSSL
替换的所有实例clientSocket
。 STARTTLS行也被删除, import ssl
被添加到顶部。
使用第一种方法时, MAIL FROM:
命令不返回任何内容。 我得到以下输出:
250 mx.google.com at your service
220 2.0.0 Ready to start TLS
250 reply not received from server.
使用SSL时,我与链接的帖子相同:
ssl.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
我在这里错过了什么吗? 我想我最好的选择是使用TLS,但我不知道如何去做...我的MAIL FROM
命令有什么问题吗?
使用SSL时,您需要连接到端口465而不是端口587.如果您使用STARTTLS,您仍然需要使用ssl.wrap_socket
,您只需稍后再执行 - 特别是在收到对STARTTLS
命令的220
响应之后。 在做STARTTLS
,你应该再次进行HELO
,因为服务器应该忘记在STARTTLS
之前发生的任何事情。
在任何一种情况下,smtp.google.com端口465和587上的服务器仍然不会返回对MAIL
命令的250
响应,因为它们要求您在发送邮件之前进行身份验证。 你会收到530
响应。 在成功在这些服务器上使用MAIL
之前,您需要使用带有gmail.com凭据的AUTH
命令进行身份验证。
如果您不想进行身份验证,并且根据您需要执行的操作的详细信息,您可以尝试使用gmail.com MX记录中找到的服务器的端口25。 目前,服务器是gmail-smtp-in.l.google.com并支持STARTTLS。
在STARTTLS
之后,请致电
clientSocket = ssl.wrap_socket(clientSocket)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.