• ベストアンサー

ヘッダに日本語を使えないはずなのに?

フォームから受け取ったデータを、sendmailでメール送信するときに、ヘッダに日本語を含める場合はBASE64エンコードする必要があるとのことですが、subjectをJISのままで送信しても問題ありませんでした。 現在、fromは化けるのでmimew.plを使ってエンコードしていますが、subjectもエンコードした方がいいのでしょうか?自分宛に送信してみて化けなければ、エンコードの必要はないでしょうか?

  • Perl
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • amiyaki2
  • ベストアンサー率54% (41/75)
回答No.1

必要です。 お願いですから、RFC通りに正しくエンコードして下さい。 以前かかわっていた環境では 世界共通のプラットホームを使っていたため 正しくエンコードされていないと正確な処理ができなかったんです。 subject行はホントにひどくてJISやSJISのまま送られて来るものも少なくありませんでした。  送信者「ほかの人では問題になっていない。」  私たち「ウチは問題です。これは決まりごとでしょ。」 このやり取りは1回や2回ではありませんでした。 すべてのシステムが暗黙に日本語が処理できるわけではありません。 すべてのサーバが日本で管理されているとは限りません。 そのための取り決めです。 本当にお願いです、エンコードして下さい。 すこし感情的になってしまいました。 皆が日本語WindowsとOutlookを使ってる訳でないので、 maomao55さんのテスト環境で表示できるは偶然だと思って下されば幸いです。 http://www.faqs.org/rfcs/rfc2047.html http://www.emaillab.org/essay/japanese-header.html

参考URL:
http://www.faqs.org/rfcs/rfc2047.html
maomao55
質問者

お礼

早速の回答ありがとうございました。

maomao55
質問者

補足

ごめんなさい、もうやりません。 > 皆が日本語WindowsとOutlookを使ってる訳でないので… おっしゃる通りです、スミマセン。

その他の回答 (1)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

エンコードしてください。 自分で受け取って化けてなくてもそれはたまたまです。 他の人が化けないとは限りません。

