2013年11月12日火曜日

CSVファイル情報を宛先(To:)や本文に挿し込んで一斉メール送信するシェルスクリプト

以前、「シェルスクリプトとcrontabでメール定時送信 on MacOS X 」という投稿をしましたが、この一斉メール送信シェルスクリプトを少し手を入れて、CSVファイルからメールアドレスをTo:に挿し込んだり、メール本文に相手の名前を挿し込んで一斉送信できるように改造しました。使いようによってはSPAMメールの発射装置ですな...
このスクリプトは無保証です、念のため。

例えば、こういうCSVファイルがあったとして
鈴木一郎,ichiro@hogehoge.com,userid0001,xko2magk,
上原浩治,uehara@funyafunya.org,userid0002,d8namdw2,
岩隈久志,iwakuma@bashabasha.net,userid0003,yuA7qle C,
メールのTo: にそれぞれのメールアドレスを挿入し、こうしたメール本文↓に相手先の使命や、ID、パスワードなどを挿し込んでいきます(パスワードをメールに記述することは本来望ましくありませんが)。
member_name 様

平素はご利用ありがとうございます。
弊社Webサイトのお客様ページへのmember_name 様のログイン情報をご案内します。

ーーーーーーーーーーーーーーーーー
ユーザー名:member_ID
パスワード:member_passwd
ーーーーーーーーーーーーーーーーー
member_name のところにCSV1列目の氏名を、
member_IDのところにCSV2列目のログインIDを、
member_passwdのところにCSV3列目のパスワードを
それぞれ挿し込んで、順次送信していきます。

なお、今回のスクリプトは、前回と同様に コマンドラインでのメール送信にmailコマンドではなくmuttを使います。
今回はmuttの設定には触れませんので、設定方法は他を参照してください。

 以下、スクリプトです。行頭の番号は行数の目安と、説明のために便宜的に付けているので、実際にスクリプトを書くときには削除してください。また、ファイル名やPATHなどは適宜読み替えてください。
  1 #!/bin/sh
  2 listfile="$HOME/list.csv"
  3 if [ ! -f $listfile ]; then
  4         echo "Recipient list file $listfile does not exist.."
  5         exit 1
  6 fi
  7
  8 mailfile="$HOME/mailbody.txt"
  9 if [ ! -f $mailfile ]; then
 10         echo "Mail body file $mailfile does not exist.."
 11         exit 1
 12 fi
 13
 14 subject=`head -n 1 $mailfile | nkf -m`
 15 cat ${listfile} | while read line
 16 do
 17         name=`echo $line | cut -d"," -f 1`
 18         to=`echo $line | cut -d"," -f 2`
 19         usernm=`echo $line | cut -d"," -f 3`
 20         passwd=`echo $lin3 | cut -d"," -f 4`
 21         contents=`/usr/bin/tail -n +2 $mailfile | sed -e "s/member_name/$name    /g" | sed -e "s/member_ID/$usernm/g" | sed -e "s/member_passwd/$passwd/g"`
 22         echo "$contents" | nkf | mutt -s "$subj    ect" "$to" -a "$1"
 23         if [ $? -eq 1 ]; then
 24                 echo "send mail failure $to"
 25                 exit 1
 26         fi
 27
 28         echo "send mail success $to"
 29         sleep 15
 30 done
 31 exit
2:CSVファイルの指定
3〜6:$listfileがなかった場合に吐くメッセージ。
8:メールサブジェクトと本文のテキスト指定。1行目がSubject、2行目以降が本文。
9〜12:$mailfileがなかった場合に吐くメッセージ。
14:$mailfileの一行目をsubjectに指定する。文字化けしないようにnkfコマンドで日本語コードを調整。お手元の環境に応じて適宜変更してください。
15:$listfileを一行ごと読み出し、whileで繰り返す。
17:$listfileから1列目の氏名をcutコマンドで切り出す。
18:$listfileから2列目のメールアドレスをcutコマンドで切り出す。
19:$listfileから3列目のユーザーIDをcutコマンドで切り出す。
20:$listfileから4列目のパスワードをcutコマンドで切り出す。
21:tailコマンドで、メール本文は2行目からと指定し、sed -e コマンドで本文中のmember_name、member_ID、member_passwdをそれぞれ置換する。
22:上記までで整えた本文をnkfをかまして、文字化け回避。お手元の環境に応じて適宜変更してください。そしてmuttに渡して送信。「-a "$1"」は添付ファイルをする場合のおまけで、スクリプト実行の際、引数として添付ファイルを指定してください。添付ファイル不要の場合は削除可の記述です。
23〜26:メールが送信できなかった場合に吐くメッセージ。
28:メール送信が成功した場合に吐くメッセージ。
29:送信間隔の指定。スパム対策のため時間当たりのメール発信数を制限しているSMTPがあるので、制限に応じたインターバルを設定する。

