CGIフォームから飛ばすメールがOEで文字化け

このQ&Aのポイント
  • 以前自社で使われていたフリーのCGIをそのままサイトのリニューアルで使用しているのですが、UTF-8でサイトを作成すると、CGIフォームの文字化けが発生して、いろいろ調べた結果、下記のコードで、解決しました。
  • しかし・・・・・。まさかの「Outlook Express」文字化けが発生しておりました・・・。 私のPCはwindows8のため、確認ができず本当に困っています… コードは下記になるのですが、「Outlook Express」に対応させることは可能でしょうか? 上司のPCに「Outlook Express」が入っているため、確認は最小限に抑えなければいけません(汗)
  • ちなみにCGIは全くの素人です。すみません・・・
回答を見る
  • ベストアンサー

CGIフォームから飛ばすメールがOEで文字化け

以前自社で使われていたフリーのCGIをそのままサイトのリニューアルで使用しているのですが、UTF-8でサイトを作成すると、CGIフォームの文字化けが発生して、いろいろ調べた結果、下記のコードで、解決しました。 しかし・・・・・。まさかの「Outlook Express」文字化けが発生しておりました・・・。 私のPCはwindows8のため、確認ができず本当に困っています… コードは下記になるのですが、「Outlook Express」に対応させることは可能でしょうか? 上司のPCに「Outlook Express」が入っているため、確認は最小限に抑えなければいけません(汗) ちなみにCGIは全くの素人です。すみません・・・ use Jcode; require './mimew.pl'; require './cgi-lib.pl'; $sendmail = '/usr/sbin/sendmail'; # Main処理 $mustflag = 0; $csvflag = 0; $body = ""; $addr = $ENV{'REMOTE_ADDR'}; $host = $ENV{'REMOTE_HOST'}; if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2) || $addr; } my %input; &ReadParse(\%input); @names = keys %input; @names = sort @names; $config = $input{'config'}; require $config; if ($must ne '') { $mustflag = 1; @mustitem = split(/,/, $must); } &readData; if ($input{'action'} eq 'kakunin') { &kakunin; } elsif ($input{'action'} eq 'send') { if ($csvname ne '') { $csvflag = 1; } &crecsv; &sendMail; print "Location: $thanksURL\n\n"; exit; } #--- Read Data --- sub readData { $hidden = ""; foreach $id(@names) { if (($id ne 'config') and ($id ne 'hidden') and ($id ne 'action') and ($id ne 'submit')) { if ($mustflag) { foreach $mt(@mustitem) { if (($id eq $mt) and ($input{$id} eq '')) { print "Location: $errorURL\n\n"; exit; } } } $input{$id} =~ s/\x0D\x0A/\n/g; $input{$id} =~ s/\x0D/\n/g; $input{$id} =~ s/\x0A/\n/g; $input{$id} =~ s/\0/ /g; if ($input{'action'} eq 'kakunin') { $input{$id} =~ s/&/&amp;/g; $input{$id} =~ s/</&lt;/g; $input{$id} =~ s/>/&gt;/g; $input{$id} =~ s/>/&gt;/g; $input{$id} =~ s/"/&quot;/g; #" $hidden .= "<input type=\"hidden\" name=\"$id\" value=\"$input{$id}\">\n"; $input{$id} =~ s/\n/<br>/g; } elsif ($input{'action'} eq 'send') { $input{$id} =~ s/&amp;/&/g; $input{$id} =~ s/&lt;/</g; $input{$id} =~ s/&gt;/>/g; $input{$id} =~ s/&gt;/>/g; $input{$id} =~ s/&quot;/"/g; #" push (@data, $input{$id}); $body .= "[$id]\n$input{$id}\n"; } } } } #--- Confirm Data --- sub kakunin { if (open(IN, $kakunin)){ local $/ = undef; $src = <IN>; close(IN); } else{ &error("$kakuninがありません。"); } print "Content-type: text/html\n\n"; foreach $item(@names) { $str = "<!--%%".$item."%%-->"; $src =~ s/$str/$input{$item}/; } $hidden .= "<input type=\"hidden\" name=\"config\" value=\"$input{'config'}\">\n"; $src =~ s/<!--%%hidden%%-->/$hidden/; print "$src\n"; } #--- Create CSV File --- sub crecsv{ push (@data, $host); push (@data, $addr); if ($csvflag) { $flock = 'lock/'.$csvname; &filelock; $line = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @data; #" open(FH, ">>$csvname") || &error("can't open $csvname:$!"); print FH $line, "\n"; close(FH); rmdir($flock); } } #--- send mail --- sub sendMail{ $body .= "[host]\n$host\n"; $body .= "[IP Address]\n$addr\n"; Jcode::convert(\$subject, 'jis'); $header .= "To: $mailto\n"; $header .= "Cc: $mailcc\n"; $header .= "Bcc: $mailbcc\n"; $header .= "From: $mailfrom\n"; $header .= "Subject: $subject\n\n"; Jcode::convert(\$body, 'utf8'); open(SENDMAIL, "|$sendmail -t -oi") || &error("メール送信に失敗しました。"); print SENDMAIL &mimeencode($header); print SENDMAIL "$body\n"; close(SENDMAIL); } #--- Error --- sub error{ print "Content-type: text/html\n\n"; local($msg) = @_; print &HtmlTop("error"); print $msg; print &HtmlBot(); exit(0); } #--- File Lock --- sub filelock { $SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit"; for ($i = 0; $i < 6; $i++) { if (mkdir("$flock", 0755)) { last; } elsif ($i == 1) { ($mtime) = (stat($flock))[9]; if ($mtime < time() - 600) { rmdir($flock); } } elsif ($i < 6) { sleep(1); } else { &error("File Lock Error"); } } } sub sigexit { rmdir($flock); exit(0); }

  • CGI
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
回答No.1

