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での文字化けも解決しました。
ふじさん、びーだまさん、ご教授ありがとうございました。とても勉強になりました(^^)
[上に]
[前に]
[次に]