annotate sbin/bsmtp2dma @ 723:a97ec3f07bdb

farray.sh: REFACTOR: More flexible metadata retrieval. Using an array or alist variable name or token value (with prefix) is now supported in every function. This is possible because the value prefixes contain questin marks (?) which are not allowed in shell variable names. This again is a major precondition for recursive data structures (arrays/alists in arrays/alists).
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 05 Oct 2024 21:55:55 +0200
parents 599fddb2370d
children e2f262ec2bf4
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
438
9c3b1966ba91 Extend copyright to 2024
Franz Glasner <fzglas.hg@dom66.de>
parents: 386
diff changeset
7 :Copyright: (c) 2019-2024 Franz Glasner.
110
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>
386
84d2735fe7f6 Simplified version tagging a lot: it is also faster now.
Franz Glasner <fzglas.hg@dom66.de>
parents: 317
diff changeset
13 :ID: @(#)@@SIMPLEVERSIONTAG@@
110
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
643
4f2257ea7d0a shellcheck: disable SC2034: VERSION appears unused...
Franz Glasner <fzglas.hg@dom66.de>
parents: 550
diff changeset
17 # shellcheck disable=SC2034 # VERSION appears unused
550
847ae246f3cc Make the port really DATADIR and EXAMPLESDIR safe because the user may redefine DATADIR and EXAMPLESDIR.
Franz Glasner <fzglas.hg@dom66.de>
parents: 537
diff changeset
18 VERSION='@@VERSION@@'
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20 USAGE='
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 USAGE: bsmtp2dma [OPTIONS] RECIPIENT ...
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 Options:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
25 -V Show the program version and usage and exit.
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
26
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27 -8 Does nothing. Just a compatibility option for `bsmtp`.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28
316
dc3ac7fc06ea Typo: "Fix then " -> "Fix the "
Franz Glasner <fzglas.hg@dom66.de>
parents: 145
diff changeset
29 -c ADDRESS Set the "CC:" header.
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
30
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31 -d n Does nothing. Just a compatibility option for `bsmtp`.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33 -f ADDRESS Set the "From:" header.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35 -h MAILHOST:PORT Does nothing. Just a compatibility option for `bsmtp`.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
37 -l NUMBER Does nothing. Just a compatibility option for `bsmtp`.
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39 -r ADDRESS Set the "Reply-To:" header
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
41 -s SUBJECT Set the "Subject:" header
110
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
123
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
44 Files:
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
45
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
46 The shell style configuration file in
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
47
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
48 @@ETCDIR@@/bsmtp2dma.conf is
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 sourced in at script start.
397bf58e85d2 Document configuration file usage
Franz Glasner <fzglas.hg@dom66.de>
parents: 121
diff changeset
51
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 '
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 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55 # Configuration directory
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 #
704
599fddb2370d bsmtp2dma: Some modernizations: use "read -r" and enhance some quoting
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
57 : ${CONFIGDIR:="@@ETCDIR@@"}
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58
704
599fddb2370d bsmtp2dma: Some modernizations: use "read -r" and enhance some quoting
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
59 [ -r "${CONFIGDIR}/bsmtp2dma.conf" ] && . "${CONFIGDIR}/bsmtp2dma.conf"
110
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
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
62 #
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
63 # Default configuration values
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
64 #
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
65 # `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
66 # `/etc/mail/mailer.conf`
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
67 #
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
68 : ${MAILER:=/usr/sbin/sendmail}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
69
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 parse_addr() {
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
72 : 'Parse an possibly complex email address.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74 Addresses can be of the form
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 - Name Parts <user@domain.tld>
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
77 - user@domain.tld
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 `Name Parts` may not contain ``<`` or ``>`` characters.
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
80
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
81 Args:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
82 _addr: the complex email address
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 Returns:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85 0 on success, 1 on errors
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 Output (Globals):
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88 email_name: the name part (or empty)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89 email_addr: the technical address part (or empty)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 '
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92 local _addr
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 _addr="$1"
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
95 test -n "${_addr}" || return 1
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96
537
62cd970aea9c Replace the use of "deprecated" egrep calls with "grep -E"
Franz Glasner <fzglas.hg@dom66.de>
parents: 438
diff changeset
97 if printf "%s" "${_addr}" | /usr/bin/grep -q -E -e '^[^<>]+<[^<>]+@[^<>]+>$'; then
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 email_name=$(printf '%s' "${_addr}" | sed -E -e 's/[[:space:]]*<.+$//')
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 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
100 return 0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
101 fi
537
62cd970aea9c Replace the use of "deprecated" egrep calls with "grep -E"
Franz Glasner <fzglas.hg@dom66.de>
parents: 438
diff changeset
102 if printf "%s" "${_addr}" | /usr/bin/grep -q -E -e '^[^<>]+@[^<>]+$'; then
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 email_name=""
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104 email_addr="${_addr}"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105 return 0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
106 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107 return 1
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108 }
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
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
111 send_mail() {
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
112 : '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
113
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
114 Args:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
115 _recipient: The recipient name.
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 Will be written into the "To:" header also.
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 Input (Globals):
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
120 MAILER
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
121 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
122 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
123 MAILFIFO_STDOUT
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
124 CC
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
125 FROM
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
126 REPLYTO
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
127 SUBJECT
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 Returns:
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
130 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
131 underlying mailer
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
132
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
133 This procedure starts the configured mailer as coproc and sends
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
134 email headers and contents to the started mailer.
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
135
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
136 '
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
137 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
138 local _from_from _from_addr _sender_addr _dummy
110
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 _recipient="$1"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
141 _rc=0
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 if parse_addr "${_recipient}"; then
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
144 _recipient_addr="${email_addr}"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
145 else
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
146 echo "ERROR: unknown recipient address format in \`${_recipient}'" >&2
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
147 return 1
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
148 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
149 _sender_addr="$(whoami)@$(hostname -f)"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
150 if [ -z "${FROM}" ]; then
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
151 _from_addr="${_sender_addr}"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
152 _from_from="${_from_addr}"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
153 else
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
154 if parse_addr "${FROM}"; then
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
155 _from_from="${FROM}"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
156 _from_addr="${email_addr}"
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
157 else
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
158 echo "ERROR: unknown sender name in \`${FROM}'" >&2
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
159 return 1
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
160 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
161 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
162
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
163 mkfifo -m 0600 "${MAILFIFO_STDIN}"
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
164 _rc=$?
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
165 if [ ${_rc} -ne 0 ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
166 return ${_rc}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
167 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
168 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
169 _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
170 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
171 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
172 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
173 fi
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
174
121
61df67459e30 Comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 120
diff changeset
175 #
61df67459e30 Comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 120
diff changeset
176 # Start the mailer **before** opening the pipe; otherwise a
61df67459e30 Comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 120
diff changeset
177 # deadlock occurs
61df67459e30 Comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 120
diff changeset
178 #
704
599fddb2370d bsmtp2dma: Some modernizations: use "read -r" and enhance some quoting
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
179 "$MAILER" -f "${_sender_addr}" "${_recipient_addr}" <"${MAILFIFO_STDIN}" >"${MAILFIFO_STDOUT}" &
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
180 _pid_mailer=$!
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
181
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
182 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
183 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
184
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
185 printf "To: %s\n" "${_recipient}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
186 printf "From: %s\n" "${_from_from}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
187 if [ "${_sender_addr}" != "${_from_addr}" ]; then
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
188 printf "Sender: %s\n" "${_sender_addr}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
189 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
190 if [ -n "${SUBJECT}" ]; then
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
191 printf "Subject: %s\n" "${SUBJECT}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
192 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
193 if [ -n "${REPLYTO}" ]; then
114
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
194 #
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
195 # XXX TBD proper Reply-To header value checks:
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
196 # a comma separated list of full mail addresses
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
197 #
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
198 printf "Reply-To: %s\n" "${REPLYTO}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
199 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
200 if [ -n "${CC}" ]; then
114
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
201 #
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
202 # XXX TBD proper CC header value checks:
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
203 # a comma separated list of full mail addresses
dad9f2d80c10 Enhance some comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 111
diff changeset
204 #
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
205 printf "Cc: %s\n" "${CC}" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
206 fi
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
207 printf "\n" >&3
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
208
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
209 # preserve leading white space when reading with `read`
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
210 _oifs="$IFS"
704
599fddb2370d bsmtp2dma: Some modernizations: use "read -r" and enhance some quoting
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
211 IFS=$'\n'
599fddb2370d bsmtp2dma: Some modernizations: use "read -r" and enhance some quoting
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
212 while read -r _text; do
599fddb2370d bsmtp2dma: Some modernizations: use "read -r" and enhance some quoting
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
213 printf "%s\n" "$_text" >&3
599fddb2370d bsmtp2dma: Some modernizations: use "read -r" and enhance some quoting
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
214 done <"${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
215 # 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
216 # printf ".\n" >&3
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
217 IFS="$_oifs"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
218
121
61df67459e30 Comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 120
diff changeset
219 # 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
220 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
221 # read eventually remaining stuff from the mailer until EOF
704
599fddb2370d bsmtp2dma: Some modernizations: use "read -r" and enhance some quoting
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
222 IFS='' read -r _dummy <&4
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 exec 4<&-
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
224
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
225 wait $_pid_mailer
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
226 _rc=$?
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
227
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
228 # 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
229 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
230 rm -f "${MAILFIFO_STDOUT}"
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
231
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
232 return ${_rc}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
233 }
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
234
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
235
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
236 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
237 case ${_opt} in
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
238 V)
386
84d2735fe7f6 Simplified version tagging a lot: it is also faster now.
Franz Glasner <fzglas.hg@dom66.de>
parents: 317
diff changeset
239 printf 'bsmtp2dma %s\n' '@@SIMPLEVERSIONSTR@@'
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
240 echo "$USAGE"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
241 exit 0;
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 8)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
244 : # VOID
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
245 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
246 c)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
247 CC="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
248 ;;
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
249 d)
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
250 : # VOID
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
251 ;;
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
252 f)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
253 FROM="$OPTARG"
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 h)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
256 : # VOID
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
257 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
258 l)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
259 : # VOID
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
260 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
261 r)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
262 REPLYTO="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
263 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
264 s)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
265 SUBJECT="$OPTARG"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
266 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
267 \?)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
268 exit 2;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
269 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
270 *)
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
271 echo "ERROR: inconsistent option handling" >&2
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
272 exit 2;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
273 ;;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
274 esac
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
275 done
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
276
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
277 # return code
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
278 _rc=0
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
279
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
280 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
281 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
282 MAILFIFO_STDOUT="${MAILTMPDIR}/mail-stdout"
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
283 MAILCONTENT="${MAILTMPDIR}/mail-text"
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 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
286 # Clean up existing temporary stuff on all sorts of exit
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
287 # (including the "exit" call (signal 0))
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
288 #
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
289 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
290
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
291 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
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 # Reset the Shell's option handling system to prepare for handling
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
295 # other arguments and probably command-local options
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
296 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
297 shift $((OPTIND-1))
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
298 OPTIND=1
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
299
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
300 # early check whether some recipients are given
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
301 if [ $# -eq 0 ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
302 echo "ERROR: no recipient given" >&2
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
303 exit 2;
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
304 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
305
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
306 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
307 # Collect the mail text from stdin into a temporary file
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
308 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
309 exec 3>"${MAILCONTENT}"
111
fa73423234bf bsmtp2dma is feature-complete
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
310 # preserve leading white space when reading with `read`
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
311 _oifs="$IFS"
704
599fddb2370d bsmtp2dma: Some modernizations: use "read -r" and enhance some quoting
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
312 IFS=$'\n'
599fddb2370d bsmtp2dma: Some modernizations: use "read -r" and enhance some quoting
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
313 while read -r _text; do
110
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
314 if [ "${_text}" = "." ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
315 break
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
316 else
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
317 printf "%s\n" "${_text}" >&3
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
318 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
319 done
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
320 exec 3>&-
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
321 IFS="$_oifs"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
322
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
323 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
324 # 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
325 #
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
326 until [ $# -eq 0 ]; do
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
327 send_mail "$1"
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
328 _rcsm=$?
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
329 if [ \( ${_rcsm} -ne 0 \) -a \( ${_rc} -eq 0 \) ]; then
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
330 _rc=${_rcsm}
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
331 fi
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
332 shift
af4eeb94144a Begin bsmtp2dma tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
333 done
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 exit ${_rc}