さらっと見ただけなので外しているかもしれませんが... 受信したメールの本文が文字化けしているということでよろしいでしょうか。 sendMailサブルーチンでbodyをUTF-8にしているのは理由があるのでしょうか? これをjisにしてみたらどうなるでしょうか。

benkei1980
質問者

お礼

lowrider_2005さん ご回答ありがとうございます。 無事解決いたしました! ありがとうございます(T_T) UTF-8にしていたのは、サイトをUTF-8で作成していたからです。しかし、$subjectだけが、UTF-8にすると文字化けが発生したので、jisとしておりました。 bodyは文字化けしなかったので、UTF-8で合っていると思い込んでいました。 本当にたすかりました。 一発確認でなんとかなりました(^^) ありがとうございました。

その他の回答 (1)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

メールは必ずiso-2022-jpにして送信します。 一行の文字数も規定があります。 また、ヘッダ部分はBASE64エンコードしなければなりません。 なお送信フォームの文字コードは(処理できるようにしてあれば)CGI側で処理できますから問題ないですし、FORMのaccept-charset属性で文字コードを指定しておけば良いです。 <form action="./" accept-charset="iso-2022-jp" metod="post">

benkei1980
質問者

お礼

ORUKA1951さん。 ご回答ありがとうございます! 無事解決いたしました。 Jcode::convert(\$body, 'jis');にすることで、 文字化けを防ぐことができました。 もしこれで、また何か問題が発生したときは ORUKA1951さんの方法を試させて頂きます! ご丁寧なご回答、ありがとうございました。

