使用python socket实现smtp协议,出现了神奇的问题

xuzheng00 2017-12-31 02:05:36
问题在于虚线之间,用户信息验证不通过,我仔细检查过协议里登录的格式,没有发现问题。我163邮箱已经开启了smtp服务,密码也用的是服务密码。由于只是实验用的邮箱,服务密码没有屏蔽,大佬可以拿去试一下= =难道现在smtp邮件已经改了发送方式吗?= =
from socket import *           
import base64

msg = "\r\n I Love Computer Networks!" #Declarations
endmsg="\r\n.\r\n"
mailfrom = "MAIL FROM:<l847238926@163.com>\r\n"
rcptto="RCPT TO:<754845950@qq.com>\r\n"
data = "DATA\r\n"
quitmsg="QUIT\r\n"

#Choose a mail server (e.g. Google mail server) and call it mailserver
mailserver="smtp.163.com" #Use the local Host as SMTP Server
mailPort=25 #Specify Port For Local SMTP
connectaddress=(mailserver,mailPort)

#Create socket called clientsocket and establish a TCP connection with mailserver
clientSocket=socket(AF_INET,SOCK_STREAM) #Assign IP address and port number
clientSocket.connect(connectaddress) #Connect to Local SMTP
recv=clientSocket.recv(1024)
print(recv)
if recv[:3].decode()!='220': #Print Error Clause
print("220 reply not received from server")

#Send HELO command and print server response.
heloCommand="HELO Alice\r\n"
clientSocket.send(bytes(heloCommand.encode()))
recv1=clientSocket.recv(1024)
print(recv1.decode())
if recv1.decode()[:3]!="250":
print("250 reply not received from server.")

print('-----------------------------------')

loginini = b'AUTH LOGIN\r\n'
userCommand = base64.b64encode(b'18390242095@163.com\r\n')
passwordCommand = base64.b64encode(b'xudoudou3661615\r\n')
clientSocket.send(loginini)
recv2 = clientSocket.recv(1024).decode('utf-8')
print('222+ ',recv2)

clientSocket.send(userCommand)
recv3 = clientSocket.recv(1024).decode('utf-8')
print('333+ ',recv3)

clientSocket.send(passwordCommand)
recv4 = clientSocket.recv(1024).decode('utf-8')
print('444+ ',recv4)
print('-----------------------------------')
#Send MAIL FROM command and print server response.
clientSocket.send(bytes(mailfrom.encode())) #send mail, had to convert to bytes
check=clientSocket.recv(1024)
print(check) #print confirmation of working messages

#Send RCPT TO command and print server response.
clientSocket.send(bytes(rcptto.encode())) #recieve, had to convert to bytes
check1=clientSocket.recv(1024)
print(check1) #print confirmation of working messages

#Send DATA command and print server response.
clientSocket.send(bytes(data.encode())) #DATA, had to convert to bytes
check2=clientSocket.recv(1024)
print(check2) #print confirmation of working messages

#Message ends with a single period.
clientSocket.send(bytes((mailfrom+msg+endmsg).encode())) #Concatinate bits for message
check3=clientSocket.recv(1024)
print(check3) #print confirmation of working messages

#Send QUIT command and get server response.
clientSocket.send(bytes(quitmsg.encode())) #Quit the session
check4=clientSocket.recv(1024)
print(check4)
...全文
1134 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
王大凤 2018-06-17
  • 打赏
  • 举报
回复
其实上一个人说的是对的啊,但是因为bytes不能和str相加,所以先把bytes转成str再相加,发送的时候再userCommand.encode()就可以了。我这样之后就可以显示authentificaion successfully啦。

userCommand = base64.b64encode(b'18390242095@163.com').decode()+'\r\n'
passwordCommand = base64.b64encode(b'xudoudou3661615').decode()+'\r\n'
REDSENET 2018-03-18
  • 打赏
  • 举报
回复

userCommand = base64.b64encode(b'18390242095@163.com\r\n') 
passwordCommand = base64.b64encode(b'xudoudou3661615\r\n')
改成

userCommand = base64.b64encode(b'18390242095@163.com')+'\r\n'
passwordCommand = base64.b64encode(b'xudoudou3661615')+'\r\n'
应该就可以了
xuzheng00 2018-01-01
  • 打赏
  • 举报
回复
引用 4 楼 oyljerry的回复:
anti spam。看上去是你发送的邮件被服务器认为是垃圾邮件了
啊为什么会被认定为垃圾邮件?因为ip的原因?我这段代码运行到登录认证部分就卡住了,内容部分在登录部分下面,还没有运行到。我用python的smtplib模块发邮件可以成功发送
xuzheng00 2018-01-01
  • 打赏
  • 举报
回复
啊为什么会被认定为垃圾邮件?我这段代码运行到登录认证部分就卡住了,内容部分在登录部分下面,还没有运行到。我用python的smtplib模块发邮件可以成功发送
oyljerry 2018-01-01
  • 打赏
  • 举报
回复
anti spam。看上去是你发送的邮件被服务器认为是垃圾邮件了
xuzheng00 2017-12-31
  • 打赏
  • 举报
回复
xuzheng00 2017-12-31
  • 打赏
  • 举报
回复
终端: b'220 163.com Anti-spam GT for Coremail System (163com[20141201])\r\n' 250 OK ----------------------------------- 222+ 334 dXNlcm5hbWU6 会停在这里 单步调试发现会停在发送登录用户名时返回的信息那里
内容概要:本文围绕含软开断装置(SOP)的配电网在发生多线路故障情况下的故障重构问题展开研究,提出了一种基于Matlab代码实现的优化重构方法。通过引入SOP这一先进的电力电子设备,充分发挥其对有功和无功功率的灵活独立调节能力,实现对配电网潮流的精确控制。在多点故障发生后,该方法能够快速隔离故障区域,并通过重构网络拓扑,最大限度地恢复健全区域的供电,有效减少停电损失,从而显著提升供电可靠性和系统应对突发事件的韧性。研究建立了以最小化负荷削减量和开关操作次数为目标的混合整数非线性规划模型,并综合考虑了潮流平衡、节点电压、线路容量及辐射状运行等关键约束条件,采用先进的智能优化算法进行求解,并通过标准算例系统进行了Matlab仿真验证,证明了所提方法在恢复能力和运行经济性方面的优越性。; 适合人群:电气工程、电力系统自动化等相关专业的高校师生、科研人员以及从事电网规划、运行与调度的工程技术人员。; 使用场景及目标:①用于研究高比例分布式电源接入背景下,配电网在极端故障事件后的快速恢复与韧性提升策略;②为SOP等新型柔性互联装置的规划配置、运行控制及效益评估提供理论依据和技术支持;③作为电力系统优化、故障恢复算法、智能优化算法教学与科研的综合性案例参考。; 阅读建议:读者应具备一定的电力系统分析、优化建模和Matlab编程基础,建议结合提供的Matlab代码进行实践操作,深入理解故障重构模型的构建逻辑、求解流程及SOP的作用机理,并可根据不同的电网参数或故障场景对模型进行修改和扩展,以适应多样化的研究与应用需求。

37,737

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