本文转载自:http://blog.csdn.net/vilicwh/article/details/46426267
自己学习或者工作中,遇到的一些问题,第一次文字记录,希望对人对己,都是一种帮助。
文章出发点: 需要在linux环境,做某些自动化测试工作,最终将测试结果,自动mail至同事们,这样省时方便,又有测试记录。
无奈自己才疏学浅,刚开始遇到这个问题,也不清楚改实现这个功能,只是知道应该有现成的工具mail,mailx等等,可以实现发送mail的功能;
但参考网上种种文章,说的都是乱七八糟的,怎么对这些工具进行配置也不知道,后搜到到可以使用telnet来完成邮件发送功能,
只需知道公司内服的smtp服务器地址及相应端口即可,简单方便,也无需配置,正好也符合自身的需求,故分享如下:
#!/bin/bash
#
#完成功能:
# 1.自动测试将结果重定向至log,
# 2.将最终测试LOG上传至FTP保存,
# 3.自动mail通知人员,
#
#定义LOG FTP的地址/账户/密码
LOGFTP=`172.0.0.1`
LOG_USER="test"
LOG_PASSWD="test"
autoTest()
{
local s_DATE=`date +%Y-%m-%d`
local s_time=`date +%Y%m%d_%H%M%S`
logname="${s_time}_test.log"
自定义测试过程 > /home/testlog/${s_DATE}/$logname
DATE=${s_DATE}
}
#当初验证公司内部,无需身份认证,如若需要,可参考网上,增加base64身份验证即可
sendMail()
{
#定义了邮件发送者姓名,mail主题,smtp服务器的地址和端口
_fromPerson="xxx@xxxx.com.cn"
_subject="Auto-Test-Result"
_smptServer=172.0.0.2
_smptPort=25
(echo "EHLO localhost"
sleep 2
echo "MAIL FROM: ${_fromPerson}"
sleep 2
#使用shift用法,mail发送多位人员
list=$@
until [ $# -eq 0 ];do
echo "RCPT TO: $1"
sleep 2
shift
done
echo "DATA"
echo "from:${_fromPerson}"
echo "subject:${_subject}"
for i in $list;do
echo "to: $i"
sleep 2
done
echo ""
echo "Dear all,"
echo "The auto-test result as below:"
echo ""
cat $logname
echo ""
echo "ftp log path: ftp://TestLog/${LOGPATH}/$DATE/$logname"
echo ""
echo .
sleep 2
echo "QUIT") | telnet ${_smptServer} {_smptPort}
}
echo "auto testing..."
autoTest
//自动上传测试结果至FTP,
//按年月日自动建立ftp文件夹
//按时分秒命名的LOG存放至相应文件夹(保证LOG唯一性 )
ftp -n 2>1 1>& /dev/null << EOF
open $LOGFTP
user ${LOG_USER} ${LOG_PASSWD}
ascii
prompt
mkdir TestLog
cd TestLog
mkdir $DATE
以上,只是基本完成功能,可以根据自己的需要来更改,此外上传ftp和sendmail时候,都将标准错误和标准输出,重定向至/dev/null;
毕竟我不想在我去拿机器的时候,看到满屏幕的动作。