手工发送邮件-SMTP协议
本文最后更新于:7 个月前
如何手工发送电子邮件?我也是忽然想玩一玩哈哈哈,有错误欢迎指正!
- 本文基于Ubuntu22.04制作,Windows可能需要去
控制面板 > 程序 > 程序与功能 > Windows功能
启用Telnet 客户端
才能继续, 详见这里,点我。 - 本文使用网易163邮箱进行操作,其他邮箱大同小异,遇到问题搜一下~
- 若有异常请查看后面的 “排错” 部分,有疏漏欢迎补充!
最好先去搜一下,这是最快的解决办法
登录邮件服务器
SMTP是一个相对简单的基于文本的协议。我们可以透过协议,指定了一条消息发送至一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。我们可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP主要使用TCP25端口。要为一个给定的域名决定一个SMTP服务器,需要使用DNS的MX记录。详见这里,点我。
首先连接到163的smtp服务器,我们使用25端口
1
telnet smtp.163.com 25
Trying 123.126.97.113…
Connected to smtp.163.com.
Escape character is ‘^]’.
220 163.com Anti-spam GT for Coremail System (163com[20141201])跟服务器打个招呼吧!(选择模式)
1
helo smtp.163.com
250 OK
现在我们来登录
1
auth login
334 dXNlcm5hbWU6
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,它并非加密数据,所以称为“编码”,详见这里,点我。
- 现在输入base64编码过的邮箱(去网上搜Base64工具/使用命令行编码)
得到类似下面这样的东西1
c2VuZGVyQDE2My5jb20=
334 UGFzc3dvcmQ6
163邮箱不支持直接使用密码登录,需要前往网页端邮箱 设置 > 通用设置 > POP3/SMTP/IMAP
中开启IMAP/POP3/SMTP服务,然后在下方 新增授权密码
处生成授权密码,使用授权密码登录
- 好耶!现在输入base64编码过的密码(令牌),同上,得到如下面这样
1
YXV0aG9yaXphdGlvbiBjb2Rl
235 Authentication successful
发送一个邮件
现在登录成功了!我们来尝试发送一个邮件,首先按照如下格式输入登录邮箱
1
mail from:<[email protected]>
250 Mail OK
我们再来输入目标邮箱
1
rcpt to:<test@elaina.me>
250 Mail OK
告诉服务器我们要开始输入内容了!
1
data
354 End data with
. 内容部分,Subject是主题
1
2
3Subject: test mail
Hi, test2
This is a test mail, you don't reply it.换行后再输入
1
.
并按 Enter 键发送邮件!
250 Mail OK queued as smtp4,…
我们成功地发送了一个邮件!
如果你还想发送图片之类的附件,你还需要了解 MIME
文件。
是不是感觉很简单?搭配上脚本就能实现强大的功能!
排错
421 Too many error commands
服务器嫌弃你了…错误太多…500 Error: bad syntax
命令不可识别,回去检查,说服务器能听懂的话!(实在解决不了,去搜一下试试?Windows可能会出现一些奇怪的问题)502 Error: command not implemented
同上…回退上一步试试?503 Error: send HELO/EHLO first
你不跟人打招呼,他会理你嘛…(选择模式,具体差别自己查~)535 Error: authentication failed
账号密码(令牌)错了,去看看你输入的是不是Base64编码后的字符串?别告诉我你把账号输错了(笑)550 Invalid User:...
你要找的这个邮箱不存在,核对一下邮箱?553 Mail from must equal authorized user
这里填写的要与你登录的邮箱相同(除非是别名)Connection closed by foreign host.
失联了,可能是你上一步输入错误或者是太长时间无操作导致的?
如果还有其他问题,请先自行搜索,我是实在想不出来了(捂脸)