美文网首页
计算机网络-套接字编程作业(3)-邮件客户端

计算机网络-套接字编程作业(3)-邮件客户端

作者: 天很清 | 来源:发表于2018-08-03 18:46 被阅读0次

背景知识

1)梳理逻辑(摘自SMTP的连接和发送过程):
(a)建立TCP连接(使用Socket)
(b)客户端发送HELO/EHLO命令以标识发件人自己的身份, 接受 服务器端响应;
(c)客户端发送AUTH LOGIN登录请求,接着发送用户名和密码;
(d)客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;
(e)协商结束,发送邮件,用命令DATA发送
(f)以.表示结束输入内容一起发送出去
(g)结束此次发送,用QUIT命令退出

2)每个命令都以\r\n结尾,特定格式命令:
HELO:HELO <domain> <CRLF>
RCPT TO:<forward-path> <CRLF>——<forward-path>
3)选择邮箱服务器
gmail还要翻墙,弃用(¬ 。¬)
我是使用网易邮箱作为邮箱服务器,公司邮箱作为目标账户。
网易邮箱需要提前进行一些设置,开启STMP功能,方法如下:

  1. 登录邮箱 -- 设置 -- 进入POP3/SMTP/IMAP界面,可以看最下面提示有SMTP服务器: smtp.163.com
  2. 勾选 IMAP/SMTP服务,会弹出提示设置授权码
  3. 进入设置授权码,开启服务,这里需要手机号码验证(如果你和我一样,关联的手机号码已经不知道丢哪里了,可以换一个绑定当前手机的网易邮箱,(^ ^)),总之,设置好授权码后,这个授权码就是代码里的password

下面是最终代码展示:

from socket import *
import base64
msg = 'I love computer networks!'
endmsg = '\r\n.\r\n'
# 邮件服务器,端口 25 
mailserver = 'smtp.163.com'

fromaddr = 'z****@163.com' # 填写自己的邮箱
toaddr = 'z***@***.com' # 填写目标邮箱
username = 'z****@163.com'
password = 'a*****6' # 网易邮箱授权码

# Create socket called clientSocket and establish a TCP connection with mailserver
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((mailserver, 25))
recv = clientSocket.recv(1024).decode()
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(heloCommand.encode())
recv1 = clientSocket.recv(1024).decode()
print(recv1)
if recv1[:3] != '250':
    print('250 reply not received from server.')

# send AUTH LOGIN command
base64_str = ('\x00' + username + '\x00' + password).encode()
base64_str = base64.b64encode(base64_str)
authCommand = 'AUTH PLAIN '.encode() + base64_str + '\r\n'.encode()
clientSocket.send(authCommand)
recv_auth = clientSocket.recv(1024)
print(recv_auth.decode())

# Send MAIL FROM command and print server response.
mailCommand = 'MAIL FROM: <' + fromaddr + '>\r\n'
clientSocket.send(mailCommand.encode())
recv_from = clientSocket.recv(1024).decode()
print(recv_from)
if recv_from[:3] != '250':
    print('250 reply not received from server.')

# Send RCPT TO command and print server response.
rcptCommand = 'RCPT TO: <' + toaddr + '>\r\n'
clientSocket.send(rcptCommand.encode())
recv_rcpt = clientSocket.recv(1024).decode()
print(recv_rcpt)
if recv_rcpt[:3] != '250':
    print('250 reply not received from server.')

# Send DATA command and print server response.
clientSocket.send('DATA\r\n'.encode())
recv_data = clientSocket.recv(1024).decode()
print(recv_data)
if (recv_data[:3] != '354'):
    print('354 reply not received from server')

# Send message data.
send_msg = 'from: ' + fromaddr + '\r\n'
send_msg += 'to: ' + toaddr + '\r\n'
send_msg += 'subject: ' + msg + '\r\n'
send_msg += 'content-type: text/plain\t\n'
send_msg += '\r\n' + msg
clientSocket.send(send_msg.encode())

# Message ends with a single period.
clientSocket.send(endmsg.encode())
recv = clientSocket.recv(1024).decode()
print(recv)
if (recv[:3] != '250'):
    print('250 reply not received from server')

# Send QUIT command and get server response.
clientSocket.send('QUIT\r\n'.encode())

# close
clientSocket.close()

结果:


bb.png

相关文章

  • 计算机网络-套接字编程作业(3)-邮件客户端

    背景知识 了解 SMTP协议详解以及工作过程重点了解“SMTP的连接和发送过程”和“SMTP常用的命令” copy...

  • 2018-09-12 Day18 网络基础

    01.socket编程 socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字。套接字编程:...

  • 2018-09-12 day18-网络基础

    总结 一.socket编程 socket又叫套接字,就是进行数据通信两端,分为服务端套接字和客户端套接字套接字编程...

  • day18-网络基础总结

    一、scoket编程: socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字套接字编程:自...

  • 18总 网络基础

    1.socket编程: socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字套接字编程:自...

  • 2018-09-12 day18网络基础总结

    一socket编程 socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字套接字编程:自己写...

  • 2018-09-12-总结

    一、socket编程 socket又叫套接字,就是进行数据通信的两端。分为服务端套接字和客户端套接字套接字编程:自...

  • 2018-09-12 Day18-socket编程

    socket又叫套接字,就是进行数据通信两端。分为服务器套接字和客户端套接字。套接字编程:自己写服务器或者客户端,...

  • 2018-09-12 day18网络编程

    1.socket套接字 socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字 套接字编程:...

  • windows网络编程流程

    windows网络编程的流程: 客户端: 1 声明变量 2 初始化windows套接字库 3 建立一个套接字 4 ...

网友评论

      本文标题:计算机网络-套接字编程作业(3)-邮件客户端

      本文链接:https://www.haomeiwen.com/subject/dggsvftx.html