我无法让 Mail to: SMTP 命令在这个 python 套接字程序中工作。我总是得到...
530-5.5.1 Authentication Required
...如您所见,我没有提供 ca_certs 和 cert_reqs 参数。我似乎找不到任何在 Windows for Python 中使用证书进行编程的好例子。
from socket import *
import ssl, pprint
msg = "\r\n I love computer networks!"
endmsg = "\r\n.\r\n"
# Choose a mail server (e.g. Google mail server) and call it mailserver
mailserver = "smtp.gmail.com"
port = 465
# Create socket called clientSocket and establish a TCP connection with mailserver
clientSocket = socket(AF_INET, SOCK_STREAM)
ssl_clientSocket = ssl.wrap_socket(clientSocket)
#ca_certs="C:\Users\wgimson\Downloads\root",
#cert_reqs=ssl.CERT_REQUIRED)
ssl_clientSocket.connect((mailserver, port))
# DEBUG
print repr(ssl_clientSocket.getpeername())
print ssl_clientSocket.cipher()
print pprint.pformat(ssl_clientSocket.getpeercert())
# DEBUG
recv = ssl_clientSocket.read(1024)
print
print recv
# If the first three numbers of what we receive from the SMTP server are not
# '220', we have a problem
if recv[:3] != '220':
print '220 reply not received from server.'
else:
print "220 is good"
# Send HELO command and print server response.
heloCommand = 'HELO Alice\r\n'
ssl_clientSocket.write(heloCommand)
recv1 = ssl_clientSocket.recv(1024)
print recv1
# If the first three numbers of the response from the server are not
# '250', we have a problem
if recv1[:3] != '250':
print '250 reply not received from server.'
else:
print "250 is good"
# Send MAIL FROM command and print server response.
mailFromCommand = 'MAIL From: wgimson@gmail.com\r\n'
ssl_clientSocket.send(mailFromCommand)
recv2 = ssl_clientSocket.recv(1024)
print recv2
# If the first three numbers of the response from the server are not
# '250', we have a problem
if recv2[:3] != '250':
print '250 reply not received from server.'
else:
print "250 means still good"