s4

annotate sendmultipart.sh @ 917:070e933c7896

Calling gs silently
author HIROSE Yuuji <yuuji@gentei.org>
date Fri, 08 Jan 2021 19:34:27 +0900
parents 4d580bd8c47f
children
rev   line source
yuuji@97 1 #!/bin/sh
yuuji@661 2 # 愛
yuuji@97 3 # send multipart message via email
yuuji@98 4 # (C)2012,2015 by HIROSE Yuuji [yuuji(at)yatex.org]
yuuji@97 5 # You can obtain the latest version of this script from:
yuuji@97 6 # http://www.gentei.org/~yuuji/software/sendmultipart.sh
yuuji@683 7 # Last modified Thu May 14 07:31:16 2020 on firestorm
yuuji@97 8 #
yuuji@97 9 # Typical usage:
yuuji@97 10 # echo "Hi, here's photo I've taken. Enjoy" | \
yuuji@97 11 # sendmultipart.sh -t rcpt1@example.com,rcpt2@example.org \
yuuji@97 12 # -s "Photo of party" -f myself@example.net photo*.jpg
yuuji@97 13
yuuji@97 14 myname=`basename $0`
yuuji@97 15 usage () {
yuuji@97 16 cat<<_EOU_
yuuji@97 17 $myname: Send multipart message via email
yuuji@97 18 Usage: $0 -t recipient [options] file(s)
yuuji@97 19 -t ToAddress Recipient address.
yuuji@97 20 Multiple -t option and/or Multiple ToAddresses
yuuji@97 21 delimited by comma are acceptable.
yuuji@97 22 -s Subject Set subject to \`Subject'
yuuji@97 23 -f FromAddress Set From: header to \`FromAddress'
yuuji@671 24 -r ReplyTo Set Reply-to: header to \`ReplyTo'
yuuji@97 25 _EOU_
yuuji@97 26 exit 0
yuuji@97 27 }
yuuji@97 28
yuuji@97 29 conf=~/.sendmultipart
yuuji@97 30 verbose=0
yuuji@97 31 hgid='$HGid$'
yuuji@97 32 mailer=`echo $hgid|cut -d' ' -f2,3,4`
yuuji@97 33
yuuji@97 34 base64byuu() {
yuuji@97 35 uuencode -m $1 < $1 | tail +2
yuuji@97 36 }
yuuji@97 37 base64=${BASE64:-base64byuu}
yuuji@97 38 boundary="${mailer}_`date +%Y%m%d,%H%M%Sx`"
yuuji@97 39 ctheader="Content-Type: Multipart/Mixed;
yuuji@97 40 boundary=\"$boundary\""
yuuji@97 41 textcharset=iso-2022-jp
yuuji@97 42 rcpts=""
yuuji@661 43 nl="
yuuji@661 44 "
yuuji@661 45 rcptheader=""
yuuji@97 46
yuuji@97 47 [ -f $conf ] && . $conf # read rc file
yuuji@97 48
yuuji@97 49 while [ x"$1" != x"" ]; do
yuuji@97 50 case "$1" in
yuuji@97 51 -t) shift;
yuuji@97 52 rcpts="$rcpts${rcpts:+ }`echo $1|tr , ' '`"
yuuji@97 53 ;;
yuuji@97 54 -s) shift; subject="`echo $1|nkf -M`" ;;
yuuji@661 55 -r) shift; REPLYTO="$1" ;;
yuuji@97 56 -f) shift; from="From: $1" ;;
yuuji@97 57 -v) verbose=1 ;;
yuuji@651 58 -h) usage ;; # -h helpオプション
yuuji@97 59 --) shift; break ;;
yuuji@651 60 *) break ;; # -で始まらないものが来たら即処理突入
yuuji@97 61 esac
yuuji@97 62 shift
yuuji@97 63 done
yuuji@683 64 rcptheader=${SMAIL_TO:-`echo $rcpts|tr ' ' '\n'|sort -u|tr '\n' ', '`}
yuuji@97 65 plainheader="Content-Type: text/plain; charset=$textcharset
yuuji@97 66 Content-Transfer-Encoding: 7bit"
yuuji@97 67
yuuji@97 68 tolower() {
yuuji@97 69 tr '[A-Z]' '[a-z]'
yuuji@97 70 }
yuuji@97 71 cattextwithheader() {
yuuji@97 72 coding=`nkf -g $1|cut -d' ' -f1`
yuuji@97 73 case `echo $coding | tolower` in
yuuji@97 74 iso-2022-jp) encoding=7bit cat=cat;;
yuuji@97 75 *) encoding=base64 cat="$base64" ;;
yuuji@97 76 esac
yuuji@97 77 filename=`echo $1|nkf -M`
yuuji@97 78 cat<<EOF
yuuji@672 79 Content-Type: text/plain; charset=$coding
yuuji@97 80 Content-Disposition: inline; filename="$filename"
yuuji@97 81 Content-Transfer-Encoding: $encoding
yuuji@97 82
yuuji@97 83 EOF
yuuji@97 84 $cat $1
yuuji@97 85 }
yuuji@97 86
yuuji@97 87 # Begin procedure
yuuji@97 88 if [ x"$rcpts" = x"" ]; then
yuuji@97 89 sendmail="cat"
yuuji@97 90 else
yuuji@97 91 sendmail="sendmail"
yuuji@97 92 fi
yuuji@670 93 body=`nkf -dj` # Convert stdin to iso-2022-jp
yuuji@97 94
yuuji@97 95 # Generate contents
yuuji@97 96 ( cat<<EOF
yuuji@683 97 To: ${rcptheader:-[Not specified]}
yuuji@661 98 ${REPLYTO:+Reply-to: $REPLYTO$nl}Subject: ${subject:-$*}
yuuji@97 99 $ctheader
yuuji@97 100 Mime-Version: 1.0
yuuji@97 101 X-Mailer: $mailer
yuuji@97 102 $from
yuuji@97 103
yuuji@97 104 --$boundary
yuuji@97 105 $plainheader
yuuji@97 106
yuuji@97 107 EOF
yuuji@97 108 echo "$body"
yuuji@97 109 echo
yuuji@97 110 for file in "$@"; do
yuuji@97 111 echo "--$boundary"
yuuji@672 112 ct=`file --mime-type - < "$file" | cut -d' ' -f2`
yuuji@672 113 case "$ct" in
yuuji@672 114 [Tt]ext/[Pp]lain*)
yuuji@672 115 cattextwithheader "$file"
yuuji@97 116 ;;
yuuji@97 117 *)
yuuji@672 118 echo "Content-Type: $ct"
yuuji@672 119 fn=${file##*/}
yuuji@97 120 echo "Content-Transfer-Encoding: base64"
yuuji@672 121 echo "Content-Disposition: inline; filename=\"$fn\""
yuuji@97 122 echo
yuuji@97 123 $base64 $file
yuuji@97 124 ;;
yuuji@97 125 esac
yuuji@97 126 echo
yuuji@97 127 done
yuuji@97 128 echo "--${boundary}--"
yuuji@97 129 ) | $sendmail $rcpts
yuuji@97 130
yuuji@97 131 exit 0