欲买桂花同载酒,荒泷天下第一斗。|

janbar

园龄:4年6个月 粉丝:29 关注:10

2020-12-25 20:03 阅读 696 评论 0 推荐

使用shell发送邮件,方便快捷

前言

很多时候我们需要发送邮件,比如定时任务,比如邮件验证码等等。
各大编程语言都可以实现发送邮件功能,但还是太麻烦了,所以通过tcpdump抓包发现smtp发送邮件原理还是很简单嘛。
所以就想着能不能通过shell搞定,这样在Linux平台下就很通用,不必准备各种安装环境啥的。

鉴赏代码

该脚本需要安装sudo apt-get install expect telnet这两个工具,一个负责tcp连接到smtp服务器,一个负责收发指令。
执行./mail.sh xxx@163.com password yyy@qq.com sendMsg 123456命令即可发送一封邮件。
需要注意的是现在各大邮件服务器发送邮件的密码是授权码,而不是登录邮箱密码。
可以试着使用编程语言发送复杂邮件,通过tcpdump抓包分析发送邮件的具体机制,自行模拟一下下就ok了。

copy
#!/bin/bash user=$1 pass=$2 to=$3 subject=$4 data=$5 username=$(echo -n $user | base64) password=$(echo -n $pass | base64) expect <<EOF spawn telnet smtp.163.com 25 expect "220 163.com*" send "EHLO localhost\n" expect "250 8BITMIME" send "AUTH LOGIN\n" expect "334 dXNlcm5hbWU6" send "$username\n" expect "334 UGFzc3dvcmQ6" send "$password\n" expect "235 Authentication successful" send "MAIL FROM:<$user> BODY=8BITMIME\n" expect "250 Mail OK" send "RCPT TO: <$to>\n" expect "250 Mail OK" send "DATA\n" expect "354 End data with <CR><LF>.<CR><LF>" send "Mime-Version: 1.0\n" send "From: <$user>\n" send "To: $to\n" send "Subject: $subject\n" send "Content-Type: text/plain; charset=UTF-8\n" send "Content-Transfer-Encoding: quoted-printable\n\n" send $data send "\n.\n" expect "250 Mail OK*" send "QUIT\n" expect EOF EOF

总结

该脚本解决了我的发送邮件验证码的小需求,以前都是通过编程语言去实现,有些有依赖,各种准备环境也麻烦。
而使用上述脚本可以灵活的满足各种需求,需要改动时直接修改shell脚本就ok了。妈妈再也不用担心我发邮件麻烦了。

posted @   janbar  阅读(696)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~

FAVOURITE

点击右上角即可分享
微信分享提示
*✧⁺˚⁺ପ(๑・ω・)੭ु⁾⁾ 好好学习天天向上
进入亮色模式
进入亮色模式

FAVOURITE