用imap/smtp在win10命令行中收发邮件

计网知识的小实践

1.首先打开win10的telnet服务

在这里插入图片描述

2.打开邮箱(qq)的SMTP服务

获得授权码后记下来,待会输入的密码填这个
在这里插入图片描述

3.打开win10的控制台(或者PowerShell)

4.输入命令(发邮件)

telnet smtp.qq.com 25

在这里插入图片描述

helo smtp

算是建立TCP连接
在这里插入图片描述
接着登录

auth login

输入用户名:base64转码后的用户名(注意指@前的部分)
输入密码:base64转码后的密码

base在线加密

小提示:在命令行内用鼠标右键粘贴

在这里插入图片描述
到这里就登录成功了

设置发送方邮箱:mail from: yourEmail@qq.com
设置收件方邮箱:rcpt to: recipientsEmail@qq.com
标识传数据:date
邮件:
from:发件人(可不填)
to:收件人(可不填)
subject:主题
空一行开始输入正文,用单独一行的 . 结束

在这里插入图片描述
在命令行中输入错误是改不了的,发过去就是错的了,所以我这里输错了几次。。。
在这里插入图片描述
这时就在目标邮箱中收到了邮件,在qq邮箱的已发送中也可找到。

5.简易python版

from socket import *
import base64

# Mail content
subject = "I love computer networks!"
contenttype = "text/plain"
msg = "I love computer networks!"
endmsg = "\r\n.\r\n"

# Choose a mail server (e.g. Google mail server) and call it mailserver 
mailserver = "smtp.163.com"

# Sender and reciever
fromaddress = "******@163.com"
toaddress = "******@qq.com"

# Auth information (Encode with base64)
username = base64.b64encode(fromaddress.encode()).decode()
password = base64.b64encode("******".encode()).decode()

# 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.')

# Auth
clientSocket.sendall('AUTH LOGIN\r\n'.encode())
recv = clientSocket.recv(1024).decode()
print(recv)
if (recv[:3] != '334'):
	print('334 reply not received from server')

clientSocket.sendall((username + '\r\n').encode())
recv = clientSocket.recv(1024).decode()
print(recv)
if (recv[:3] != '334'):
	print('334 reply not received from server')

clientSocket.sendall((password + '\r\n').encode())
recv = clientSocket.recv(1024).decode()
print(recv)
if (recv[:3] != '235'):
	print('235 reply not received from server')

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

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

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

# Send message data.
message = 'from:' + fromaddress + '\r\n'
message += 'to:' + toaddress + '\r\n'
message += 'subject:' + subject + '\r\n'
message += 'Content-Type:' + contenttype + '\t\n'
message += '\r\n' + msg
clientSocket.sendall(message.encode())

# Message ends with a single period.
clientSocket.sendall(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.sendall('QUIT\r\n'.encode())

# Close connection
clientSocket.close()

详情可看github

6.IMAP(收邮件)/pop3

telnet imap.qq.com 143

登录邮箱

a01 login username password

password用授权码

在这里插入图片描述

  • 列出所有信箱

a02 list “” *

  • 列出inbox信箱中的信息

a03 select inbox

其中184 EXISTS表示邮件总数但是比我在qq邮箱中只显示118篇,RECENT前面的数字“0”表示新邮件数目(就是未读邮件)。

  • 查看邮箱内容(信头)

a4 fetch 3 body[header]

然后就是一堆看不懂的文字
在这里插入图片描述
根据其中的时间可以在邮箱中找到
在这里插入图片描述

  • 请求信件的内容

a5 fetch 3 body[text]

接下来还是一堆码
在这里插入图片描述

  • 退出邮箱

a06 logout

在这里插入图片描述
更详细步骤

Telnet 安全隐患

虽然Telnet较为简单实用也很方便,但是在格外注重安全的现代网络技术中,Telnet并不被重用。原因在于Telnet是一个明文传送协议,它将用户的所有内容,包括用户名和密码都明文在互联网上传送,具有一定的安全隐患,因此许多服务器都会选择禁用Telnet服务。如果我们要使用Telnet的远程登录,使用前应在远端服务器上检查并设置允许Telnet服务的功能。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值