sendmailで送信したメッセージがMacで文字化けするのですが

[上に] [前に] [次に]
ちゃん [E-Mail] 2000/03/18(土) 13:03:40
CGIで作成したメッセージを訪問者に送信しています。
その際、半角の"・"がWinで受信すれば問題ないのですが、Macだと半角"%"に文字化けしてしまいます。
メッセージ
$comment= "こんにちは・・・"
これを
&jcode'convert(*comment,'jis');
でJisに変換して送信しています。
Macに送る場合には、他に特別なことをしなければならないのでしょうか?
そもそも、半角カタカナのように「・」も使うべきではないのでしょうか。
解決法・回避法をお教えください。よろしくお願いします。

びーだま [E-Mail] 2000/03/18(土) 19:46:44
質問中に読めない文字があるので、何を使うべきでない
と言っているのかわからないんですが・・・(^^;

とりあえず、メールを送るCGIみたいな場合は、俗に
機種依存文字と言われる類のコードはすべて、■とか
何か別な文字に変換してしまったほうがよいですね。

あとは、Subject: ヘッダーに日本語を書くときは、
単純に JIS にしただけでは駄目です。

詳しい説明は、面倒くさいので割愛しますが、JISにした
ものをMIMEエンコードして、それをBエンコードで括る
みたいな操作をしなきゃならんのです。

面倒くさいので、ヘッダーには、ASCII を使うのが吉です。

本文は、上記の様なフィルター後、JISにしておけば、問題
ないと、思います。

ちゃん [E-Mail] 2000/03/18(土) 23:27:30
びーだまさん、回答ありがとうございます(^^)

>質問中に読めない文字があるので、何を使うべきでない
>と言っているのかわからないんですが・・・(^^;
すいません。分かりづらい例をあげてしまいました。
化けるのは、びーだまさんが上記でお使いの
>わからないんですが・・・
の「・・・」部分です。これの半角(^^;
わからないんですが・・・→わからないんですが%%%
になります。

過去ログを見ると、Subject: ヘッダーに日本語を書くのは大変そうだったので、まずはメッセージ部の文字化けをなんとかしたいです。(いずれはヘッダーに日本語も使いたいのですが・・・)
まず、メッセージをJISにしたあと、mimew.plでMIMEエンコードすればよいですか?
次のBエンコードで括るというのは、どうやってやれば良いのでしょうか?
そのやり方を教えていただけると助かります。
どうかよろしくお願いします。

ふじ 2000/03/19(日) 00:29:49
半角の・(中黒)は、機種依存文字です。なので、Windows 以外の環境では化けます。
エンコードの問題とかではないです。

Subject に日本語を使うのは、mimew.plがあれば簡単。
ヘッダが $header という変数に入っているなら、
$header = &mimeencode($header);
でOKです。
#厳密には RFC を満たしてないそうですけど。

厳密にやるなら、
http://www.din.or.jp/~ohzaki/perl.htm#JP_Base64
を参考に…

ちゃん [E-Mail] 2000/03/19(日) 01:43:24
ふじさん、ありがとうございます(^^)
半角の・は機種依存文字なんですね・・・。知りませんでした・・・(--;
全角ならOKなんですよね?さっそく全て置換します。

Subjectの日本語使用は、
$header = &mimeencode($header);
だけでいけるんですね!
これも早速試してみます。厳密な方法はなんだか凄いので、後程じっくり勉強します(^^;

本当ならここで解決・・・なのですが、もう一つ関連してお尋ねしたいことがあるので、すみませんがお願いします。

メール送信でコマンドライン入力のFromとToは見かけ上の宛先だと聞きました。ということは、
if (open(OUT,"| $sendmail $userMail")) {
と、sendmailに送信先アドレスを指定すれば、

print OUT "From: 人名\n";
のように、From部に任意の名前を設定できるんですよね?
実はキャラクター系の自動メール送信ゲームを作っているので、Fromにそのキャラクターの名前を入れられたら面白いなと思ったのです。それも漢字で・・・。

試しに
print OUT "From: CHARANAME\n";
と英字を設定したら、
CHARANAME@cgi15.interq.net
という有り得ないアドレスが入って送られてきました。(設置サーバーはinterQです)
できればこれを、人物名 もしくは、人物名<abc123@xxx.or.jp>のようにしたいのですが、これは可能でしょうか?
どうかご教授ください。よろしくお願いします。

ふじ 2000/03/19(日) 01:59:36
$sender = "aaa@bbb.ccc"; # これは実在するアドレス(エラーメールが返る宛先だから)
$From = "日本語 <aaa@bbb.ccc>"; # ヘッダに記載される From 行

open(OUT,"| $sendmail -f $sender $userMail");
print OUT , "From: $From\n";

こんな感じでできるのでは? InterQ のことは知らないのですが。

ふじ 2000/03/19(日) 02:02:45
あ、MIMEエンコードしないと(^^;

> print OUT , "From: $From\n";

$header = "From: $From\n";
$header .= "To: xxx\@yyy.zzz";
$header .= "Subject: $subject\n";

print OUT, &mimeencode($header);

ちゃん [E-Mail] 2000/03/19(日) 03:36:58
[[解決]]
できました!!
ちゃんと差出人に日本語名が入っていて、なんだか面白かったです(笑)
Macでの文字化けも解決しました。
ふじさん、びーだまさん、ご教授ありがとうございました。とても勉強になりました(^^)

[上に] [前に] [次に]