仅使用套接字的 Python 邮件客户端(无 smtplib)

2024-03-12

我正在尝试编写一个 python 程序,它将在不使用 smtplib 的情况下发送电子邮件。我尝试查看有关此问题的其他帖子,但找不到解决方案。

`from socket import *


msg = "\r\n My email's content!"
endmsg = "\r\n.\r\n"

mailserver = ("smtp.aol.com", 25) 

clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect(mailserver)

recv = clientSocket.recv(1024)
recv = recv.decode()
print("Message after connection request:" + recv)
if recv[:3] != '220':
    print('220 reply not received from server.')
heloCommand = 'HELO Alice\r\n'
clientSocket.send(heloCommand.encode())
recv1 = clientSocket.recv(1024)
recv1 = recv1.decode()
print("Message after HeLO command:" + recv1)
if recv1[:3] != '250':
    print('250 reply not received from server.')

# #Info for username and password
# username = "myusername"
# password = "xxxxxxxx"
# authMsg = "AUTH LOGIN\r\n"
# clientSocket.send(authMsg.encode())
# recv_auth = clientSocket.recv(1024)
# print(recv_auth.decode())

# clientSocket.send(username.encode())
# clientSocket.send("\r\n".encode())
# recv_user = clientSocket.recv(1024)
# print("Response after sending username: "+recv_user.decode())

# clientSocket.send(password.encode())
# clientSocket.send("\r\n".encode())
# recv_pass = clientSocket.recv(1024)
# print("Response after sending password: "+recv_pass.decode())


# clientSocket.send(('starttls\r\n').encode())
# recv_tls = clientSocket.recv(1024)
# print(recv_tls.decode())



mailFrom = "MAIL FROM:<[email protected] /cdn-cgi/l/email-protection>\r\n"
clientSocket.send(mailFrom.encode())
recv2 = clientSocket.recv(1024)
recv2 = recv2.decode()
print("After MAIL FROM command: "+recv2)

rcptTo = "RCPT TO:<[email protected] /cdn-cgi/l/email-protection>\r\n"
clientSocket.send(rcptTo.encode())
recv3 = clientSocket.recv(1024)
recv3 = recv3.decode()
print("After RCPT TO command: "+recv3)

data = "DATA\r\n"
clientSocket.send(data.encode())
recv4 = clientSocket.recv(1024)
recv4 = recv4.decode()
print("After DATA command: "+recv4)

clientSocket.send(msg.encode())

clientSocket.send(endmsg.encode())
recv_msg = clientSocket.recv(1024)
print("Response after sending message body:"+recv_msg.decode())

quit = "QUIT\r\n"
clientSocket.send(quit.encode())
recv5 = clientSocket.recv(1024)
print(recv5.decode())
clientSocket.close()` 

是否可以在不登录服务器的情况下发送电子邮件?如果不是我如何正确登录?每次我尝试登录时都会收到“身份验证失败”错误。即使我发送 MAIL FROM 和 RCPT TO 命令,我也有错误说“需要 MAIL 命令”和“需要 RCPT 命令”。


我能够使用 smtp.gmx.com 发送电子邮件

from socket import *
import base64
import time

msg = "\r\n I love computer networks!"
endmsg = "\r\n.\r\n"
mailserver = ("smtp.gmx.com", 25) #Fill in start #Fill in end
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect(mailserver)
recv = clientSocket.recv(1024)
recv = recv.decode()
print("Message after connection request:" + recv)
if recv[:3] != '220':
    print('220 reply not received from server.')
heloCommand = 'EHLO Alice\r\n'
clientSocket.send(heloCommand.encode())
recv1 = clientSocket.recv(1024)
recv1 = recv1.decode()
print("Message after EHLO command:" + recv1)
if recv1[:3] != '250':
    print('250 reply not received from server.')

#Info for username and password
username = "xxxxxx"
password = "xxxxxx"
base64_str = ("\x00"+username+"\x00"+password).encode()
base64_str = base64.b64encode(base64_str)
authMsg = "AUTH PLAIN ".encode()+base64_str+"\r\n".encode()
clientSocket.send(authMsg)
recv_auth = clientSocket.recv(1024)
print(recv_auth.decode())

mailFrom = "MAIL FROM:<xxxxxxxx>\r\n"
clientSocket.send(mailFrom.encode())
recv2 = clientSocket.recv(1024)
recv2 = recv2.decode()
print("After MAIL FROM command: "+recv2)
rcptTo = "RCPT TO:<xxxxxxxxxx>\r\n"
clientSocket.send(rcptTo.encode())
recv3 = clientSocket.recv(1024)
recv3 = recv3.decode()
print("After RCPT TO command: "+recv3)
data = "DATA\r\n"
clientSocket.send(data.encode())
recv4 = clientSocket.recv(1024)
recv4 = recv4.decode()
print("After DATA command: "+recv4)
subject = "Subject: testing my client\r\n\r\n" 
clientSocket.send(subject.encode())
date = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())
date = date + "\r\n\r\n"
clientSocket.send(date.encode())
clientSocket.send(msg.encode())
clientSocket.send(endmsg.encode())
recv_msg = clientSocket.recv(1024)
print("Response after sending message body:"+recv_msg.decode())
quit = "QUIT\r\n"
clientSocket.send(quit.encode())
recv5 = clientSocket.recv(1024)
print(recv5.decode())
clientSocket.close()

唯一的问题是 gmail 拒绝电子邮件,但其他一些电子邮件服务器确实会收到。现在我尝试从 smtp.gmail.com 发送需要 SSL 或 TLS 的电子邮件。有什么建议/帮助吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅使用套接字的 Python 邮件客户端(无 smtplib) 的相关文章

随机推荐