annotate sbin/bsmtp2dma @ 145:c4e9099a3d3e

FIX: Really use "printf" instead of "echo" when printing the version
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 30 Oct 2019 21:13:00 +0100
parents 6be3742d21f7
children dc3ac7fc06ea
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
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
24 -V Show the program version and usage and exit.
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
25
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 -8 Does nothing. Just a compatibility option for `bsmtp`.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
28 -c ADDRESS Set then "CC:" header.
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
29
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30 -d n 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 -f ADDRESS Set the "From:" header.
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 -h MAILHOST:PORT Does nothing. Just a compatibility option for `bsmtp`.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
36 -l NUMBER Does nothing. Just a compatibility option for `bsmtp`.
110
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 -r ADDRESS Set the "Reply-To:" header
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
40 -s SUBJECT Set the "Subject:" header
110
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
123
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
49
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
50 Files:
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
51
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
52 The shell style configuration file in
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
53
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
54 @@ETCDIR@@/bsmtp2dma.conf is
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
55
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
56 sourced in at script start.
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
57
110
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
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
60 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
61 # Configuration directory
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 : ${CONFIGDIR:=@@ETCDIR@@}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
64
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
65 test -r "${CONFIGDIR}/bsmtp2dma.conf" && . "${CONFIGDIR}/bsmtp2dma.conf"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
67
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
68 #
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
69 # Default configuration values
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
70 #
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
71 # `sendmail` is also valid for `dma` because of the mapping within
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
72 # `/etc/mail/mailer.conf`
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
73 #
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74 : ${MAILER:=/usr/sbin/sendmail}
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
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
77 parse_addr() {
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
78 : 'Parse an possibly complex email address.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
79
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
80 Addresses can be of the form
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
81
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
82 - Name Parts <user@domain.tld>
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
83 - user@domain.tld
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
84
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85 `Name Parts` may not contain ``<`` or ``>`` characters.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
86
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
87 Args:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88 _addr: the complex email address
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90 Returns:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 0 on success, 1 on errors
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93 Output (Globals):
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 email_name: the name part (or empty)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
95 email_addr: the technical address part (or empty)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
97 '
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 local _addr
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 _addr="$1"
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
101 test -n "${_addr}" || return 1
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 if printf "%s" "${_addr}" | grep -q -E -e '^[^<>]+<[^<>]+@[^<>]+>$'; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104 email_name=$(printf '%s' "${_addr}" | sed -E -e 's/[[:space:]]*<.+$//')
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105 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
106 return 0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108 if printf "%s" "${_addr}" | grep -q -E -e '^[^<>]+@[^<>]+$'; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
109 email_name=""
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
110 email_addr="${_addr}"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
111 return 0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
112 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
113 return 1
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
114 }
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
115
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
116
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
117 send_mail() {
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
118 : '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
119
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
120 Args:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
121 _recipient: The recipient name.
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 Will be written into the "To:" header also.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
124
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
125 Input (Globals):
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
126 MAILER
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
127 MAILCONTENT
119
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
128 MAILFIFO_STDIN
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
129 MAILFIFO_STDOUT
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
130 CC
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
131 FROM
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
132 REPLYTO
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
133 SUBJECT
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 Returns:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
136 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
137 underlying mailer
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
138
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
139 This procedure starts the configured mailer as coproc and sends
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
140 email headers and contents to the started mailer.
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
141
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
142 '
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
143 local _recipient _rc _oifs _text _pid_mailer _recipient_addr
119
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
144 local _from_from _from_addr _sender_addr _dummy
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
145
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
146 _recipient="$1"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
147 _rc=0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
148
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
149 if parse_addr "${_recipient}"; then
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
150 _recipient_addr="${email_addr}"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
151 else
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
152 echo "ERROR: unknown recipient address format in \`${_recipient}'" >&2
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
153 return 1
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
154 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
155 _sender_addr="$(whoami)@$(hostname -f)"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
156 if [ -z "${FROM}" ]; then
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
157 _from_addr="${_sender_addr}"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
158 _from_from="${_from_addr}"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
159 else
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
160 if parse_addr "${FROM}"; then
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
161 _from_from="${FROM}"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
162 _from_addr="${email_addr}"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
163 else
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
164 echo "ERROR: unknown sender name in \`${FROM}'" >&2
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
165 return 1
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
166 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
167 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
168
119
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
169 mkfifo -m 0600 "${MAILFIFO_STDIN}"
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
170 _rc=$?
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
171 if [ ${_rc} -ne 0 ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
172 return ${_rc}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
173 fi
119
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
174 mkfifo -m 0600 "${MAILFIFO_STDOUT}"
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
175 _rc=$?
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
176 if [ ${_rc} -ne 0 ]; then
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
177 rm -f "${MAILFIFO_STDIN}"
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
178 return ${_rc}
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
179 fi
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
180
121
61df67459e30 Comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 120
diff changeset
181 #
61df67459e30 Comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 120
diff changeset
182 # Start the mailer **before** opening the pipe; otherwise a
61df67459e30 Comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 120
diff changeset
183 # deadlock occurs
61df67459e30 Comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 120
diff changeset
184 #
119
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
185 "$MAILER" -f "${_sender_addr}" "${_recipient_addr}" <${MAILFIFO_STDIN} >${MAILFIFO_STDOUT} &
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
186 _pid_mailer=$!
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
187
119
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
188 exec 3>"${MAILFIFO_STDIN}"
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
189 exec 4<"${MAILFIFO_STDOUT}"
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
190
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
191 printf "To: %s\n" "${_recipient}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
192 printf "From: %s\n" "${_from_from}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
193 if [ "${_sender_addr}" != "${_from_addr}" ]; then
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
194 printf "Sender: %s\n" "${_sender_addr}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
195 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
196 if [ -n "${SUBJECT}" ]; then
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
197 printf "Subject: %s\n" "${SUBJECT}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
198 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
199 if [ -n "${REPLYTO}" ]; then
114
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
200 #
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
201 # XXX TBD proper Reply-To header value checks:
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
202 # a comma separated list of full mail addresses
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
203 #
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
204 printf "Reply-To: %s\n" "${REPLYTO}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
205 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
206 if [ -n "${CC}" ]; then
114
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
207 #
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
208 # XXX TBD proper CC header value checks:
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
209 # a comma separated list of full mail addresses
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
210 #
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
211 printf "Cc: %s\n" "${CC}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
212 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
213 printf "\n" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
214
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
215 # preserve leading white space when reading with `read`
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
216 _oifs="$IFS"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
217 IFS="
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 cat "${MAILCONTENT}" |
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
220 while read _text; do
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
221 printf "%s\n" "$_text" >&3
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
222 done
119
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
223 # not all mailer recognize this
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
224 # printf ".\n" >&3
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
225 IFS="$_oifs"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
226
121
61df67459e30 Comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 120
diff changeset
227 # close the fd to the pipe: coproc should get EOF and terminate
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
228 exec 3>&-
119
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
229 # read eventually remaining stuff from the mailer until EOF
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
230 IFS='' read _dummy <&4
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
231 exec 4<&-
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
232
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
233 wait $_pid_mailer
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
234 _rc=$?
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
235
119
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
236 # we are done with the named pipes
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
237 rm -f "${MAILFIFO_STDIN}"
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
238 rm -f "${MAILFIFO_STDOUT}"
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
239
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
240 return ${_rc}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
241 }
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
242
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
243
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
244 while getopts "V8c:d:f:h:l:nr:s:" _opt; do
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
245 case ${_opt} in
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
246 V)
145
c4e9099a3d3e FIX: Really use "printf" instead of "echo" when printing the version
Franz Glasner <fzglas.hg@dom66.de>
parents: 144
diff changeset
247 printf 'bsmtp2dma v%s (rv:%s)\n' "${VERSION}" '@@HGREVISION@@'
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
248 echo "$USAGE"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
249 exit 0;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
250 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
251 8)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
252 : # VOID
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 c)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
255 CC="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
256 ;;
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
257 d)
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
258 : # VOID
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
259 ;;
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
260 f)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
261 FROM="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
262 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
263 h)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
264 : # VOID
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 l)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
267 : # VOID
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
268 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
269 r)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
270 REPLYTO="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
271 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
272 s)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
273 SUBJECT="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
274 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
275 \?)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
276 exit 2;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
277 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
278 *)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
279 echo "ERROR: inconsistent option handling" >&2
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
280 exit 2;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
281 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
282 esac
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
283 done
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
284
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
285 # return code
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
286 _rc=0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
287
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
288 MAILTMPDIR="$(mktemp -d)"
119
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
289 MAILFIFO_STDIN="${MAILTMPDIR}/mail-stdin"
5c92aeaec114 Try to make the mailer's input independent of a trailing single "." -- as opensmtpd's sendmail does not grok them.
Franz Glasner <fzglas.hg@dom66.de>
parents: 114
diff changeset
290 MAILFIFO_STDOUT="${MAILTMPDIR}/mail-stdout"
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
291 MAILCONTENT="${MAILTMPDIR}/mail-text"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
292
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
293 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
294 # Clean up existing temporary stuff on all sorts of exit
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
295 # (including the "exit" call (signal 0))
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
296 #
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
297 trap 'if [ -d "${MAILTMPDIR}" ]; then rm -rf "${MAILTMPDIR}"; fi; exit;' 0 1 2 15
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
298
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
299 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
300
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
301 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
302 # Reset the Shell's option handling system to prepare for handling
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
303 # other arguments and probably command-local options
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
304 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
305 shift $((OPTIND-1))
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
306 OPTIND=1
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
307
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
308 # early check whether some recipients are given
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
309 if [ $# -eq 0 ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
310 echo "ERROR: no recipient given" >&2
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
311 exit 2;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
312 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
313
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
314 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
315 # Collect the mail text from stdin into a temporary file
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
316 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
317 exec 3>"${MAILCONTENT}"
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
318 # preserve leading white space when reading with `read`
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
319 _oifs="$IFS"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
320 IFS="
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
321 "
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
322 while read _text; do
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
323 if [ "${_text}" = "." ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
324 break
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
325 else
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
326 printf "%s\n" "${_text}" >&3
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
327 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
328 done
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
329 exec 3>&-
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
330 IFS="$_oifs"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
331
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
332 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
333 # 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
334 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
335 until [ $# -eq 0 ]; do
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
336 send_mail "$1"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
337 _rcsm=$?
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
338 if [ \( ${_rcsm} -ne 0 \) -a \( ${_rc} -eq 0 \) ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
339 _rc=${_rcsm}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
340 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
341 shift
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
342 done
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
343
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
344 exit ${_rc}