AI智能
改变未来

使用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了。

#!/bin/bashuser=$1pass=$2to=$3subject=$4data=$5username=$(echo -n $user | base64)password=$(echo -n $pass | base64)expect <<EOFspawn telnet smtp.163.com 25expect \"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 $datasend \"\\n.\\n\"expect \"250 Mail OK*\"send \"QUIT\\n\"expect EOFEOF

总结

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

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 使用shell发送邮件,方便快捷