ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

自顶向下的计算机网络作业——邮件客户实验题

2021-10-06 19:58:41  阅读:173  来源: 互联网

标签:decode send 计算机网络 encode 自顶向下 邮件 print recv clientSocket



项目场景:

        需要写一个邮件客户的程序,使得该程序能与邮件服务器创建一个tcp连接,使用SMTP协议与邮件服务器交谈。

直接附上源码:
 

from socket import *
import base64

#与qq邮箱服务器建立tcp连接,并且打印服务器返回的220,表示连接成功
serverName = 'smtp.163.com'
serverPort = 25
clientSocket = socket(AF_INET,SOCK_STREAM)
clientSocket.connect((serverName,serverPort))
msg = "\r\n I love computer networks!"
endmsg = "\r\n.\r\n"
recv = clientSocket.recv(1024).decode()
print(recv)
if recv[:3] != '220':
    print('220 reply not received from server.')

#发送HELO命令,按照ASCII码的表示方法,每个报文以CRLF结束,CR表示回车,LF表示换行
heloCommand = 'HELO Alice\r\n'
clientSocket.send(heloCommand.encode())
recv1 = clientSocket.recv(1024).decode()
print(recv1)
if recv1[:3] != '250':
    print('250 reply not received from server.')

#以auth login方式登录,返回username的base64编码
login = 'AUTH LOGIN\r\n'
clientSocket.send(login.encode())
recv2 = clientSocket.recv(1024)
print('login:',recv2.decode())
#输入用户名
username=base64.b64encode(b'--发送方用户名--@163.com').decode() + '\r\n'
clientSocket.send(username.encode())
recv_username = clientSocket.recv(1024)
print('username:', recv_username.decode())
#输入授权码,此处授权码需要使用163邮箱开启
password=base64.b64encode(b'--发送方授权码--').decode() + '\r\n'
clientSocket.send(password.encode())
recv_password = clientSocket.recv(1024)
print('password: ', recv_password.decode())
#发送Mail From命令,指定是发送方
MailFROM = 'Mail From:<--发送方名称--@163.com>\r\n'
clientSocket.send(MailFROM.encode())
recv3 = clientSocket.recv(1024).decode()
print(recv3)
#发送RCPT TO,指定接收方
RCPT = 'RCPT TO:<--接收方的名称--@qq.com>\r\n'
clientSocket.send(RCPT.encode())
recv4 = clientSocket.recv(1024).decode()
print(recv4)
#发送DATA命令,表明发送的邮件
DATA = 'DATA\r\n'
clientSocket.send(DATA.encode())
recv5 = clientSocket.recv(1024).decode()
print(recv5)
#发送的邮件必须符合163邮箱的格式,不然会被当成垃圾邮件发送
string1 = 'Curry is the best basketball player in the world.'+'\r\n'
string2 = 'And Micheal is the best dancer in the world.'+'\r\n'
END = '.\r\n'
who = 'zsya0807@163.com'
from_ = who
to = ['2424948099@qq.com']
headers = [
    'From: %s' % from_,
    'To: %s' % ','.join(to),
    'Subject: send SMTP',
]

body = [
    string1,
    string2,
]
msg = '\r\n\r\n'.join(('\r\n'.join(headers), '\r\n'.join(body)))
clientSocket.send(msg.encode())
clientSocket.send(END.encode())
recv5 = clientSocket.recv(1024).decode()
print(recv5)
#发送QUIT命令,说明要退出
QUIT = "QUIT\r\n"
clientSocket.send(QUIT.encode())
recv6 = clientSocket.recv(1024).decode()
print(recv6)


问题描述:进行用户密码验证时出现错误

此处就算输入了正确的用户名和密码,依然会显示错误

password=base64.b64encode(b'asdf2389i23').decode() + '\r\n'
clientSocket.send(password.encode())
recv_password = clientSocket.recv(1024)
print('password: ', recv_password.decode())


原因分析:输入了自己的密码,没有输入验证码

163邮箱拒绝了第三方登录,因此屏蔽了这次验证



解决方案:

去163邮箱打开授权码

登录163邮箱,打开邮箱设置

在此处开去IMAP/SMTP服务以及POP3/SMTP服务,接下来验证后会受到此验证码,在第三方登录时不要输入自己的密码,输入此验证码 

标签:decode,send,计算机网络,encode,自顶向下,邮件,print,recv,clientSocket
来源: https://blog.csdn.net/MichealCurry1/article/details/120628463

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有