s4
annotate sendmultipart.sh @ 893:c1a5d137740d
Display momentary information of frozen state change
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Sat, 26 Dec 2020 15:17:56 +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 |