maomao55
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • 日本語を含むメールヘッダ

    日本語を含むメールヘッダ メール送信時に、日本語などマルチバイト文字をSubjectなどに含めたい場合はMIME、BASE64エンコードしますが、このときの文字数/行の制限に疑問があります。 RFCを見ると1行あたり76文字とされていますが、様々なサンプルや配布スクリプトなどのソースを見ても、それが考慮されていないのです。 たとえばPerlの場合、JcodeやMIME::Base64などを使ってエンコードした文字列を、以下のように使用しているパターンが多いです。 $subject = $jcode->set($subject)->mime_encode; open(MAIL, "| $sendmail"); print MAIL (Fromなど出力) print MAIL "Subject: $subject\n"; print MAIL (その他のフィールド出力) これでは「Subject: 」という文字列の分だけ76文字を超える可能性があると思うのですが…。つまり「Subject: 」も含めてエンコードルーチンに渡さなければいけないと思うのです。 単なるバグかと思ったのですが、結構多くのサンプルなどを見ても同様で、何か理由があるのでしょうか。あるいは本来の手段があるのでしょうか。 そもそも「1行あたり76文字」というのは、フィールド名を含めないのでしょうか。 また、エンコードしない場合の、つまりASCII文字のみの場合の行あたりの文字数制限について、RFCにて見つからなかったのですが、情報や文書番号などご教授いただければ助かります。 よろしくお願いいたします。

  • sendmail実行時のエラー

    受け渡されたパラメーターをセットしてsendmailを実行すると「Premature end of script headers:」というエラーになります。 試しにパラメーターを直セットしてsendmailすると、文字化けはしますが送信はされました。 メールでなく、ファイルに出力してみたところ、 From: " =?ISO-2022-JP?B?GyRCJDUkRiQ1JEYbKEI=?= "<xxxx@xxxx.ne.jp> Subject: =?ISO-2022-JP?B?GyRCIXo7cU5BQEE1YRsoQg==?= この2つだけが文字化けしていて、本文は大丈夫でした。 ソースは以下の通りです。 require './jcode.pl'; # MIMEエンコードライブラリを使う $mimew = './mimew.pl'; ・・・・・略 # MIMEエンコード if (-e $mimew) { require $mimew; $subject = &mimeencode($mail_sub); $from = &mimeencode("From: \"$in{'cname'}\" <$in{'mail'}>"); } else { $subject = $mail_sub; &jcode'convert(*subject,'jis'); $from = "From: $in{'mail'}"; } ・・・・パラメータのコンバート&jcode'convert(データ, 'jis'); ・・・・メール本文($mail_body)のセット $err = 0; open(MAIL,"| $sendmail -t") || $err = 1; print MAIL "To: $mailto\n"; print MAIL $from, "\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n\n"; print MAIL "$mail_body\n"; close(MAIL); 文字化けもですが、まずはエラーを解消するにはどうしたらいいでしょうか。教えて下さい。お願いします。

  • Perlにて、sendmailを使用するがエラー…

    はじめまして、初めて質問させて頂きます、ぷりんと申します。 早速ですが、質問です。 私はPerlにてメールフォームの作成に勤しんでいるのですが、どうしても500エラーが出てしまいます。 サーバーはレンタルサーバーのロリポップを使用しております。 私が不思議に思うのは、メール自体は送信されますが、ページには500エラーと表示されてしまうことです。 以下は実際のコードです。(全文)(一部変更有(メール宛先部分)) #!/usr/bin/perl require "../mimew.pl"; require "../jcode.pl"; $sendmail = '/usr/lib/sendmail'; $to = "hogemoge\@gmail.com"; $from = "test\@test.tet"; $subject = "題"; $body = "メール本文"; # 本文をJISコードへ変換 &jcode'convert(*body,'jis'); # 標題をJISコードへ変換してMIME エンコード &jcode'convert(*subject,'jis'); $subject = mimeencode($subject); open(MAIL,"| $sendmail -t"); print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "\n"; print MAIL "$body\n"; close(MAIL); exit(0); と記述し、こちらのcgiファイルはパーミッション700(ロリポップさんが700で動くので)、アスキーコードでアップロード。 mimew.plとjcode.plどちらも一つ上のフォルダにあります。(パーミッションは644) 以上です。 当方初心者ですので、いろいろ試したのですが、どちらが悪いのか見当つきません・・。 簡単な検索をしましたが、Syntax Errorは見つかりませんでした。 また、いろいろなサイトを参考にしたり、検索したりしましたが、問題解決には至りませんでした。 おそらく初歩的なミスだとは思います・・。 こちらの問題に関してお詳しい方、どうかお手を差し伸べていただけないでしょうか。 何卒、よろしくお願い申し上げます。

    • ベストアンサー
    • Perl
  • Apacheで受信できません

    Apacheを使用して、申し込みフォームで送信したのですが、受信できません。ログではhost not found. missing sender's addressとあります。どうすればよいでしょうか。以下はCGIです。ヤフープロバイダを利用しています。 ********** #! c:/perl/bin/perl require "jcode.pl"; require "mimew.pl"; $SENDMAIL = 'c:\sendmail\sendmail'; # sendmailのパス $MAILTO = '************'; # メールの宛先 # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } # フォームデータの復元 foreach $pair (split(/&/, $query)) { ($key, $value) = split(/=/, $pair); # 文字のデコード $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $FORM{$key} = $value; } # MIMEエンコード $mail_to = mimeencode($MAILTO); $mail_from = mimeencode($FORM{'name'}); $mail_subject = mimeencode($FORM{'subject'}); # 文字コードの変換 $body = jcode::jis($FORM{'msg'}); # メールヘッダーの生成 $header = <<END; To: $mail_to From: $mail_from<$FORM{'email'}> Subject: $mail_subject Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP END # メールの送信 open(MAIL, "| $SENDMAIL -i -t -f $FORM{'email'}") or die("エラー:sendmailへのパイプが開けません"); print MAIL $header, $body; close MAIL; # サーバー出力 print <<END;   中略 END

    • 締切済み
    • CGI
  • 自動返信について

    以下のCGIでは$MAILTO に送信されますが、追加的に、申込者に自動返信(文章つき)をするにはどのように修正するのですか。 #! c:/perl/bin/perl require "jcode.pl"; require "mimew.pl"; $SENDMAIL = 'c:\sendmail\sendmail'; # sendmailのパス $MAILTO = 'のがわ <nogawa@example.net>'; # メールの宛先 # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } # フォームデータの復元 foreach $pair (split(/&/, $query)) { ($key, $value) = split(/=/, $pair); # 文字のデコード $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $FORM{$key} = $value; } # MIMEエンコード $mail_to = mimeencode($MAILTO); $mail_from = mimeencode($FORM{'name'}); $mail_subject = mimeencode($FORM{'subject'}); # 文字コードの変換 $body = jcode::jis($FORM{'msg'}); # メールヘッダーの生成 $header = <<END; To: $mail_to From: $mail_from<$FORM{'email'}> Subject: $mail_subject Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP END # メールの送信 open(MAIL, "| $SENDMAIL -i -t -f $FORM{'email'}") or die("エラー:sendmailへのパイプが開けません"); print MAIL $header, $body; close MAIL; # サーバー出力 print <<END; Content-type: text/html; charset=Shift_JIS <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>めーるふぉーむ</title></head> <body> <p>メールを送信しました。</p> </body> </html> END

    • ベストアンサー
    • Perl
  • Sendmailで送信すると本文にメールヘッダーが出る

    いつもお世話になります。 PerlでSendmail送信プログラムは何回か作ったことが有るのですが、いつもと同じように作っているつもりにも関わらず、送信されたメール本文の1~2行目に Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP が表示されます。 コードは$mailtoや$mail_from、$mail_subjectなどをMIMEエンコードしてから下記の様なコードでメールヘッダーを作成し $header = <<END; To: $mailto Bcc:$mail From: $mail_from<$mail> Subject: $mail_subject Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP END #メールの本文を下記のように作成 $body = <<END; メール本文 END $mbody=jcode::jis($body); #Sendmailで送信する。 open(MAIL, "| $SENDMAIL -i -t -f $mail") or die("ERROR: exec sendmail."); print MAIL $header, $mbody; close MAIL; というコード-です。 なにが原因かおわかりの方宜しくお願いします。

    • ベストアンサー
    • Perl
  • sendmailのFROMに日本語を使う

    CGIからsedmailを呼び出してメールを送信しています。 その時に差出人の部分の日本語が文字化けしてしまいます。 そこで&jcode'convertでjisに変えたのですが、今度は CGIがサーバーエラーになってしまいます。 どうすればよいでしょうか。 スクリプトはこんな感じです。 ----------------------------------------------- $from = '両国'; $subject = 'テスト'; &jcode'convert(*from, 'jis'); &jcode'convert(*subject, 'jis'); &jcode'convert(*msg, 'jis'); $errno = 1 unless open(MAIL, "| /usr/lib/sendmail -t"); return 0 if $errno; print MAIL "To: $MailTo\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "$msg\n"; $errno = 2 unless close(MAIL); return 0 if $errno;

    • ベストアンサー
    • Perl
  • メールヘッダのMIMEエンコードについて

    今、CGIでメールを送信するフォームを作成しているます。 日本語のsubjectを使う場合はMIMEエンコードをしなければいけないと聞いてmime_plsというライブラリで試してみたのですが、受信した結果、「1月1日」→「1 月 1 日」のように半角数字と全角文字の間にスペースが入ってしまいます。 これはどうしたらよいのでしょうか。 コードは以下のように書いています。 $mon = substr($reserveday, 4, 2); $day = substr($reserveday, 6, 2); $subject = sprintf("%d月%d日の件について", $mon, $day); &Jcode::convert(\$subject, 'jis'); $from = &mimeencode($from); $to = &mimeencode($to); $subject = &mimeencode($subject); $contents .= "本文"; &Jcode::convert(\$contents, 'jis'); my $send_buf=''; $send_buf .= "From: $from\n"; $send_buf .= "To: $to\n"; $send_buf .= "Subject: $subject\n"; $send_buf .= "Content-Type: text/plain; charset=iso-2022-jp\n"; $send_buf .= "Content-Transfer-Encoding: 7bit\n"; $send_buf .= "Mime-Version: 1.0\n"; $send_buf .= "\n"; $send_buf .= $contents; # メール送信 open(MAIL,"| $sendmail -t -i -f $from"); print MAIL $send_buf; close(MAIL); よろしくお願いします。

    • ベストアンサー
    • Perl
  • メールヘッダーについて

    perl5.8で メール送信した場合は、以下は必ず ASCII文字ということでしょうか? From, To, Bcc, Replay-To, Return-Path もし日本語が含まれていた場合の書式は以下のようになるということでしょうか? メールヘッダーにはJISに変換するだけでOK?でしょうか? MIMEにする必要があるのでしょうか? 日本語含まれる<test@example.com> <=== JISに変換するだけでOK?

    • ベストアンサー
    • Perl
  • jcode.pmでconvertできない

    UTF-8の文字をエンコードするため、jcode.plでエンコードしたのをjcode.pmに変更しました。 それで、 &Jcode'convert(*subject,'jis'); という記述を Jcode::convert(*subject,'jis','utf8'); にして、sendmailしましたが、文字化けします。 もし、良い対処方法をご存知でしたら、助けてください。 よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう