You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.2 KiB
67 lines
2.2 KiB
from socket import *
|
|
from base64 import *
|
|
|
|
mailfrom = "mail from:2@test.com\r\n"
|
|
rcptto = "rcpt to:1@test.com\r\n"
|
|
data = "data\r\n"
|
|
quitmsg = "quit\r\n"
|
|
|
|
msg = "\r\n I love computer networks!"
|
|
endmsg = "\r\n.\r\n"
|
|
#此处使用易邮邮件服务器软件搭建了一个内网邮件服务器
|
|
mailserver = '10.130.82.62'
|
|
mailport = 25
|
|
connectaddress = (mailserver, mailport)
|
|
# Create socket called clientSocket and establish a TCP connection with mailserver
|
|
clientSocket = socket(AF_INET, SOCK_STREAM)
|
|
clientSocket.connect(connectaddress)
|
|
|
|
recv = clientSocket.recv(1024)
|
|
print (recv)
|
|
if recv[:3] != '220':
|
|
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[:3] != '250':
|
|
print ('250 reply not received from server.')
|
|
|
|
#print('000000000000000')
|
|
#从命令和打印服务器响应发送邮件。
|
|
login = b'auth login\r\n'
|
|
clientSocket.send(login)
|
|
recv2 = clientSocket.recv(1024).decode('utf-8')
|
|
print ('222+',recv2)
|
|
|
|
userCommand = b64encode('2@test.com'.encode('utf-8'))
|
|
clientSocket.send((str(userCommand,encoding='utf-8')+'\r\n').encode())
|
|
recv3 = clientSocket.recv(1024).decode('utf-8')
|
|
print ('333+',recv3)
|
|
|
|
password = b64encode('2'.encode('utf-8'))
|
|
clientSocket.send((str(password,encoding='utf-8')+'\r\n').encode())
|
|
recv4 = clientSocket.recv(1024).decode('utf-8')
|
|
print ('444+',recv4)
|
|
|
|
#print('0000000000000000')
|
|
|
|
clientSocket.send(bytes(mailfrom.encode()))
|
|
check = clientSocket.recv(1024)
|
|
print(check)
|
|
clientSocket.send(bytes(rcptto.encode()))#将RCPT发送到命令和打印服务器响应。
|
|
check1 = clientSocket.recv(1024)
|
|
print(check1)
|
|
clientSocket.send(bytes(data.encode()))#发送数据命令和打印服务器响应。
|
|
check2 = clientSocket.recv(1024)
|
|
print(check2)
|
|
clientSocket.send(bytes((mailfrom+msg+endmsg).encode()))#发送消息数据。
|
|
check3 = clientSocket.recv(1024)
|
|
print(check3)
|
|
#发送退出命令并获得服务器响应。
|
|
clientSocket.send(bytes(quitmsg.encode()))
|
|
check4 = clientSocket.recv(1024)
|
|
print(check4)
|
|
clientSocket.close()
|