トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF 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の長さを考慮する(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の長さを考慮する(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 "テストメール"

[カテゴリ: プログラミング言語 > Shell]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2018年10月01日 22時20分00秒