How do I send e-mails from a shell script including file attachments?
The easiest solution is to send email from within shell scripts is mail command as follows. To send a message to one or more people, mail can be invoked with arguments which are the names of people to whom the mail will be sent:
mail -s 'subject' username mail -s 'subject' vivek@nixcraft.net.in mail -s 'Duplicate ip detected' -c vivek@nixcraft.net.in ipadmin@nixcraft.net.in </var/log/ipscan.log mail -s 'yum update failed' -c vivek@nixcraft.net.in -b sysadins@groups.nixcraft.net.in </var/log/yum.log mail -s 'Disk failure' vivek@nixcraft.net.in < /tmp/message Where,
- -s 'word1 word2' : Specify subject on command line.
- -c : Send carbon copies to list of users.
- -b : Send blind carbon copies to list. List should be a comma-separated list of names.
- < /path/to/file : Read email body using this /path/to/file.
Method #1: Sending File Attachments
The mail command will not work. You need to use uuencode command to send a binary file called reports.tar.gz:uuencode reports.tar.gz reports.tar.gz | mail -s "Weekly Reports for $(date)" admin@groups.mgmt.nixcraft.net.i
You can email images or any file using the same format:uuencode file1.png file1.png | mail -s "Funny" users@groups.nixcraft.net.i
Method #2: File Attachments with mutt Command
The mutt is a MUA (mail user agent) - an email client for text based session. It can be used for reading electronic mail under unix like operating systems, including support color terminals, MIME (attachments), and a threaded sorting mode. You can use mutt command as follows to send email attachments:mutt -s "Filewall logs" -a /tmp/fw.logs.gz vivek@nixcraft.net.in < /tmp/emailmessage.txt
Tip # 1: Empty Mail Body
To use an empty line as the mail body use special file /dev/null or echo command as follows:echo | mutt -s 'Subject' -a attachment.tar.gz vivek@nixcraft.net.in mutt -s 'Subject' -a attachment.tar.gz vivek@nixcraft.net.in </dev/null mail -s "Disk failed @ $(hostname)" mobilenumber@services.api.nixcraft.net.in </dev/null
Tip #2: Writing Mail Body Using Here documents
The here documents (redirection) tells the shell to read input from the current source (HERE) until a line containg only word (HERE) is seen:#!/bin/bash ... .... mail -s "Disk Failed" vivek@nixcraft.net.in<<EOF NAS server [ mounted at $(hostname) ] is running out of disk space!!! Current allocation ${_SPACE} @ $(date) EOF ... ..
Tip # 3: Conditional Mail
Use the if else if and the exit status of a command as follows:[ $(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" mobilephone@api.nixcraft.net.in ;}
OR#!/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/vivek # send an email if backup failed if [ $? -ne 0 ] then /usr/bin/mail -s "GNU/TAR Backup Failed" vivek@nixcraft.net.in<<EOF GNU/Tar backup failed @ $(date) for $(hostname) EOF else /usr/bin/logger "Backup done" fi .... .. # clean up rm $_filename
No comments:
Post a Comment