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 .