こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

日本語が入った本文をユーザごとにメール送信したい

1行ごとにユーザの情報が記述された内容を
日本語でユーザごとにメールしたいのです。

file.1の中身
01_hamada 1991/01/01 1st 10 01_hamada@メールアドレス
02_yoshida 1992/02/02 2st 20 02_yoshida@メールアドレス
03_satoshi 1993/03/03 3rd 30 03_satoshi@メールアドレス
04_kinosita 1994/04/04 4th 40 04_kinosita@メールアドレス

test.sh スクリプト
#!/bin/bash

while read line; do
DAY=`echo "$line" | awk '{print $2}'`
RANK=`echo "$line" | awk '{print $3}'`
POINT=`echo "$line" | awk '{print $4}'`
ADDRES=`echo "$line" | awk '{print $5}'`

mail -s test "$ADDRES" < messagebody.txt

done < file.1

messagebody.txtの中身
あなたがテストを受けた日は$DAYです。
順位は$RANKです。
点数は$POINTでした。

OSは
Red Hat Enterprise Linux ES release 4 (Nahant Update 4)
です。これでは日本語ファイルを絡めたスクリプトを
成立させることはできないのでしょうか

このままだと、文字化けして$DAY,$RANK,$POINTが
そのまま文字列として送信されてしまうのです。

なにか良い方法はないでしょうか

投稿日時 - 2009-08-06 16:22:25

QNo.5186773

すぐに回答ほしいです

質問者が選んだベストアンサー

#です。変数が展開されないだけでなく、日本語も文字化けすると言うことですか?
nkfがインストールされていれば、

while read DMY DAY RANK POINT ADDRESS
do
nkf <<ENDOFMAIL | mail -s test "$ADDRESS"
あなたがテストを受けた日は$DAYです。
順位は$RANKです。
点数は$POINTでした。
ENDOFMAIL
done < file.1

nkfが無ければ、
iconf -f 元のコード名 -t iso-2022-jp

投稿日時 - 2009-08-07 22:38:56

補足

進捗ありです!!
#!/bin/bash
DAY=`echo "$line" | awk '{print $2}'`
RANK=`echo "$line" | awk '{print $3}'`
POINT=`echo "$line" | awk '{print $4}'`
ADDRES=`echo "$line" | awk '{print $5}'`

while read DAY RANK POINT ADDRESS
do

nkf <<ENDOFMAIL | mail -s test "$ADDRESS"
あなたがテストを受けた日は$DAYです。
順位は$RANKです。
点数は$POINTでした。
ENDOFMAIL
done < file.1
-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
このように変更したら以下の結果になりました。

あなたがテストを受けた日はrockです。
順位は1991/01/01です。
点数は1stでした。

あと少しがんばります!

投稿日時 - 2009-08-07 23:59:34

お礼

nkfでうまくいきました!!
ありがとうございます。

でも$DAY,$RANK,$POINTの値が
全く認識されないのです

ダブルクォーテンション?や{}で囲んでも
半角で$DAYとしてもでもそのまま
文字列として出てきてしまいます。

あなたがテストを受けた日は$DAYです。
順位は""です。
点数は{}でした。

DAY=`echo "$line" | awk '{print $2}'`
この値も表示させる為には
どうしたらよいでしょうか

投稿日時 - 2009-08-07 23:28:22

ANo.3

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>そのまま文字列として送信されてしまうのです。

そりゃそうです。messagebody.txt にそう書いてあるので。

while read DMY DAY RANK POINT ADDRESS
do
mail -s test "$ADDRESS" <<ENDOFMAIL
あなたがテストを受けた日は$DAYです。
順位は$RANKです。
点数は$POINTでした。
ENDOFMAIL
done < file.1

投稿日時 - 2009-08-06 20:25:06

お礼

DMYがなんだかわかりませんが、
次の回答をいただいた内容で
日本語表示できましたっ
ありがとうございます。

投稿日時 - 2009-08-07 23:19:20

ANo.1

まず、いくつか、基本的なことを、あなたは、見落としています。

1 日本語を表現する文字コードとしては、JIS,Shift-JIS,EUC-JP,UTF-8の4つくらいが、メジャーに使われる文字コードです。あなたの環境・説明では、メールの原文は、なんという文字コードで記述することにしているのか、説明がありません。

2 e-mailの世界で、日本語のメッセージに使われるのは、通常、JIS(ISO-2022-JP)です。

3 mailコマンドに、生のテキストを放り込むだけでは、そのメールには、メッセージの文字コードを示すヘッダー情報が追加されません。ということは、デフォルトで、ASCIIの文字コードとみなすメールクライアントがほとんどですから、これは、文字化けします。
 (詳細は、RFC822wo読んでください)

投稿日時 - 2009-08-06 20:12:50

お礼

ありがとうございます。
文字コードを指定する方法がわからなかったのです。
じわりと勉強してきます。

mailコマンドに一般的なShift-JISコードを指定した
テキストをリダイレクトする方法がわかれば文字化け
しないという認識でよろしいでしょうか。

投稿日時 - 2009-08-07 19:30:31

あなたにオススメの質問