トップ 一覧 置換 検索 ヘルプ RSS ログイン

シェルでメールを送信するの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!とりあえず送る
文字コードとか気にせずとりあえず、手っ取り早くシェルからメールを送信する。

 toAddr="aaa@bbb.cc.dd"
 subjString="[Log] `date +%Y%m%d`"
 sendMail(){
   echo -e "To:${toAddr}\nSubject:${subjString}\n\n$1" | /usr/sbin/sendmail -t
 }
 
 sendMail "テストメール"

!!!文字コードとかSubjectの長さを考慮する
!!!文字コードとかSubjectの長さを考慮する(NKFを使う)
nkfを使ってSubject、To、Fromをエンコードする
  toAddr="ほげほげ <testuser>"
  subject="[Log] `date +%Y%m%d`"
  sendMail(){
    subjectMIME=`echo ${subject} | nkf -M`
    # echo -e ${subjectMIME}
    toAddrMIME=`echo ${toAddr} | nkf -M`
    # echo -e ${toAddrMIME}
    body=`echo -e $1 | base64`
    echo -e "To:${toAddrMIME}\nSubject:${subjectMIME}\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: base64\n\n$body" | /usr/sbin/sendmail -t
  }
  sendMail "テストメール"
!!!文字コードとかSubjectの長さを考慮する(旧)

!!!文字コードとかSubjectの長さを考慮する(NKFを使わない)
 toAddr="aaa@bbb.cc.dd"
 subject="[Log] `date +%Y%m%d`"
 LINE_SEP=$'\n'
 IFS_DEFAULT=$IFS
 sendMail(){
   subjectBase64=""
   lines=`echo -e ${subject} | fold -c10`
   sep=""
   IFS=${LINE_SEP}
   for line in ${lines}; do
     subjectBase64=${subjectBase64}${sep}"=?UTF-8?B?`echo -e ${line} | base64`?="
     sep="\n\t"
   done
   IFS=${IFS_DEFAULT} 
   #subject="${subjectBase64%\\n\\t}"
   # echo -e ${subjectBase64}
   body=`echo -e $1 | base64`
   echo -e "To:${toAddr}\nSubject:${subjectBase64}\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: base64\n\n$body" | /usr/sbin/sendmail -t
 }
  sendMail "テストメール"

{{category2 プログラミング言語,Shell}}