使用shell发送邮件,方便快捷
2024-09-06 02:20:06
前言
很多时候我们需要发送邮件,比如定时任务,比如邮件验证码等等。
各大编程语言都可以实现发送邮件功能,但还是太麻烦了,所以通过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/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了。妈妈再也不用担心我发邮件麻烦了。
最新文章
- 如何正确的使用json?如何在.Net中使用json?
- css元素排列
- InfluxDB学习之InfluxDB的HTTP API写入操作
- August 26th 2016 Week 35th Friday
- CE5 中断
- JAVA基础学习day23--GUI基础
- Group Shifted Strings
- java static
- thinkphp中SQLSTATE[42S02]: Base table or view not found: 1146 Table错误解决方法
- Android 一步步教你从ActionBar迁移到ToolBar
- PHP面向对象编程
- iOS内存管理系列之一:对象所有权与引用计数
- js页面加载进度条
- HDU 4121 Xiangqi
- crawler_如何从页面获取新浪cookie
- Resin4安装配置
- C语言之linux内核可变参实现printf,sprintf
- 如何在.Net Core调用NodeJs
- 如何用git上传代码到github详细步骤
- 解析url成对象形式