使用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/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了。妈妈再也不用担心我发邮件麻烦了。
使用shell发送邮件,方便快捷的更多相关文章
- 通过shell发送邮件
安装mailx CentOS 7自带有mailx软件包, 有/usr/bin/mail命令, 配置文件为/etc/mail.rc. 如果没有软件包, 可以安装 CentOS/Fedora yum in ...
- linux shell发送邮件
我的系统环境: [root@NPS-JK ~]# cat /etc/issue Red Hat Enterprise Linux Server release 6.1 (Santiago) Kerne ...
- shell 快速移动,快捷操作
ctr+h 往后删除一字符 ctr+d 往前删除一字符 ctr+b 光标往前 ctr+f 往后ctr+u 删除到最前 ctr+K删除到最后ctr+a 光标到最前 ctr+e 光标到最后ctr+p 往上 ...
- 再谈用java实现Smtp发送邮件之Socket编程
很多其它内容欢迎訪问个人站点 http://icodeyou.com 前几天利用Socket实现了用java语言搭建webserver,全程下来应该会对Socket这个东西已经使用的很熟悉了.尽管 ...
- centos7操作记录
/root/wang/shell 存放练习的shell文件,快捷命令wsh(alias wsh='cd /root/wang/shell') /root/wang/OS_bak 存放系统备份文件 ...
- 【Linux】结合Python 简易实现监控公司网站,邮件发送异常
背景 由于一些原因,博主负责测试的网站的服务器切换到了香港,切换后出现了多次访问超时的情况 于是主动请缨写一个自动监测的脚本,本来准备完全使用shell来写,后来发现shell发送邮件只能在测试机之间 ...
- PyCharm Django项目开发的调试方法
下面介绍两种PyCharm Django项目开发的调试方法: 方法一: 1. 使用PyCharm 自带的django项目Debug工具, 当然前提条件是django项目环境已经搭建好了. 2. 在代码 ...
- <转>统计源代码行数的一些实现方法
这个问题的思考其实对于某一种语言而言,基本都能实现,只是简单和复杂而已.而此次我讨论就是只是在linux下面使用了shell和c对源代码进行行 数的讨论.本打算是实现一个python版本的,由于pyt ...
- ubuntu18+virtualenv配置
思路: 1.两条命令安装,加sudo是安装在/usr/local/bin/virtualenv路径下,不加就安装在home/.local下.注意,后面bashrc里,要设置的路径和这个有关系,所以要区 ...
随机推荐
- Gin + 七牛云对象存储
配置七牛云存储 创建存储空间 拿到密钥 安装七牛云对象存储SDK 推荐go.mod安装 // 将下面地址复制到go.mod,然后执行go mod download github.com/qiniu/a ...
- rocketmq的吞吐量为什么小于kafka
转载: https://www.jianshu.com/p/c474ca9f9430
- 【MySQL/C#/.NET】VS2010报错--“.Net Framework Data Provider。可能没有安装。”
前言 公司行业是金融软件,之前用的都是Oracle数据库.Oracle数据库用一个词来形容:大而全.MySQL的话,可能是因为开源.便宜,现在越来越主流. 我们也支持MySQL数据库,不过平时不用.最 ...
- 冰河教你一次性成功安装K8S集群(基于一主两从模式)
写在前面 研究K8S有一段时间了,最开始学习K8S时,根据网上的教程安装K8S环境总是报错.所以,我就改变了学习策略,先不搞环境搭建了.先通过官网学习了K8S的整体架构,底层原理,又硬啃了一遍K8S源 ...
- 2016 ACM/ICPC ECNA Regional I.Waif Until Dark(最大流)
这是一道ECNA的16年题,问有n个小朋友,m个玩具,不同孩子有不同喜好的玩具,每个玩具可能属于一个类别,同一类别的玩具最多只能用一定次数,问最大匹配 这个就很裸的二分图,掏出dinic板子,首先最后 ...
- PyQt(Python+Qt)学习随笔:QToolBox工具箱的currentItemName和tabSpacing属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在Designer中,toolBox的属性中有currentItemName和tabSpacing属 ...
- 第13.3节 图形界面开发tkinter
一. 引言 老猿最开始是准备就tkinter单独开一个章节,但学了一段时间tkinter,最后放弃了,前一阵子还准备干脆不介绍相关的内容.主要原因有三个,一是tkinter没有界面设计的工具,所有界面 ...
- anaconda 配置虚拟环境
工作时有时候会遇到不同版本的问题,比如深度学习tensorflow 1.14版本 和 2.0版本,或者cpu版本和gpu版本,那么这个时候建立虚拟环境就很方便了 anaconda命令行下 1) act ...
- .NET Core集成Seq+Serilog实现日志中心
.NET Core集成Seq+Serilog实现日志中心 一,下载安装Seq https://datalust.co/download/all,版本很多,大家随便挑,开发版个人免费,商业版多账号需要收 ...
- Scrum 冲刺第二天
一.每日站立式会议 1.会议内容 1)进行每日工作汇报 张博愉: 昨天已完成的工作:制定测试计划.博客编写 今日工作计划:测试mappe里的接口 工作中遇到的困难:对测试接触得较少 张润柏: 昨天已完 ...