annotate bin/bsmtp2dma @ 110:af4eeb94144a

Begin bsmtp2dma tool
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 14 Oct 2019 09:47:34 +0200
parents
children fa73423234bf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 #!/bin/sh
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2 # -*- indent-tabs-mode: nil; -*-
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
3 : 'A simple replacement for Bacula `bsmtp` when the underlying mailer does
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
4 not listen on TCP ports (e.g. `dma`, `ssmtp` et al.).
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
5
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
6 :Author: Franz Glasner
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7 :Copyright: (c) 2019 Franz Glasner.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 All rights reserved.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9 :License: BSD 3-Clause "New" or "Revised" License.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
10 See LICENSE for details.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11 If you cannot find LICENSE see
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
12 <https://opensource.org/licenses/BSD-3-Clause>
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
13 :ID: @(#)@@PKGORIGIN@@ $HGid$
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
14
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15 '
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17 VERSION="@@VERSION@@"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19 USAGE='
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20 USAGE: bsmtp2dma [OPTIONS] RECIPIENT ...
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 Options:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 -8 Does nothing. Just a compatibility option for `bsmtp`.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 -d n Does nothing. Just a compatibility option for `bsmtp`.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 -f ADDRESS Set the "From:" header.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30 -h MAILHOST:PORT Does nothing. Just a compatibility option for `bsmtp`.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32 -n Do a dry-run: just print out what would be done
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34 -s SUBJECT Set the "Subject:" header
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 -r ADDRESS Set the "Reply-To:" header
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38 -l NUMBER Does nothing. Just a compatibility option for `bsmtp`.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40 -V Show the program version and usage and exit.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43 Usage:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 The body of the email message is read from standard input. Message is
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46 ended by sending the `EOF` character (`Ctrl-D` on many systems) on the
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47 start of a new line, much like many `mail` commands.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 '
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 # Configuration directory
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
53 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54 : ${CONFIGDIR:=@@ETCDIR@@}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 test -r "${CONFIGDIR}/bsmtp2dma.conf" && . "${CONFIGDIR}/bsmtp2dma.conf"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
57
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
59 # Default configuration values
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
60 : ${MAILER:=/usr/sbin/sendmail}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
61
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
62
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
63 parse_addr() {
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
64 : 'Parse an possibly complex email address.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
65
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66 Addresses can be of the form
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
67
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
68 - Name Parts <user@domain.tld>
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
69 - user@domain.tld
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
70
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
71 `Name Parts` may not contain ``<`` or ``>`` characters.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
72
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73 Args:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74 _addr: the complex email address
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
75
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
76 Returns:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
77 0 on success, 1 on errors
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
78
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
79 Output (Globals):
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
80 email_name: the name part (or empty)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
81 email_addr: the technical address part (or empty)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
82
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
83 '
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
84 local _addr
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
86 _addr="$1"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
87
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88 if printf "%s" "${_addr}" | grep -q -E -e '^[^<>]+<[^<>]+@[^<>]+>$'; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89 email_name=$(printf '%s' "${_addr}" | sed -E -e 's/[[:space:]]*<.+$//')
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90 email_addr=$(printf '%s' "${_addr}" | sed -E -e 's/^[^<>]+<//' | sed -E -e 's/>$//')
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 return 0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93 if printf "%s" "${_addr}" | grep -q -E -e '^[^<>]+@[^<>]+$'; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 email_name=""
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
95 email_addr="${_addr}"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96 return 0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
97 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 return 1
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 }
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
100
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
101
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102 send_mail() {
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 : 'Send the mail via the underlying configured mailer (dma, sendmail et al.).
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105 Args:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
106 _recipient: The recipient name.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108 Will be written into the "To:" header also.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
109
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
110 Input (Globals):
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
111 MAILER
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
112 MAILCONTENT
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
113 MAILFIFO
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
114 CC
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
115 FROM
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
116 REPLYTO
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
117 SUBJECT
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
118
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
119 Returns:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
120 0 on success, other values on errors or the error exit code from the
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
121 underlying mailer
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
122
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
123 '
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
124 local _recipient _rc _oifs _text _pid_mailer
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
125
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
126 _recipient="$1"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
127 _rc=0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
128
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
129 mkfifo -m 0600 "${MAILFIFO}"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
130 _rc=$?
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
131 if [ ${_rc} -ne 0 ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
132 return ${_rc}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
133 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
134
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
135 exec 3<>"${MAILFIFO}"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
136
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
137 "$MAILER" -f bacula@fmgapp7-bacula9.intern.feldmann-mg.com hostmaster@feldmann-mg.com <&3 &
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
138 _pid_mailer=$!
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
139
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
140 # preserve leading white space when reading
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
141 _oifs="$IFS"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
142 IFS="
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
143 "
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
144 cat "${MAILCONTENT}" |
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
145 while read _text; do
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
146 printf "%s\n" "$_text" >&3
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
147 done
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
148 printf ".\n" >&3
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
149
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
150 IFS="$_oifs"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
151
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
152 # close the fd to the pipe: coproc should get EOF
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
153 exec 3>&-
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
154
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
155 wait $_pid_mailer
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
156 _rc=$?
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
157
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
158 # we are done with the named pipe
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
159 rm -f "${MAILFIFO}"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
160
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
161 return ${_rc}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
162 }
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
163
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
164
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
165 while getopts "V8c:f:h:l:nr:s:" _opt; do
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
166 case ${_opt} in
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
167 V)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
168 echo "bsmtp2dma v${VERSION} (rv:@@HGREVISION@@)"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
169 echo "$USAGE"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
170 exit 0;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
171 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
172 8)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
173 : # VOID
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
174 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
175 c)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
176 CC="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
177 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
178 f)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
179 FROM="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
180 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
181 h)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
182 : # VOID
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
183 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
184 l)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
185 : # VOID
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
186 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
187 n)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
188 DRYRUN="YES"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
189 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
190 r)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
191 REPLYTO="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
192 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
193 s)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
194 SUBJECT="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
195 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
196 \?)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
197 exit 2;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
198 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
199 *)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
200 echo "ERROR: inconsistent option handling" >&2
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
201 exit 2;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
202 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
203 esac
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
204 done
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
205
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
206 # return code
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
207 _rc=0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
208
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
209 DRYRUN="NO"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
210
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
211 MAILTMPDIR="$(mktemp -d)"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
212 MAILFIFO="${MAILTMPDIR}/mail-stdin"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
213 MAILCONTENT="${MAILTMPDIR}/mail-text"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
214
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
215 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
216 # Clean up existing temporary stuff on all sorts of exit
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
217 # (including the "exit" call (signal 0))
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
218 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
219 trap 'if [ -d "${MAILTMPDIR}" ]; then rm -r "${MAILTMPDIR}"; fi; exit;' 0 1 2 15
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
220
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
221 test -d "${MAILTMPDIR}" || { echo "ERROR: no existing private tmp dir" >&2; exit 1; }
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
222
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
223 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
224 # Reset the Shell's option handling system to prepare for handling
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
225 # other arguments and probably command-local options
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
226 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
227 shift $((OPTIND-1))
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
228 OPTIND=1
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
229
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
230 # early check whether some recipients are given
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
231 if [ $# -eq 0 ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
232 echo "ERROR: no recipient given" >&2
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
233 exit 2;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
234 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
235
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
236 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
237 # Collect the mail text from stdin into a temporary file
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
238 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
239 exec 3>"${MAILCONTENT}"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
240 # preserve leading white space when reading
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
241 _oifs="$IFS"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
242 IFS="
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
243 "
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
244 while read _text; do
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
245 if [ "${_text}" = "." ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
246 break
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
247 else
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
248 printf "%s\n" "${_text}" >&3
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
249 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
250 done
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
251 exec 3>&-
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
252 IFS="$_oifs"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
253
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
254 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
255 # Now send the content of the collected mail content to all recipients
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
256 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
257 until [ $# -eq 0 ]; do
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
258 send_mail "$1"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
259 _rcsm=$?
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
260 if [ \( ${_rcsm} -ne 0 \) -a \( ${_rc} -eq 0 \) ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
261 _rc=${_rcsm}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
262 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
263 shift
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
264 done
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
265
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
266 exit ${_rc}