参考情報
お忙しい中、スクリプト作成の相談にのってくださり、多くの助言をくださった、K.O氏に感謝。

2013年8月19日月曜日

家族Camp2013

今年は8月13日から16日にかけて三重県紀北町の孫太郎オートキャンプ場を3泊利用し、その後、紀伊半島を海岸線沿いにぐるりと移動し南紀白浜のとれとれビレッジで1泊するプランでした。
今年の家族キャンプに先立って、テントを新調しました。
これまでの6年間は、小川キャンパル 製の Tiara4という四人用テントを使っていました。
まだ、十分に使える代物だったのですが 、
小川キャンパル Tiara4

昨夏のキャンプで、成長した子どもたちの激しい寝返りに耐えかね、親のキャンプ中の安眠を確保すべく、一回り大きなテントを購入しました(Tiara4は友人のY.K君に譲渡)。
キャンプ中に強い雨風に遭わないという前提であれば、コールマンなどの廉価なテントでもいいのですが(ホームセンターにはさらに安価なテントも多数)、「テントは少々強い雨風に遭遇しても耐え凌げなくてはならない」という信念から、国内アウトドア用品メーカー Snow Peak社Land Breeze6 という6人用テントへの買い換えに踏み切りました。
Snow Peak社 LandBreeze6

高校のワンゲル部時代に使用していた、ヘリテイジ社のエスパース・スーパーライト6-7人用も購入候補アイテムだったのですが、何故か今季は入荷が遅れに遅れ、本稿執筆時点でも入荷がなく断念しました。

Land Breeze6は就寝スペースが3m×3mと広く、床面中央から放射状に4人が寝転べるという贅沢なスペースが確保され、子どもたちの少々の寝返りでも腕や脚がぶつかりません。また、Tiara4より6kgくらい軽量で、車の燃費にも貢献します。



さて、これまでの家族キャンプでは、初日はテントを張って夕食にバーベキューをしてお終い、というパターンだったのですが、今年は、いきなり海水浴からスタートです。





子どもたちはどんどん成長してたくましくなっていきますが、親は前年より確実に衰えていくわけで、初日からの全力の海水浴は、かなり消耗します。
きつく日焼けをすると、シミだらけになるので、サンシェードの設置と入念な日焼け止めクリームの塗布は欠かせません。特に海水浴初日の日焼け止めの失策は、後日の入浴での激痛に直結します。

 海水浴を堪能した後の夕食は、定番のバーベキュー(右写真)。我が家のキャンプではAC電源付きサイトに小型の冷蔵庫を持ち込むのですが、それでも近年の猛暑のこと、食品の傷みを考えて初日の夕方に一番贅沢な食材を投入します。




 対岸の山に沈む夕陽。
(このキャンプ地は、C字湾に面しています)
そして、キャンプ初日が終わっていきます。







キャンプ2日目、
帰宅して写真を整理していると、何故かこの日の写真がまったくありません。
カメラやメディアの事故などではなく、全く撮っていなかったようです。
この日は早朝から、キャンプサイト前の浜でキスの投げ釣りに初挑戦。釣果はゼロ。
3日間にわたり早朝にキスの投げ釣りにトライしましたが、全くのボウズでした。
そして、日が昇ると終日海水浴に突撃。
つまり、この日は、お父ちゃんが朝から晩まで全力で釣りに海水浴に興じていたので、カメラのシャッターを切る暇がなかったようです。 

キャンプ3日目、
早朝のキス釣り、朝食の後、キャンプサイト近くの県営プールに。
本当に今回は泳ぎっぱなしですな。


 夕食は、現地スーパーで調達した海鮮でバーベキュー。この地域は「オークワ」「ショッピー」「主婦の店」という三つスーパーが勢力を争っています。
流通業の職歴がありますので、ついつい、品揃えとか、強みのアイテムとか、陳列のセンスの良さとかを観察してしまいます。