関連するQ&A

  • CGIフォームから飛ばすメールでチルダ文字化け

    フリーCGIで、なんとか、メール送信まで成功したのですが、 一部の文字に文字化けが発生しました。「~」「(株)」などです。 文字化けを確認したのは、アウトルックエクスプレスとサンダーバードです。 が、他のメールクライアントでも文字化けはしていると思います。 1.チルダ(全角)等の文字化け("~ ∥ - ¢ £ ¬ ") 2.機種依存文字が含まれていた場合の対応 CGIに関してはまったくの素人ですので、 専門用語はわからないのですが、 解決方法をご教授いただけると幸いです。 下記が実際に使用しているCGIプログラムになります。 よろしくお願いいたします。 use Jcode; require './mimew.pl'; require './cgi-lib.pl'; $sendmail = '/usr/sbin/sendmail'; # Main処理 $mustflag = 0; $csvflag = 0; $body = ""; $addr = $ENV{'REMOTE_ADDR'}; $host = $ENV{'REMOTE_HOST'}; if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2) || $addr; } my %input; &ReadParse(\%input); @names = keys %input; @names = sort @names; $config = $input{'config'}; require $config; if ($must ne '') { $mustflag = 1; @mustitem = split(/,/, $must); } &readData; if ($input{'action'} eq 'kakunin') { &kakunin; } elsif ($input{'action'} eq 'send') { if ($csvname ne '') { $csvflag = 1; } &crecsv; &sendMail; print "Location: $thanksURL\n\n"; exit; } #--- Read Data --- sub readData { $hidden = ""; foreach $id(@names) { if (($id ne 'config') and ($id ne 'hidden') and ($id ne 'action') and ($id ne 'submit')) { if ($mustflag) { foreach $mt(@mustitem) { if (($id eq $mt) and ($input{$id} eq '')) { print "Location: $errorURL\n\n"; exit; } } } $input{$id} =~ s/\x0D\x0A/\n/g; $input{$id} =~ s/\x0D/\n/g; $input{$id} =~ s/\x0A/\n/g; $input{$id} =~ s/\0/ /g; if ($input{'action'} eq 'kakunin') { $input{$id} =~ s/&/&amp;/g; $input{$id} =~ s/</&lt;/g; $input{$id} =~ s/>/&gt;/g; $input{$id} =~ s/>/&gt;/g; $input{$id} =~ s/"/&quot;/g; #" $hidden .= "<input type=\"hidden\" name=\"$id\" value=\"$input{$id}\">\n"; $input{$id} =~ s/\n/<br>/g; } elsif ($input{'action'} eq 'send') { $input{$id} =~ s/&amp;/&/g; $input{$id} =~ s/&lt;/</g; $input{$id} =~ s/&gt;/>/g; $input{$id} =~ s/&gt;/>/g; $input{$id} =~ s/&quot;/"/g; #" push (@data, $input{$id}); $body .= "[$id]\n$input{$id}\n"; } } } } #--- Confirm Data --- sub kakunin { if (open(IN, $kakunin)){ local $/ = undef; $src = <IN>; close(IN); } else{ &error("$kakuninがありません。"); } print "Content-type: text/html\n\n"; foreach $item(@names) { $str = "<!--%%".$item."%%-->"; $src =~ s/$str/$input{$item}/; } $hidden .= "<input type=\"hidden\" name=\"config\" value=\"$input{'config'}\">\n"; $src =~ s/<!--%%hidden%%-->/$hidden/; print "$src\n"; } #--- Create CSV File --- sub crecsv{ push (@data, $host); push (@data, $addr); if ($csvflag) { $flock = 'lock/'.$csvname; &filelock; $line = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @data; #" open(FH, ">>$csvname") || &error("can't open $csvname:$!"); print FH $line, "\n"; close(FH); rmdir($flock); } } #--- send mail --- sub sendMail{ $body .= "[host]\n$host\n"; $body .= "[IP Address]\n$addr\n"; Jcode::convert(\$subject, 'jis'); $header .= "To: $mailto\n"; $header .= "Cc: $mailcc\n"; $header .= "Bcc: $mailbcc\n"; $header .= "From: $mailfrom\n"; $header .= "Subject: $subject\n\n"; Jcode::convert(\$body, 'utf8'); open(SENDMAIL, "|$sendmail -t -oi") || &error("メール送信に失敗しました。"); print SENDMAIL &mimeencode($header); print SENDMAIL "$body\n"; close(SENDMAIL); } #--- Error --- sub error{ print "Content-type: text/html\n\n"; local($msg) = @_; print &HtmlTop("error"); print $msg; print &HtmlBot(); exit(0); } #--- File Lock --- sub filelock { $SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit"; for ($i = 0; $i < 6; $i++) { if (mkdir("$flock", 0755)) { last; } elsif ($i == 1) { ($mtime) = (stat($flock))[9]; if ($mtime < time() - 600) { rmdir($flock); } } elsif ($i < 6) { sleep(1); } else { &error("File Lock Error"); } } } sub sigexit { rmdir($flock); exit(0); }

    • ベストアンサー
    • CGI
  • cgiログデータ入力

    下記のようなものを作成しました。 if ($FORM{'WORD'} eq 'フォーム'){ &form; } elsif($FORM{'WORD'} eq '確認'){ &kakunin; } elsif($FORM{'WORD'} eq '入力'){ &nyuuryoku; } sub kakunin{ print "<FORM METHOD=POST ACTION=top_nyuuryoku1.cgi>\n"; print "<TABLE CLASS=TABLE2 CELLSPACING=0 CELLPADDING=2>\n"; print "<TR><TD WIDTH=80 CLASS=TD1>社員番号</TD><TD CLASS=TD2>$FORM{'BANGOU'}<INPUT TYPE=HIDDEN NAME=BANGOU VALUE=$FORM{'BANGOU'}></TD></TR>\n"; print "<TR><TD WIDTH=80 VALIGN=TOP CLASS=TD1>本文</TD><TD CLASS=TD2>$FORM{'NAKAMI'}</TD><INPUT TYPE=HIDDEN NAME=NAKAMI VALUE=$FORM{'NAKAMI'}></TR>\n"; print "</TABLE>\n"; print "<BR>と入力されました。これでよければボタンを押してください。<BR><BR>\n"; print "<INPUT TYPE=HIDDEN NAME=WORD VALUE=入力>\n"; print "  <INPUT TYPE=SUBMIT CLASS=BUTTON VALUE=入力>\n"; print "</FORM>\n"; } sub nyuuryoku{ print "入力しました。<BR>\n"; print "<A HREF='top.cgi'>戻る</A>\n"; open (FILE,">>top.log"); flock(FILE,2); @FILES = "$buffer\n"; print FILE @FILES; flock(FILE,8); close(FILE); } ※多少省略あり。 ※$bufferはこれの前のページから受け取ったもの。 kakuninのところの$FORM{'NAKAMI'}ではちゃんと半角スペースや改行が認識されていますが、nyuuryokuになるとだめです。 一体何が原因なのでしょうか?

    • ベストアンサー
    • CGI
  • フォームの内容が1項目目だけ落ちます

    ショッピングカート CGIをカスタマイズしていますが、なにぶん自分で書く事ができずに見よう見まねねでソースをいじっているために行き詰まりました。。。 現状、商品をカゴに入れるボタンを押すと、注文者情報を入れるページに移動します。 情報入力ページにて入力して、確認画面へ のボタンを押すと、確認画面へ移行しますが、 情報確認ページに表示される情報の一行目だけが表示されません。 例えば、 氏名、〒、住所、電話・・・を入力して → 確認画面へボタン 確認画面では、 〒、住所、電話・・・しか表示されません。 ただ、一緒にhidden属性の項目もあり、そちらには一行目からのデータが書き出されており、 次に「メール送信」のボタンを押せばデータはすべて記載された形で送られます。 cgi プログラム 下記の部分でフォームから送られたデータを表示していると思うのですが、どこが悪いのか検討もつきません。 $Count_n = @DATA_N; foreach $n_data ( 1 .. $Count_n - 3 ) { if ( $DATA_N[$n_data] eq 'tax2' || $DATA_N[$n_data] eq 'sougoukei' || $DATA_N[$n_data] eq 'cookie' || $DATA_N[$n_data] eq 'syoukei' || $DATA_N[$n_data] eq 'soryo' ) { next; } $data_name = $data_name2 = $DATA_N[$n_data]; $data_name2 =~ s/^_//g; $data_name2 =~ s/pay/支払方法/g; if ( $DATA_N[$n_data] eq 'pay' ) { $DATA_V[$n_data] =~ s/-(\d+)//g; } print "<dt>$data_name2</dt>\n" ; if ( $data_name =~ /^_/ ) { if ( $DATA_V[$n_data] eq '' ) { print "<dd>必須項目未入力</dd>\n" ; push ( @Hissu,$DATA_N[$n_data] ); } else { print "<dd>$DATA_V[$n_data]</dd>\n" ; } } else { print "<dd>$DATA_V[$n_data]</dd>\n" ; } } print "</dl>\n" ; foreach $num_2 ( 0 .. $Count_n - 6 ) { if ( $DATA_N[$num_2] eq 'cookie' ) { next; } if ( $DATA_N[$num_2] eq 'pay' ) { next; } $DATA_N[$num_2] =~ s/^_//g; print "<input type=\"hidden\" name=\"$DATA_N[$num_2]\" value=\"$DATA_V[$num_2]\">\n"; } print "<input type=\"hidden\" name=\"syoukei\" value=\"\\$v_goukei\">\n"; print "<input type=\"hidden\" name=\"tax2\" value=\"\\$v_tax2\">\n"; if ( $v_soryo ne '' ) { print "<input type=\"hidden\" name=\"soryo\" value=\"$v_soryo\">\n"; } if ( $pay_name ne '' ) { print "<input type=\"hidden\" name=\"pay_tesuryo\" value=\"\\$pay_daikin\">\n"; } print "<input type=\"hidden\" name=\"sougoukei\" value=\"\\$v_sougoukei\">\n"; print "<input type=\"hidden\" name=\"pay\" value=\"$pay_name2\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"sendmail\">\n" ; 初心者の為、万策尽きた感じです。どなたか宜しくお願い致します。

    • ベストアンサー
    • CGI
  • sendmailの文字化け

    フリーのショッピングカートのCGIをダウンロードして使ってみたところ、カート自体は問題なく動きましたが、sendmailで送信した内容が文字化けしています。 件名は $subject = &mail64encode($subject);sub mail64encode { local($subject) = $_[0]; &jcode'convert(*subject, "jis"); …省略… の形でエンコードしているので日本語で表示されています。 本文は if( open(MAIL,"| /$mail_pass1/$mail_pass2/sendmail $email")) { &conv; print MAIL "From: $email\n"; print MAIL "To: $user\n"; print MAIL "Subject: $subject\n"; print MAIL "注文年月日\n"; print MAIL "$date\n"; print MAIL "お名前 $regname\n"; ・・・省略… print MAIL "---------------------------------------------------------------\n"; print MAIL "Remote addr: $ENV{'REMOTE_ADDR'}\n"; print MAIL "Remote host: $ENV{'REMOTE_HOST'}\n"; print MAIL "User Agent : $ENV{'HTTP_USER_AGENT'}\n"; close(MAIL); となっています。 print mail の中身はそのまま出力されるのではないのですか? 別にエンコードが必要ですか? 英数字は問題なく出力されるようですが、日本語は全滅です。 jocode.plを使用しています。 どなたかご教示下さい。

  • ファイヤーフォックスでフォームが文字化けがします。

    お世話になります。 自分で作ったサイトですが、 入力フォームの氏名を書き込んで、それをクッキーに保存して、それを呼び出すと、入力した名前が文字化けしてしまいます。 自分で作ったといっても、無料配布のCGIです。 これはファイヤーフォックスの問題でしょうか? 私の環境は、Windows8.1 です。 ちなみに、その部分の内容は、次の通りです。 print "<FORM METHOD=\"POST\" ACTION=\"./bbs.cgi\" ENCTYPE=\"multipart/form-data\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"modify\">\n"; print "<input type=hidden name=\"no\" value=\"$main_no\">\n"; }else{ print "<FORM METHOD=\"POST\" NAME=\"F1mode\" ACTION=\"./bbs.cgi\" ENCTYPE=\"multipart/form-data\" onSubmit=\"return chuuikakunin()\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"add\">\n"; } 正直なところ詳しいことはよく分かりませんが、 onSubmit=\"return chuuikakunin()\" ↑これは、JavaScriptを使って名前の入力が無いとアラートで知らせるためのものだと思われます。 よろしくお願い致します。

  • CGIの文字化けについて

    CGI初心者ですが、本とネットを調べてメールフォームを作成しています。 テストで作成していた時は何故かうまくいったのですが、 本番用サイトにアップしテストしてみると、自動返信メールが文字化けするようになってしまいました。 送信先は会社側がgmail、お客様側がスマホ(docomo)として自分のスマホに送っていますが、 gmailもスマホも本文のみが文字化けしています。 ネット上でも調べて、件名の文字化けは治すことが出来たのですが、本文がどうしても文字化けしてしまい、治せません。。。 HTMLの文字コードはUTF-8で、CGIもUTF-8Nで保存しています。 ほぼ本を見てそのまま作成し、修正部分だけネットで調べて追記していく、というような感じで 酷い内容のコードになってると思いますが。。 原因がわかる方がいらっしゃいましたら、是非ご教示頂ければと思っています。 また、こんな私に参考になるサイトがあれば教えて頂きたいです。 不明点は出来るだけ補足するつもりです。 宜しくお願いします。 どうかお助け下さい! ------------------------------------------------- 以下がコードです。 #!/usr/local/bin/perl #setting require './lib/cgi-lib.pl'; use lib './lib'; use Jcode; use CGI; use utf8; use Encode; #フォームから入力データ読込 &ReadParse(*in); $name = "$in{'name'}"; $subject = "$in{'subject'}"; $address = "$in{'address'}"; $at = '@'; $domain ="$in{'domain'}"; #★メール送信先★会社側メールアドレス $to = 'kaisya@gmail.com'; #★メール送信者名★会社名 $fromname='株式会社かいしゃ'; #★メール送信者表示アドレス★ $from = 'kaisya2@kaisya2.com'; #★メール送信用タイトル★ $fromsubject = 'WEB会員登録のお申込みありがとうございました'; #★メール送信用内容★ $from_msg = <<END_OF_DATA; WEB会員登録のお申込み、ありがとうございました。 以下のURLへアクセスし、ご登録を進めて下さい。 http://www.kaisya.xxxx また、このメールに心当たりのない方は、このメールは削除して頂きますようお願い致します。 ☆---------------------------------☆ 株式会社かいしゃ HP:http://www.kaisya.xxxx MAIL:kaisya2@kaisya2.com TEL:00-9999-9999 FAX:00-9999-8888 ☆---------------------------------☆ END_OF_DATA $nstatus = 0; $mstatus = 0; $dstatus = 0; #process before send $mailName = Jcode::convert( $name , "utf8", "utf8" ); $mailSubject = Jcode::convert( $subject , "utf8", "utf8" ); $soushin_name = Jcode::convert( $fromname , "utf8", "utf8" ); $from_msg = Jcode::convert( $from_msg , "utf8", "utf8" ); #未入力check if($address eq "" ){ $nstatus = 1; } #mailaddress check if($address =~ /[^a-z0-9_\-\.]/ ){ $mstatus = 1; } #domain check if($domain =~ /^$/ ){ $dstatus =1; } if($nstatus == 1 or $mstatus == 1 or $dstatus == 1){ &mailerror; } #mailaddress $mailaddress = $address . $at .$domain; #sendmail #会社側にメールを送る $soushin_name = encode('MIME-Header-ISO_2022_JP', $soushin_name); open(MAIL, "| /usr/sbin/sendmail -t"); print MAIL "To: $to\n"; print MAIL "From:$soushin_name<$from>\n"; print MAIL "subject: $mailSubject\n"; print MAIL "Content-Type: text/plain; charset=\"iso-2022-jp\"\n\n"; print MAIL "名前: $mailName\n"; print MAIL "e-mail: $mailaddress\n"; close(MAIL); #sendmail2 #送信者側にメールを送る open(MAIL, "| /usr/sbin/sendmail -t"); print MAIL "To: $mailaddress\n"; print MAIL "From:$soushin_name<$from>\n"; print MAIL "subject: $mailSubject\n"; print MAIL "Content-Type: text/plain; charset=\"iso-2022-jp\"\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "{$from_msg}\n"; print MAIL "-------------------------------------\n"; print MAIL "以下の内容で送信されました\n"; print MAIL "名前: $mailName\n"; print MAIL "e-mail: $mailaddress\n"; close(MAIL); #display print "Content-type: text/html;charset=utf-8\n\n"; print "<html>\n"; print "<title>send result</title>\n"; print "<h1>send mail</h1><hr />\n"; print "以下のメールを送信しました<br />"; print "Name: $name<br />\n"; print "email: $mailaddress<br />\n"; print "</body></html>\n"; #サブルーチン メールアドレスにエラー sub mailerror{ print "Content-type: text/html;charset=utf-8\n\n"; print "<html>\n"; print "<title>mailaddress error</title>\n"; print "<body>\n"; print "<h1>send mail</h1><hr />\n"; if($nstatus == 1){ print "メールアドレスが入力されていません。<br />\n"; print "$nstatus<br />\n"; } if($mstatus == 1){ print "メールアドレスを正しく入力して下さい。<br />\n"; print "$mstatus<br />\n"; } if($dstatus == 1){ print "ドメインを選択して下さい。<br />\n"; print "$dstatus<br />\n"; } print "<a href=\"javascript: history.back()\">戻る</a><br />\n"; print "</body></html>\n"; exit; } exit;

    • ベストアンサー
    • CGI
  • メールフォームで件名のみ文字化け

    質問させて頂きます。 初心者なので見当違いな事も書くかもしれませんが、ご容赦ください。 自社HPで今まで問題なく稼動していたメールフォームが、 Notesのバージョンアップをしたらいきなり件名のみ文字化けするようになってしまいました。 お客様に行く自動返送メールの件名も文字化けしてしまっていて困っています。 何か対策は考えられますでしょうか? ちなみに下記がフォームのhtmlです。 <script type="text/javascript" src="docu/mailform.js" charset="Shift_jis"></script> <form id="mailform" action="docu/send.cgi" method="post" name="mailform"> <input type="hidden" name="sendmail" value="/usr/sbin/sendmail"> <input type="hidden" name="mailto" value="email"> <input type="hidden" name="mailto" value="xxxxxx@xxxx.xx.xx"> <input type="hidden" name="subject" value="資料請求メール"> <input type="hidden" name="return_subject" value="資料請求ありがとうございます "> 以上です。<head>には <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS"> の記述もあります。 CGIはフリーCGIを使っています。 宜しくお願いします。

    • ベストアンサー
    • CGI
  • htmlで呼び出したCGIの出力が文字化けする

    下記のInput.cgiというスクリプト(改行コードLF, 文字コードUTF-8) ---------------- #! /usr/bin/perl $method = $ENV{'REQUEST_METHOD'}; if ($method eq 'POST') { read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } elsif ($method eq 'GET') { $buf = $ENV{'QUERY_STRING'}; } print "content-type: text/html\n\n"; print "メソッドは$methodでした。<br>\n"; print "受け取ったデータは$bufでした。\n"; ---------------- があります。これをブラウザで見ると(入力なしのまま) 「メソッドはPOSTでした。  受け取ったデータはxxxでした」 と正常に表示されます。 次に次の内容のhtml(改行はLF,文字コードはShiftJIS) ------------- <html><head> <title>FORMによるデータ転送</title></head> <body> <form method="POST" action="myInput.cgi"> <input type="text" name="text"><br> <input type=submit value="送信"> <input type=reset value="取消"> </form></body></html> -------------- をブラウザで表示させ、inputボックスに英数字(または日本語)を入力し、「送信」をクリックすると、今度はCGIスクリプト中の日本語を含めて総ての日本語出力が文字化けしてしまいます。 これが起きるのは、htmlとCGIの文字コードが異なるからでしょうか? 文字化けを止めるには何をすればよいのでしょうか? 教えて下さい。お願いいたします。

  • メイルフォームの本文が文字化け

    サーバーを移転してからある特定のソース部分だけ不具合が出ました。 ユーザーがログイン後特定のユーザーにアドレスを公開せずに、メッセージをおくり、その内容がユーザのアドレスに受信するというものなのですが、 その受信するメイルが文字化けしてしまいます。 その他にサイト上からおなじCGIファイルを利用して、管理者などにおくるメイルは正常に機能しています。 ■不具合が出ている部分のソースです。 if (!open(OUT,"| $SENDMAIL -t")) print OUT "Reply-To: $ADMIN\n"; print OUT "Errors-To: $ADMIN\n"; print OUT "To: $MAIL_TO\n"; if ($BCC == 1){ print OUT "Bcc: $ADMIN\n"; } print OUT "From: $ADMIN\n"; &jis("Subject: $SUBJECT"); print OUT "$msg\n"; print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT 'Content-Type: text/plain; charset=iso-2022-jp' . "\n\n"; &jis("$NAME_FROM:$FORM{'MSG'}"); print OUT "$msg\n"; &jis("▽返事はココから"); print OUT "$msg\n"; &jis("$bbs_cgi1?M=H&T=$ID_FROM&I=$ID_TO&PASS=$PASS_TO"); print OUT "$msg\n"; close(OUT); } print "Content-type: text/html\n\n"; print "<html><head><title>$TITLE</title></head><body>■送信完了<HR> $NAME_FROMさんより$NAME_TOさんへメール送信完了しました。<hr>\n"; print "[<a href=$menu_cgi?mode=menu&I=$MYID&PASS=$MYPASS>メニューに戻る</a>]<br>\n"; print "</body></html>\n"; exit; } ■文字化けは aika!' (Basd "&JV;v$O%3%3$+$i (B ような感じです。 かなりいろいろ探してみたのですが、だめなので ここに投稿しました。 わかる方いらっしゃいましたら、どうぞご回答いただければと思います。よろしくお願いします。

    • 締切済み
    • CGI
  • アンケートフォームに機能の付け加え。

    ホームページ上で、訪問者からアンケートを採れるsendmailを使用した CGIを設置しています。ここに、訪問者から簡単な素材を提供して頂けるよう 以下のようなスクリプトに、小さなファイル(gif画像など)を 添付して送れるように機能を付け足したいです。 どうすればいいか、困っています。どうすればよいでしょうか? @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); if ($name eq 'to') { $to = $value; } if ($name eq 'from') { $from = $value; } if ($name eq 'subject') { $subject = $value; } if ($name eq 'body') { $body = $value; } } # cheack if ($from eq "") { $from = "unknown\@."; } if ($from eq " ") { $from = "unknown\@."; } # send mail &jcode'convert(*from,'jis'); &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); if (!(open(MAIL,"| $sendmail -t"))) { &error('システムエラー','メールの送信に失敗しました。'); } print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain; charset=iso-2022-jp\n\n"; print MAIL "$body\n"; close(MAIL); # view html &jcode'convert(*from,'sjis'); &jcode'convert(*subject,'sjis'); &jcode'convert(*body,'sjis'); $body =~ s/\r\n/\r/g; $body =~ s/\n/\r/g; $body =~ s/\r/<BR>/g;

    • 締切済み
    • CGI

専門家に質問してみよう