-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsmail
executable file
·105 lines (84 loc) · 2.33 KB
/
smail
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/bin/bash
set -e #exit on error
SUBJECT=
TO=
FROM=
REPLYTO=
CC=
BCC=
BODY=
CONTENTTYPE="text/plain"
ATTACH=()
BOUNDARY=`date +%s|md5sum`
BOUNDARY="BOUNDARY${BOUNDARY:0:32}"
TMPFILE=`mktemp`
function usage {
echo "Usage: $0 -s|--subject subject -t|--to address [-f|--from address] [-r|--replyto from] [-b|--body stdin] [--cc address] [--bcc address] [-a|--attach file] [--contenttype|-c text/plain]"
}
function log {
echo "`date +%Y%m%d-%H:%M:%S` - $1"
}
function doit {
log '--- STARTING ---'
(
[ -n "$FROM" ] && echo "From: $FROM" && echo "Reply-To: $REPLYTO"
echo "To: $TO"
[ -n "$CC" ] && echo "Cc: $CC"
[ -n "$BCC" ] && echo "Bcc: $BCC"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=\"$BOUNDARY\""
echo "Subject: $SUBJECT"
echo ""
echo "--$BOUNDARY"
echo "Content-Type: $CONTENTTYPE"
echo ""
echo "$BODY"
echo ""
#Parsing Multiple -a|--attach Attachments
for f in "${ATTACH[@]}"; do
FILENAME=`basename $f`;
cat $f | uuencode --base64 $FILENAME > $TMPFILE;
sed -i -e '1,1d' -e '$d' $TMPFILE #removes first & last lines from $TMP
DATA=`cat $TMPFILE`
echo "--$BOUNDARY"
echo "Content-Type: `mimetype -b $f`; Name=\"$FILENAME\""
echo "Content-Transfer-Encoding: base64"
echo "Content-Disposition: attachment; filename=\"$FILENAME\";";
echo ""
echo "$DATA"
echo ""
done
echo ""
echo "--$BOUNDARY"
echo ""
) | sendmail -t
#) | tee
log "--- DONE ---"
}
while [ "$1" ]; do
case "$1" in
-t|--to) TO="$2; $TO"; shift ;;
-f|--from) FROM="$2"; shift ;;
--cc) CC="$2; $CC"; shift ;;
--bcc) BCC="$2; $BCC"; shift ;;
-s|--subject) SUBJECT="$2"; shift ;;
-c|--contenttype) CONTENTTYPE="$2"; shift ;;
-a|--attach) ATTACH=(${ATTACH[@]-} "$2"); shift ;;
-b|--body) BODY="$BODY
$2"; shift ;;
#if option is unknown, append it to subject
*) SUBJECT="$SUBJECT $1" ;;
esac
shift
done
#Global Variables
[ -n "$FROM" ] || FROM=$SMAILFROM
#Mandatory
[ -z "$SUBJECT" ] || [ -z "$TO" ] && usage && exit 1
#Default Values
[ -n "$REPLYTO" ] || REPLYTO="$FROM"
while read -t 1 B; do
BODY="$BODY
$B"
done
doit