自动发送邮件脚本

  • Posted on
  • by

注:在使用下文提到的脚本的时候请将[email protected]替换成你所能接收到邮件的邮箱地址。

记得在学校的时候,有一次和老师讨论问题,有一些不明白的地方,他说,你可以编个程序验证一下。我差点没有晕过去。因为那时的我非常害怕编程。不过还好,有很多事情我们不需要编程就可以实现。

比如最近,我开始厌烦在桌子上面的两条电脑之间转来转去,于是我打算写一小段shell脚本,当linux/unix下面的工作完成的时候,系统自动发送一个邮件到windwos下面通知我。

在Linux和Unix下面发送邮件非常方便,如果只是要发送一个消息,那么需要的命令就更简单了,只不过不同的系统邮件服务器命令稍有不同。对于我,经常工作的电脑是HP的C8000工作站,它的系统是HP-UX,还有一台也是HP,安装的是redhat AS系统。

HP-UX的邮件程序需要在terminal下面输入:mail命令,然后进去写信,而redhat的邮件发送程序就比较方便,只要一条命令就可以指定主题、附件、内容:
echo "Content:The work is done" | mail -s "This is subject" [email protected]

下面这一段脚本就是通过某一个文件是否已经生成进行判断,如果生成了就发送通知邮件到指定邮箱。否则就每30秒钟检查一次,有完成的就发送通知邮件,有没有完成的就休眠后继续循环,一直到全部完成再退出。

#!/bin/csh 
set arrayA = ($*)
set i=1
set SysInfo = `uname`
set arrayB = ()
while ( $i <= $#arrayA )
	if ( -f ${arrayA[$i]}/result_data.txt) then
		if ($SysInfo == HP-UX ) then
mail [email protected] << !
Subject:'${arrayA[$i]} is finished'
'${arrayA[$i]} is finished'
.
!
		else
		echo "${arrayA[$i]} is finished" | mail -s "${arrayA[$i]} is finished" [email protected]
		endif
		echo "${arrayA[$i]} is finished, a mail is sent to mwang"
	else
		set arrayB = ( $arrayB $arrayA[$i] )
	endif
	
	if ( ( $i >= $#arrayA ) && $#arrayB) then
		set arrayA = ($arrayB)
		echo "$arrayA is under calculation, please wait. Now: " `date`
		set arrayB = ()
		set i = 0
		sleep 30
	endif
	@ i++

end