Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅使用套接字的Python邮件客户端(无smtplib)_Python_Sockets_Email - Fatal编程技术网

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

仅使用套接字的Python邮件客户端(无smtplib),python,sockets,email,Python,Sockets,Email,我正在尝试编写一个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)

我正在尝试编写一个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:<yjorayev@aol.com>\r\n"
clientSocket.send(mailFrom.encode())
recv2 = clientSocket.recv(1024)
recv2 = recv2.decode()
print("After MAIL FROM command: "+recv2)

rcptTo = "RCPT TO:<ijorayev@gmail.com>\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()` 
`从套接字导入*
msg=“\r\n我的电子邮件内容!”
endmsg=“\r\n.\r\n”
邮件服务器=(“smtp.aol.com”,25)
clientSocket=socket(AF\u INET,SOCK\u STREAM)
clientSocket.connect(邮件服务器)
recv=clientSocket.recv(1024)
recv=recv.decode()
打印(“连接请求后的消息:+recv”)
如果recv[:3]!='220':
打印('未从服务器收到答复')
HELO命令='HELO Alice\r\n'
clientSocket.send(heloCommand.encode())
recv1=clientSocket.recv(1024)
recv1=recv1.decode()
打印(“HeLO命令后的消息:”+recv1)
如果recv1[:3]!='250':
打印('250未从服务器收到回复')
##用户名和密码信息
#username=“myusername”
#密码=“xxxxxxxx”
#authMsg=“AUTH LOGIN\r\n”
#clientSocket.send(authMsg.encode())
#recv_auth=clientSocket.recv(1024)
#打印(recv_auth.decode())
#clientSocket.send(username.encode())
#clientSocket.send(“\r\n”.encode())
#recv_user=clientSocket.recv(1024)
#打印(“发送用户名后的响应:”+recv_user.decode())
#clientSocket.send(password.encode())
#clientSocket.send(“\r\n”.encode())
#recv_pass=clientSocket.recv(1024)
#打印(“发送密码后的响应:+recv_pass.decode())
#clientSocket.send(('starttls\r\n').encode())
#recv_tls=clientSocket.recv(1024)
#打印(recv_tls.decode())
mailFrom=“邮件发件人:\r\n”
clientSocket.send(mailFrom.encode())
recv2=clientSocket.recv(1024)
recv2=recv2.decode()
打印(“从命令发送邮件后:+recv2”)
rcpto=“RCPT TO:\r\n”
clientSocket.send(rcptTo.encode())
recv3=clientSocket.recv(1024)
recv3=recv3.decode()
打印(“在RCPT到命令:+recv3之后)
data=“data\r\n”
clientSocket.send(data.encode())
recv4=clientSocket.recv(1024)
recv4=recv4.decode()
打印(“在数据命令之后:+recv4)
clientSocket.send(msg.encode())
clientSocket.send(endmsg.encode())
recv_msg=clientSocket.recv(1024)
打印(“发送消息正文后的响应:“+recv_msg.decode())
quit=“退出\r\n”
clientSocket.send(quit.encode())
recv5=clientSocket.recv(1024)
打印(recv5.decode())
clientSocket.close()`
是否可以在不登录服务器的情况下发送电子邮件?如果没有,我如何正确登录?每次尝试登录时,我都会收到“身份验证失败”错误。即使我正在从命令和RCPT向命令发送邮件,我也会出现“需要邮件命令”和“需要RCPT命令”的错误

是否可以在不登录服务器的情况下发送电子邮件

这取决于服务器。smtp.aol.com是aol邮件客户的服务器,此服务器需要您登录。MX for AOL(
dig MX AOL.com
)不需要您登录,因为它用于MTA之间的通信,但它有其他限制,以打击垃圾邮件

如果没有,我如何正确登录

首先,您最好使用EHLO而不是HELO,然后您还将看到服务器支持哪些身份验证方法

250-AUTH PLAIN LOGIN XAOL-UAS-MB XOAUTH2
有关普通身份验证和登录身份验证(以及其他身份验证)的介绍,请参阅。简而言之:对于普通用户,您必须提供
base64(用户名+“\0”+密码)

即使我正在从命令和RCPT向命令发送邮件,我也会出现“需要邮件命令”和“需要RCPT命令”的错误


您没有提供调试输出,但我猜服务器拒绝您的邮件FROM和RCPT TO命令,因为您未经授权

我能够使用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()
从套接字导入*
导入base64
导入时间
msg=“\r\n我喜欢计算机网络!”
endmsg=“\r\n.\r\n”
邮件服务器=((“smtp.gmx.com”,25)#填写开始#填写结束
clientSocket=socket(AF\u INET,SOCK\u STREAM)
clientSocket.connect(邮件服务器)
recv=clientSocket.recv(1024)
recv=recv.decode()
打印(“连接请求后的消息:+recv”)
如果recv[:3]!='220':
打印('未从服务器收到答复')
heloCommand='EHLO Alice\r\n'
clientSocket.send(heloCommand.encode())
recv1=clientSocket.recv(1024)
recv1=recv1.decode()
打印(“EHLO命令后的消息:”+recv1)
如果recv1[:3]!='250':
打印('250未从服务器收到回复')
#用户名和密码的信息
用户名=“xxxxxx”
密码=“xxxxxx”
base64_str=(“\x00”+用户名+“\x00”+密码).encode()
base64_str=base64.b64编码(base64_str)
authMsg=“AUTH PLAIN”.encode()+base64\u str+”\r\n.encode()
clientSocket.send(authMsg)
recv_auth=clientSocket.recv(1024)
打印(recv_auth.decode())
mailFrom=“邮件发件人:\r\n”
clientSocket.send(mailFrom.encode())
recv2=clientSocket.recv(1024)
recv2=recv2.decode()
打印(“从命令发送邮件后:+recv2”)
rcpto=“RCPT TO:\r\n”
clientSocket.send(rcptTo.encode())
recv3=clientSocket.recv(1024)
recv3=recv3.decode()
打印(“在RCPT到命令:+recv3之后)
data=“data\r\n”
clientSocket.send(data.encode())
recv4=clientSocket.recv(1024)
recv4=recv4.decode()
打印(“在数据命令之后:+recv4)
subject=“subject:测试我的客户端\r\n\r\n”
clientSocket.send(subject.encode())
日期=时间.strftime(“%a,%d%b%Y%H:%M:%S+0000”,time.gmtime())
日期=日期+“\r\n\r\n”
clientSocket.send(date.encode())
clientSocket.send(msg.encode())
clientSocket.send(endmsg.encode())
recv_msg=clientSocket.recv(1024)
打印(“发送消息正文后的响应:“+recv_msg.decode())
quit=“退出\r\n”
clientSocket.send(quit.encode())
recv5=clientSocket.recv(1024)
打印(recv5.decode())
clientSocket.close()

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

您可能需要启用IMAP才能使用smtp.gmail.com。我就是这么做的,效果非常好。您必须使用端口587或465。要启用IMAP,请单击gmail帐户中的gear图标,然后单击Forwardi