mailservice - www.codemadness.org - www.codemadness.org saait content files
(HTM) git clone git://git.codemadness.org/www.codemadness.org
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
mailservice (8197B)
---
1 1<- Back / codemadness.org 70
2 i codemadness.org 70
3 i codemadness.org 70
4 i# Setup your own mail paste service codemadness.org 70
5 i codemadness.org 70
6 iLast modification on 2024-02-10 codemadness.org 70
7 i codemadness.org 70
8 i## How it works codemadness.org 70
9 i codemadness.org 70
10 i* The user sends a mail with an attachment to a certain mail address, for codemadness.org 70
11 i example: paste@somehost.org codemadness.org 70
12 i* The mail daemon configuration has an mail alias to pipe the raw mail to a codemadness.org 70
13 i shellscript. codemadness.org 70
14 i* This shellscript processes the raw mail contents from stdin. codemadness.org 70
15 i codemadness.org 70
16 i codemadness.org 70
17 i## What it does codemadness.org 70
18 i codemadness.org 70
19 i* Process a mail with the attachments automatically. codemadness.org 70
20 i* The script processes the attachments in the mail and stores them. codemadness.org 70
21 i* It will mail (back) the URL where the file(s) are stored. codemadness.org 70
22 i codemadness.org 70
23 iThis script is tested on OpenBSD using OpenBSD smtpd and OpenBSD httpd and the codemadness.org 70
24 igopher daemon geomyidae. codemadness.org 70
25 i codemadness.org 70
26 i codemadness.org 70
27 i## Install dependencies codemadness.org 70
28 i codemadness.org 70
29 iOn OpenBSD: codemadness.org 70
30 i codemadness.org 70
31 i pkg_add mblaze codemadness.org 70
32 i codemadness.org 70
33 i codemadness.org 70
34 i## smtpd mail configuration codemadness.org 70
35 i codemadness.org 70
36 iIn your mail aliases (for example /etc/mail/aliases) put: codemadness.org 70
37 i codemadness.org 70
38 i paste: |/usr/local/bin/paste-mail codemadness.org 70
39 i codemadness.org 70
40 i codemadness.org 70
41 iThis pipes the mail to the script paste-mail for processing, this script is codemadness.org 70
42 idescribed below. Copy the below contents in /usr/local/bin/paste-mail codemadness.org 70
43 i codemadness.org 70
44 i codemadness.org 70
45 iScript: codemadness.org 70
46 i codemadness.org 70
47 i #!/bin/sh codemadness.org 70
48 i codemadness.org 70
49 i d="/home/www/domains/www.codemadness.org/htdocs/mailpaste" codemadness.org 70
50 i tmpmsg=$(mktemp) codemadness.org 70
51 i tmpmail=$(mktemp) codemadness.org 70
52 i codemadness.org 70
53 i cleanup() { codemadness.org 70
54 i rm -f "$tmpmail" "$tmpmsg" codemadness.org 70
55 i } codemadness.org 70
56 i codemadness.org 70
57 i # store whole mail from stdin temporarily, on exit remove temporary file. codemadness.org 70
58 i trap "cleanup" EXIT codemadness.org 70
59 i cat > "$tmpmail" codemadness.org 70
60 i codemadness.org 70
61 i # mblaze: don't store mail sequence. codemadness.org 70
62 i MAILSEQ=/dev/null codemadness.org 70
63 i export MAILSEQ codemadness.org 70
64 i codemadness.org 70
65 i # get from address (without display name). codemadness.org 70
66 i from=$(maddr -a -h 'From' /dev/stdin < "$tmpmail") codemadness.org 70
67 i codemadness.org 70
68 i # check if allowed or not. codemadness.org 70
69 i case "$from" in codemadness.org 70
70 i "hiltjo@codemadness.org") codemadness.org 70
71 i ;; codemadness.org 70
72 i *) codemadness.org 70
73 i exit 0;; codemadness.org 70
74 i esac codemadness.org 70
75 i codemadness.org 70
76 i # prevent mail loop. codemadness.org 70
77 i if printf '%s' "$from" | grep -q "paste@"; then codemadness.org 70
78 i exit 0 codemadness.org 70
79 i fi codemadness.org 70
80 i codemadness.org 70
81 i echo "Thank you for using the enterprise paste service." > "$tmpmsg" codemadness.org 70
82 i echo "" >> "$tmpmsg" codemadness.org 70
83 i echo "Your file(s) are available at:" >> "$tmpmsg" codemadness.org 70
84 i echo "" >> "$tmpmsg" codemadness.org 70
85 i codemadness.org 70
86 i # process each attachment. codemadness.org 70
87 i mshow -n -q -t /dev/stdin < "$tmpmail" | sed -nE 's@.*name="(.*)".*@\1@p' | while read -r name; do codemadness.org 70
88 i test "$name" = "" && continue codemadness.org 70
89 i codemadness.org 70
90 i # extract attachment. codemadness.org 70
91 i tmpfile=$(mktemp -p "$d" XXXXXXXXXXXX) codemadness.org 70
92 i mshow -n -O /dev/stdin "$name" < "$tmpmail" > "$tmpfile" codemadness.org 70
93 i codemadness.org 70
94 i # use file extension. codemadness.org 70
95 i ext="${name##*/}" codemadness.org 70
96 i case "$ext" in codemadness.org 70
97 i *.tar.*) codemadness.org 70
98 i # special case: support .tar.gz, tar.bz2, etc. codemadness.org 70
99 i ext="tar.${ext##*.}";; codemadness.org 70
100 i *.*) codemadness.org 70
101 i ext="${ext##*.}";; codemadness.org 70
102 i *) codemadness.org 70
103 i ext="";; codemadness.org 70
104 i esac codemadness.org 70
105 i ext="${ext%%*.}" codemadness.org 70
106 i codemadness.org 70
107 i # use file extension if it is set. codemadness.org 70
108 i outputfile="$tmpfile" codemadness.org 70
109 i if test "$ext" != ""; then codemadness.org 70
110 i outputfile="$tmpfile.$ext" codemadness.org 70
111 i fi codemadness.org 70
112 i mv "$tmpfile" "$outputfile" codemadness.org 70
113 i b=$(basename "$outputfile") codemadness.org 70
114 i codemadness.org 70
115 i chmod 666 "$outputfile" codemadness.org 70
116 i url="gopher://codemadness.org/9/mailpaste/$b" codemadness.org 70
117 i codemadness.org 70
118 i echo "$name:" >> "$tmpmsg" codemadness.org 70
119 i echo " Text file: gopher://codemadness.org/0/mailpaste/$b" >> "$tmpmsg" codemadness.org 70
120 i echo " Image file: gopher://codemadness.org/I/mailpaste/$b" >> "$tmpmsg" codemadness.org 70
121 i echo " Binary file: gopher://codemadness.org/9/mailpaste/$b" >> "$tmpmsg" codemadness.org 70
122 i echo "" >> "$tmpmsg" codemadness.org 70
123 i done codemadness.org 70
124 i codemadness.org 70
125 i echo "" >> "$tmpmsg" codemadness.org 70
126 i echo "Sincerely," >> "$tmpmsg" codemadness.org 70
127 i echo "Your friendly paste_bot" >> "$tmpmsg" codemadness.org 70
128 i codemadness.org 70
129 i # mail back the user. codemadness.org 70
130 i mail -r "$from" -s "Your files" "$from" < "$tmpmsg" codemadness.org 70
131 i codemadness.org 70
132 i cleanup codemadness.org 70
133 i codemadness.org 70
134 i codemadness.org 70
135 iThe mail daemon processing the mail needs of course to be able to have codemadness.org 70
136 ipermissions to write to the specified directory. The user who received the mail codemadness.org 70
137 ineeds to be able to read it from a location they can access and have codemadness.org 70
138 ipermissions for it also. codemadness.org 70
139 i codemadness.org 70
140 i codemadness.org 70
141 i## Room for improvements codemadness.org 70
142 i codemadness.org 70
143 iThis is just an example script. There is room for many improvements. codemadness.org 70
144 iFeel free to change it in any way you like. codemadness.org 70
145 i codemadness.org 70
146 i codemadness.org 70
147 i## References codemadness.org 70
148 i codemadness.org 70
149 h* https://man.openbsd.org/aliases URL:https://man.openbsd.org/aliases codemadness.org 70
150 h* https://man.openbsd.org/smtpd URL:https://man.openbsd.org/smtpd codemadness.org 70
151 h* https://man.openbsd.org/httpd URL:https://man.openbsd.org/httpd codemadness.org 70
152 h* https://github.com/leahneukirchen/mblaze URL:https://github.com/leahneukirchen/mblaze codemadness.org 70
153 i codemadness.org 70
154 i codemadness.org 70
155 i## Bye bye codemadness.org 70
156 i codemadness.org 70
157 iI hope this enterprise(tm) mail service is inspirational or something ;) codemadness.org 70
158 .