当前位置: 首页 > article >正文

计网-命令行实现收发邮件

网易邮箱开启smtp/pop3服务

不建议使用QQ邮箱,目前已经不支持无加密的连接(测试日期2024.11.24)

直接在设置里,如下图,开启即可。开启需要短信验证。

开启之后会获得授权码。

开启telnet服务 

在控制面板的程序->开启或关闭Windows功能中找到Telnet客户端,勾选。

命令行实现收发邮件

1.命令行中键入如下命令,连接QQ邮箱的发送邮件服务器。

telnet smtp.163.com 25

输入之后进入如下状态

2.输入如下命令,用以验证是否联通和表明身份(网易邮箱必须输入)

helo smtp

如同表示正常连通。 

3.登录邮箱

输入 auth login,出现 334 加字符串,此时输入完整邮箱地址的编码,按下回车,再输入授权码的 64 位编码,按下回车,出现登陆成功的提示。
base64编码网站 : Base64 编码/解码 - 锤子在线工具 (toolhelper.cn)

auth login
#base64 encode过的账号
#base64 encode过的授权码

 

4. 发送邮件

注意: 一定要顺序无误输入!!!
①输入发件人邮箱

mail from:<xxx@163.com>

②输入收件人邮箱

rcpt to:<xxx@163.com>


③输入data进入内容(包括主题)的编写

data

subject:Test20230611
注意,此刻要回车两次,空一行。

输入邮件正文

HelloWorld

.

以空一行和一个点( . ) 结束正文编辑。

④退出

quit

总结

open smtp.163.com 25
helo 163.com
auth login
邮箱base64编码
(授权码的base64编码)
mail from:<xxx@163.com>
rcpt to:<xxx@163.com>
data
Subject:Test2022

\n

\n

hello wolrd!

.

因为我发现如果你多次输错命令,或者一段时间没有交互,连接会断开,又要从头开始,烦人的很,于是就写了一个脚本。 

自动化脚本

import telnetlib
import base64
import time

# 设置SMTP服务器和端口
host = 'smtp.163.com'
port = 25

# 创建Telnet连接
tn = telnetlib.Telnet(host, port)
# print("Sending command:",'telnet smtp.163.com')
# 读取服务器欢迎信息
welcome_message = tn.read_until(b"\n")
print('Server Response:'+welcome_message.decode('utf-8'))

# 发送 HELO 命令
tn.write(b"helo smtp\r\n")
print("Sending command:"+'helo smtp')
response = tn.read_until(b"\n")
print('HELO Response:'+response.decode('utf-8'))

# 发送 AUTH LOGIN 命令
tn.write(b"auth login\r\n")
# print("Sending command:"+'auth login')
response = tn.read_until(b"\n")
print('AUTH LOGIN Response:'+response.decode('utf-8'))

# 输入用户名(Base64 编码)
username = ''  # 填入你的用户名
encoded_username = base64.b64encode(username.encode()).decode('utf-8')
tn.write(encoded_username.encode() + b"\r\n")
response = tn.read_until(b"\n")
print('Username Response:'+response.decode('utf-8'))

# 输入密码(Base64 编码)
password = ''  # 填入你的密码
encoded_password = base64.b64encode(password.encode()).decode('utf-8')
tn.write(encoded_password.encode() + b"\r\n")
response = tn.read_until(b"\n")
print('Password Response:'+response.decode('utf-8'))


### 发送邮件
#邮件内容
sender = ''  # 发件人邮箱
receiver = ''  # 收件人邮箱
subject = 'Test Email'  # 邮件主题
body = 'Hello, this is a test email sent via Python.'

# 命令行发送

# 发送 MAIL FROM 命令
mail_from_command = f"mail from:<{sender}>\r\n".encode('utf-8')
tn.write(mail_from_command)
response = tn.read_until(b"\n")
print("MAIL FROM Response: ", response.decode('utf-8'))

# 发送 RCPT TO 命令
rcpt_to_command = f"RCPT TO:<{receiver}>\r\n".encode('utf-8')
tn.write(rcpt_to_command)
response = tn.read_until(b"\n")
print("RCPT TO Response: ", response.decode('utf-8'))

# 发送 DATA 命令
tn.write(b"data\r\n")
response = tn.read_until(b"\n")
print("DATA Response: ", response.decode('utf-8'))
tn.write(b'Subject:'+subject.encode())

# 发送邮件正文内容
email_body = f"Subject: {subject}\r\n\r\n{body}\r\n.\r\n".encode('utf-8')
tn.write(email_body)
response = tn.read_until(b"\n")
print("Email Body Response: ", response.decode('utf-8'))

# 发送 QUIT 命令
tn.write(b"QUIT\r\n")
response = tn.read_until(b"\n")
print("QUIT Response: ", response.decode('utf-8'))

# 关闭连接
tn.close()


http://www.kler.cn/a/408465.html

相关文章:

  • ReactPress(阮一峰推荐工具):一款基于Next.js的免费开源博客CMS系统
  • 【数据结构与算法】树和二叉树
  • 【操作系统】每日 3 题(三十五)
  • 实验十三 生态安全评价
  • Apple Vision Pro开发002-新建项目配置
  • 常见LLM大模型概览与详解
  • 【算法】BFS解决最短路径问题
  • Python脚本消费多个Kafka topic
  • WebStorm 2024.3/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理
  • Spring Boot OA管理系统:提升企业运营效率
  • 【Stable Diffusion】 超大尺寸绘制、分区控制,详解Tiled Diffusion VAE插件功能
  • 人工智能大趋势下软件开发的未来
  • 【论文复现】BERT模型解读与简单任务实现
  • RabbitMQ3:Java客户端快速入门
  • MariaDB面试题及参考答案
  • 【OpenGL】GLFW环境配置 + 扩展GLFW使其可以成为MFC子窗口
  • C0033.在Ubuntu中配置clion的环境
  • 数据集-目标检测系列- 安全背心 检测数据集 safety_vests >> DataBall
  • docker desktop上下载的镜像传到虚拟机上使用
  • Python编程整理汇总(基础汇总版)
  • sed使用扩展正则表达式时, -i 要写在 -r 或 -E 的后面
  • Window11系统下修改Anaconda3默认安装虚拟环境在C盘问题
  • C++设计模式——Singleton单例模式
  • Flask服务封装+Docker服务部署
  • Android OpenGL ES详解——Renderer接口介绍
  • 12-表的约束