Python 使用socket通过SMTP发送qq邮件

 全流程完整代码如下

from socket import *
import base64

serverName = 'smtp.qq.com' 
serverPort = 25
#  AF_INET代表Ipv4    SOCK_STREAM 代表TCP协议
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
msg = clientSocket.recv(2048)
print(msg.decode())
clientSocket.send("HELO myName\r\n".encode())
msg = clientSocket.recv(2048)
print(msg.decode())
clientSocket.send("AUTH login\r\n".encode())
msg = clientSocket.recv(2048)
print(msg.decode())
clientSocket.send(base64.b64encode("[email protected]".encode())+b'\r\n')
msg = clientSocket.recv(2048)
print(msg.decode())
clientSocket.send(base64.b64encode("xxxxxxxx".encode())+b'\r\n')
msg = clientSocket.recv(2048)
print(msg.decode())
clientSocket.send(b"mail from: \r\n")
msg = clientSocket.recv(2048)
print(msg.decode())
clientSocket.send(b"rcpt to: \r\n")
msg = clientSocket.recv(2048)
print(msg.decode())
clientSocket.send(b"data\r\n")
msg = clientSocket.recv(2048)
print(msg.decode())
clientSocket.send(b"From: \r\n")
clientSocket.send(b"To: \r\n")
clientSocket.send(b"subject: socket not SSL\r\n")
clientSocket.send(b"socketMainContain not SSL\r\n")
clientSocket.send(b".\r\n")
msg = clientSocket.recv(2048)
print(msg.decode())
clientSocket.send(b"quit\r\n")
msg = clientSocket.recv(2048)
print(msg.decode())
clientSocket.close()

注意事项:

1. 每个命令的大小写是严格要求的,如果大小写不符合要求会 502 invalid input

2. 每次send完成某个命令后,需要recv回报信息,不然下个流程会 502

3. clientSocket.send(base64.b64encode("xxxxxxxx".encode())+b'\r\n')  这里+b'\r\n' 是为了防止\r\n被base64编码导致的502,且只有验证过程需要base64编码。

4.验证密码不是邮箱密码,是qq邮箱授权码

5.建议使用  smtplib

你可能感兴趣的:(python,网络,开发语言,tcp/ip)