工作需要,想将一些内网的系统监控信息通过邮件定时发送到外网邮箱,sendmail配置搞不懂,msmtp可以发邮件正文却不能发附件,mutt听说可以但自己的系统装了半天没装成功,因此干脆自己整一个吧。
当然前提是内网有一台smtp服务器,不然谁帮你发邮件到外网。
下面是我写的脚本:
- #bin/sh
- filename=$1 #附件(参数传入)
- content=`base64 $filename` #附件base64编码
- mailsvr=test@mailsvr.com #邮件服务器域名
- IP=10.11.12.13 25 #邮件服务器IP 端口
- user=`base64 test` #发送邮件账号(base64编码)
- pwd=`base64 123456` #发送邮件口令(base64编码)
- rcpt=xx@qq.com #接收邮箱
- (
- sleep 1
- echo "helo $mailsvr" #跟服务器打招呼
- sleep 1
- echo "auth login" #登录认证
- sleep 1
- echo $user #输入账号口令
- echo $pwd
- sleep 1
- echo "mail from: $mailsvr" #发件人
- sleep 1
- echo "rcpt to: $rcpt" #收件人
- sleep 1
- echo "data" #数据输入开始
- sleep 1
- echo "subject:${filename} #邮件主题(这里用附件名)
- Hello xx! #邮件正文
- Content-type:multipart/mixed;Boundary="a" #附件声明
- --a
- Content-type:text/plain; charset="gb2312" #中文编码声明
- Content-Transfer-Encoding: base64 #附件编码声明
- Content-Disposition:Attachment;filename=\"${filename}\" #附件名
- $content #附件的内容
- --a
- .
- "
- sleep 1
- echo "quit"
- )| telnet $IP
注:利用管道模式,连接过程中要有一些停顿,因此加了一些sleep.
将脚本保存成mymail.sh,就可以用“mymail.sh 附件名”来发送附件,可以将系统日志等很方便的发送出去,加入crontab更可以实现自动发送。
完。
转载于:https://blog.51cto.com/junxin/1010843