annotate sbin/bsmtp2dma @ 286:258a1dfd52eb

Separate manual page documentation and "normal" HTML documentation. No "orphaned" source files should be there now. Also the HTML theme for the is changed from "alabaster" to "agogo".
author Franz Glasner <fzglas.hg@dom66.de>
date Sun, 18 Sep 2022 10:25:55 +0200
parents c4e9099a3d3e
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}