UNIX/Linux:使用mail命令进行Shell脚本编写
时间:2020-01-09 10:42:05 来源:igfitidea点击:
如何从包含文件附件的Shell脚本发送电子邮件?
最简单的解决方案是从shell脚本中通过mail命令发送电子邮件,如下所示。
要向一个或者多个人发送消息,可以使用参数(这些参数是要向其发送消息的人的名字)来调用邮件:
mail -s 'subject' username mail -s 'subject' [email protected] mail -s 'Duplicate ip detected' -c [email protected] [email protected] </var/log/ipscan.log mail -s 'yum update failed' -c [email protected] -b [email protected] </var/log/yum.log mail -s 'Disk failure' [email protected] < /tmp/message
其中:
-s word1 word2
:在命令行上指定主题。-c
:将复本发送到用户列表。-b
:发送盲目抄送至列表。 List应该是逗号分隔的名称列表。> /path/to/file
:使用此/path/to/file读取电子邮件正文。
方法1:发送文件附件
mail命令将不起作用。
您需要使用uuencode命令发送一个名为reports.tar.gz的二进制文件:
uuencode reports.tar.gz reports.tar.gz | mail -s "Weekly Reports for $(date)" [email protected]
您可以使用相同的格式通过电子邮件发送镜像或者任何文件:
uuencode file1.png file1.png | mail -s "Funny" [email protected]
方法2:使用mutt命令进行文件附件
mutt是MUA(邮件用户代理),是基于文本会话的电子邮件客户端。
它可用于在unix之类的操作系统下阅读电子邮件,包括支持彩色终端,MIME(附件)和线程排序模式。
您可以按以下方式使用mutt命令发送电子邮件附件:
mutt -s "Filewall logs" -a /tmp/fw.logs.gz [email protected] < /tmp/emailmessage.txt
技巧1:空邮件正文
要将空行用作邮件正文,请使用特殊文件/dev/null或者echo命令,如下所示:
echo | mutt -s 'Subject' -a attachment.tar.gz [email protected] mutt -s 'Subject' -a attachment.tar.gz [email protected] </dev/null mail -s "Disk failed @ $(hostname)" [email protected] </dev/null
技巧2:使用"Here"文档编写邮件正文
此处的文档(重定向)告诉shell程序从当前源(HERE)读取输入,直到看到仅包含单词(HERE)的行:
#!/bin/bash ... .... mail -s "Disk Failed" [email protected]<<EOF NAS server [ mounted at $(hostname) ] is running out of disk space!!! Current allocation ${_SPACE} @ $(date) EOF ... ..
技巧3:根据条件发送邮件
使用if else if和命令的退出状态,如下所示:
[ $(grep -c -i "hardware error" /var/log/mcelog) -gt 0 ] && { echo "Hardware errors found on $(hostname) @ $(date). See log file for the details /var/log/mcelog." | mail -s "HW Errors" [email protected] ;}
或者
#!/bin/bash .... ..... # backup dirs using gnu/tar /usr/bin/tar --exclude "*/proc/*" --exclude "*/dev/*" --exclude '*/cache/*' -zcvf /nas05/backup.tar.gz /var/www/html /home/Hyman # send an email if backup failed if [ $? -ne 0 ] then /usr/bin/mail -s "GNU/TAR Backup Failed" [email protected]<<EOF GNU/Tar backup failed @ $(date) for $(hostname) EOF else /usr/bin/logger "Backup done" fi .... .. # clean up rm $_filename