キャンプ4日目、
テントを撤収し、4人そろって"くまモン"Tシャツを着用で記念撮影。(注意:夫婦共に親戚も含めて、熊本県とは縁もゆかりもありません)
左手は愛車のHonda FREED。小さい車体ながら、乗る積むという機能について完成度の高い車です。

潮岬までの道すがら、近大の水産施設が何件か見られました(こちらも縁もゆかりもありませんが)。








←潮岬灯台
 ← 潮岬からの景色
 ←潮岬灯台の展望台






潮岬を後にしたのが午後4時過ぎ 。
予定していた串本海中公園の見物は、到着時点で窓口受付が終了していました。
朝のテント干しを長くとりすぎて、出発が遅れたのが響きました。
 んで、南紀白浜とれとれビレッジに到着。とっぷり日は沈んでいました。
フロントでチェックインすると、夕食の時間は20:30からだと言う、遅い! ま、チェックインも遅いんだけど。
夕飯時間まで温泉でキャンプの汗を落とす。日焼け止め対策が功を奏し、快適に湯船に体を沈めることができました。
とれとれビレッジは、ドーム状の個室が並ぶ宿泊村です。子どもたちも興奮気味に「ホテル最高!」
去年も書いたけど、4日間のテント生活をしてきたから、ホテルの感動も一入なのですよ。


混雑する入場ゲート

 最終日はアドベンチャーワールドに行きました。
園内の動物たちの写真どぞ。
パンダ「優浜(ユウヒン)」
ぞうさん

ヒグマ(サファリ内)

チーター(サファリ内)






























カンムリヅル














岩に座し虚空を見つめ、何を思ふ





 










下の娘が生まれる前に、アドベンチャーワールドに旅行に来たことがありました。そのときもこのパンダの前で記念撮影をし、自宅にその写真が飾られています。
娘は「私が写ってない!」と、ずっと疎外感を覚えていたようです。アドベンチャーワールドのこのパンダ人形の前で家族一緒に記念撮影をすることは彼女の悲願でした。




そんなこんなで、今年のSummer家族キャンプも終わっていきました。
テントも新調しちゃったので、あと数年は家族キャンプを続けようかとは思います。

ただ、家族キャンプだと、親子間相互にどうしても甘えが生じて、子どもたちのキャンプ体験として、踏み込み不足も感じます。私は5年生で子ども集団でのキャンプに参加しました。そして長男も来年は5年生、さてどうするか。

2013年3月26日火曜日

Mac Book Air (Mid 2011)のWiFi不調の修復

この2,3ヶ月、Mac Book Air (Mid 2011)のWiFiが非常に不安定で、難儀していました。まず、起動した直後はつながらない。液晶パネルを閉じて開けるという作業をしてやると何故か接続することがあるという、不可解な症状でした。

出張用件が銀座に近かったので、アップルストア銀座に立ち寄って相談してみました。
結果としては非常に簡単に修復できました。
/Library/Preferences/SystemConfiguration/
を一旦削除して、再起動する。それだけです。

このディレクトリにネットワーク設定が保存されるらしく、その設定ファイルに何らかの異常があったようです。一旦削除し再起動するとこのディレクトリはクリーンな状態で再生成されるとのこと。ネット検索でも辿り着けたかもしれませんが、さすがアップルストア、解決が早いです。

これで、会議中に液晶パネルを開けたり閉めたりする煩わしさから解放されます。
よかった、よかった。

2013年3月23日土曜日

ブログのURLを変更しました

これまで、このブログのURLは
http://blog.marron.jp/
でしたが、
http://blog.g.marron.jp/
に変更します。
".g"を挿入しただけです。
marron.jpでgoogleサービスを利用するものには、統一して".g"を付けることにしました。

2013年1月11日金曜日

NetCommonsの投稿件名文字数の変更

仕事でNetCommonsというCMSを利用していますが、投稿の件名(title,subject)が全角32字を超えて入力できない設定になっています。セキュリティ上の理由ということですが、32字で収まらないタイトルが少なからず寄せられるものですから、設定をいじって増やします。
NetCommonsのオフィシャルWebサイトフォーラムに設定変更方法が掲載されていました。備忘用に転載。


webapp/config/define.inc.phpにある207行目の

define('_VALIDATOR_TITLE_LEN', 100);

を変更してみてください。

とりあえず、倍の200にしてみました。
設定ファイル変更後は、"管理"->"モジュール管理"で、一括アップデートを忘れずに。