携帯用HPのフォームメールのCGIについて

このQ&Aのポイント
  • 携帯用HPのフォームメールのCGIを変更したら管理者に送られるメールが文字化けする問題について
  • 携帯用フォームサンプルCGIを利用してテストした結果、携帯から送信した人には返信メールが出されているが、管理者側へのPC送信メールが文字化けしてしまう
  • CGIの中で管理者に送信される部分のコードを変更するとCSVなどで管理できるようになり、PCで受信できるようになる
回答を見る
  • ベストアンサー

携帯用HPのフォームメールのCGIについて

携帯用HPのフォームメールにてサンプルCGIを少し(入力項目を若干)変えたら、管理者あてに送られるメールのみ、文字化けをしてしまい、どうしたら直せるのか思案中です。 http://www.deaikensaku.net/o1.shtml 携帯用フォームサンプルCGIを上記のサイトより(上から2番目の「携帯用メール送信フォーム」をダウンロードましたところ、[メールアドレス] [お名前] [内容]という3項目があり、その [お名前→姓] [内容→名(これは、入力タイプを変更し、nameをそのままで利用しました。]と変更をかけて テストしてみたところ、携帯から送信した人には、きちんと返信メールが出されているのですが、管理者側へのPC送信メールが文字化けをしてしまいます。 ※下記メールで管理者に送られている内容です。 (FFFD(�)の部分が「?」という表示になっています。これは、携帯でしか受信して見れないということでしょうか?) --------------------------------------------------- ���� �������� ���� ������ �����[���A�h���X reep@ezweb.ne.jp ���������������� [���M����] 4��19��(��)10��51�� [�z�X�g] softbank218135109108.bbtec.net [IP�A�h���X] 218.135.109.108 [�u���E�U] Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 ���������������� -------------------------------------------------------------- ※ちなみに、CGIの中で、管理者に送信される部分を添付すると、 #自分に送信されるメールです。改造するには↓を変更します。 open (MAIL, "|$mailprog $sendAddress") || die "Can't open $mailprog!\n"; print MAIL "From: $mail\n"; print MAIL "To: $sendAddress\n"; print MAIL "Subject: $subject\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "\n"; print MAIL "$list1\n"; print MAIL "$name\n"; print MAIL "$list2\n"; print MAIL "$goiken\n"; print MAIL "$list3\n"; print MAIL "$mail\n"; print MAIL "\n"; print MAIL "■■■■■■■■\n"; print MAIL "[$DATA]\n"; print MAIL "$data_now\n"; print MAIL "[$USER]\n"; print MAIL "$user\n"; print MAIL "[$IP]\n"; print MAIL "$ip\n"; print MAIL "[$BROWSER]\n"; print MAIL "$browser\n"; print MAIL "■■■■■■■■\n"; close (MAIL); if($FORM{'hensin'} eq "1" ){ &send_mail2(); } exit; } となっています。 ********************************** ただCSVなどで管理できるようにもなっており、管理者側ではPCで受信したいと思っています。 何か、改善方法がお分かりになりましたら、ご協力をお願いいたします。 よろしくお願いいたします。

  • riedd
  • お礼率90% (30/33)
  • CGI
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.2

> Outlook等microsoft系のメーラーでは正常に表示をしておりました。 それはきっと、文字コードの誤りですね。 出力している Content-type: text/plain; charset=ISO-2022-JP というのは、「このメールの文字コードは ISO-2022-JP です」という宣言です。 にもかかわらず、実際にはShift_Jis、EUC-JP、UTF-8 と言ったコードで発信するのはメールの規約に違反ですし、まっとうなメールリーダーでは化けてしまうでしょう。 前回も書いた様に、send_mail2() に中身を良く見ましょう。 そして、文字コードを ISO-2022-JP で送信するメカニズムを突き止めて、マネをすれば良いです。

riedd
質問者

お礼

ありがとうございます。 なかなかプログラムは難しいのですが、別のフォームを(更に長い項目で)作成しておりそちらでも奮闘しており、それも併せてがんばってみたいと思います。 ありがとうございました。

その他の回答 (1)

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

状況説明が良く判らないんですが、こういう事ですか? 1 示されたprintの行列は、管理者宛送信で文字化けする。 2 &send_mail2() の内部でもメール送信は実行されて、こっちは正常。 そうであれば、send_mail2() の中身をよく見て、なぜ正常に送信できるかを理解しましょう。 そうすれば、何がまずいかが見えてくると思います。

riedd
質問者

お礼

上記、ご回答をありがとうございます。 Thanderbirdで受信をしておりましたら、文字化けをしておりましたが、Outlook等microsoft系のメーラーでは正常に表示をしておりました。 原因はわからないのですが、これで対応が出来そうです。 ありがとうございました。

riedd
質問者

補足

ご返信をありがとうございます。 そのとおりです。 先ほど、send_mail2() の中身を管理者宛送信に代入して送信をしたところ、 (管理者アドレスが携帯メールアドレスに送られましたら)、正常に携帯でみることができました。 PCでも見れるようにするのは難しいのでしょうか? 試しにcharsetをISO-2022-JPから、EUC-JPに変更しテストしてみましたが同じ結果でした。 なんどもお伺いして申し訳ありません。

関連するQ&A

  • メールフォームCGIの文字化け。どなたか助けてください。

    こんにちは。メールフォームを作ったのですが、 テスト送信すると文字化けになってしまいます。 それも、短い文章なら、日本語で表示されるのですが、文章がながくなると、一部分が文字化けしてしまいます。ヤフーの長い記事を貼り付けてみたのですが、やっぱり長いと変なところが文字化けしてしてしまいます。また、テストテストテストテスト・・・ とコピペすると、14行目あたりから急に テストテストテストテストテストテストテストテストテ! %9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%9%H%F%・・・・・・・ となってしまいます。いったいどのように書けば文字化けを起こさないで送信できるのでしょうか。。 以下はメールのサブルーチンです。どこがおかしいのでしょうか?ご指導お願いいたします。 sub mail{ $mail_body .= "$mes\n"; $mail_body .= "$mes2\n"; $mail_body .= "$mes3\n"; &jcode'convert(*mail_body,'jis'); $subject2 = &mimeencode($subject); open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n"; print MAIL "From: $from_mail\n"; print MAIL "To: $to_mail\n"; print MAIL "Subject: $subject2\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "$mail_body\n"; close (MAIL); }

    • ベストアンサー
    • Perl
  • メールフォーム

    #!/usr/bin/perl use CGI; $cgi = new CGI(); $from = $cgi->param('from'); $namae = $cgi->param('namae'); $naiyou = $cgi->param('naiyou'); print "Content-type: text/html\n\n"; # 設定 $sendmail = '/usr/lib/sendmail'; $to = '*********@*****************'; #$from = ''; $subject ='************'; # メール送信 open(MAIL,"| $sendmail -t"); # ヘッダ情報出力 print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; # 本文出力 print MAIL " $namae\n\n"; print MAIL " $naiyou\n"; close(MAIL); #確認表示 print " $namae<br><br>"; print " $naiyou<br><br>"; print "メールを送信しました<br>"; exit HTMLで<textarea rows="6" cols="60" wrap="hard" required name="naiyou"> としたのですが Perlで確認表示の$naiyouの所が英語も日本語は改行されません。

    • ベストアンサー
    • Perl
  • 送受信が出来ないメールフォーム

    メールフォームの送信ボタンを押すと Internal Server Errorの画面になり、送受信が出来ません。 jcode.plとcgi-lib.plは書き直していません。 多分form.cgiの書き方が何か違うのだと思います。 下記がform.cgiの中身です。 #!/usr/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*formdata); $subject = "$formdata{'subject'}"; $name = "$formdata{'name'}"; $email = "$formdata{'email'}"; $email = "$formdata{'dayl'}" $12 = "$formdata{'12'}"; $13 = "$formdata{'13'}"; $to = '△@yahoo.co.jp'; $subject = 'メール'; &jcode'convert(*subject,'jis'); open(MAIL, "| /usr/sbin/sendmail -t"); print MAIL "To: $to\n"; print MAIL "From: $email\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "件名:\n$subject\n\nお名前:\n$name\n\nメールアドレス:\n$email\n\n生年月日:\n$day\n\n資料:\n$12\n\n担当者名:\n$13\n\nご相談内容:\n$message\n"; close(MAIL); print "Location: http://△.sakura.ne.jp/12.html\n\n"; exit; 初心者にも分かる様にどなたかご教授をお願いします。 print "Location: http://△.sakura.ne.jp/12.html\n\n"; 部分の12.htmlは送信後に表示するページです。

    • 締切済み
    • CGI
  • メールフォーム設置の仕方を教えてください

    CGI初心者です。 メールフォームは、HPのサンプル版から使いました(市販)。 送信ボタンを押すとエラーになります。プロバイダはOCNです。 http://kataefudousan.jp/contact.html CGI初心者でよく理解ができません。 http://www.ocn.ne.jp/hosting/usersupport/mw/hp_cgi_04.html ↑ CGIスクリプトについて説明があります。(OCN) contact.cgi ↓ #!/usr/lolal/bin/perl use CGIqw(:cgi-lib :standard); print header(); # ご使用のサーバの perl コマンドへのパスを1行目(この上)に書いてください。 # 「#!」 の前には空白、改行などを入れないでください。 # わからない場合は、サーバの管理者へお問合わせください。 ################################################################ # ご使用時に、この下を編集してください。 ################################################################ # sendmail コマンドのパス(サーバ管理者にお問合わせください。) $SENDMAIL = '/usr/lib/sendmail'; ##### メール設定 # 管理者メールアドレス(このアドレスにメールが送信されます。) $ADMIN_MAIL = 'with-a@u01.gate01.com'; # 管理者名前 $ADMIN_NAME = 'サンプル'; # メールサブジェクト ## ユーザあて $USER_SUBJECT = 'フォームメールを送信しました。'; ## 管理者あて $ADMIN_SUBJECT = 'フォームからのメールです。'; ################################################################ # ご使用時に、この上を編集してください。 ################################################################

  • Perl/CGIについて

    #!/usr/bin/perl use CGI; $cgi = new CGI(); $from = $cgi->param('from'); $namae = $cgi->param('namae'); $naiyou = $cgi->param('naiyou'); print "Content-type: text/html\n\n"; # 設定 $sendmail = '/usr/lib/sendmail'; $jcode = './jcode.pl'; $to = 'ha***@***.ne.jp'; #$from = ''; $subject ='名鉄と地下鉄の直通運転'; # 文字コードライブラリの読み込み require $jcode; # メール送信 &jcode'convert(*subject,'jis'); open(MAIL,"| $sendmail -t"); # ヘッダ情報出力 print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; # 本文出力 print MAIL " $namae\n\n"; print MAIL " $naiyou\n"; close(MAIL); #確認表示 print " $namae\n"; print " $naiyou\n"; print "メールを送信しました\n"; end #確認表示の所で表示が改行されない。

    • ベストアンサー
    • Perl
  • 携帯HPのフォーム内容を受け取るCGIって?

    はじめまして。よろしくお願いします。 私は今自分の携帯サイトをつくっているのですが、 アンケートを取ろうと思ったところ,壁に突き当たりました. HTMLでフォームをつくり、ボタンやドロップリストなどを 作ったのですが,受け取るためにはCGIが必要らしいですね。 GETまたはPOSTを使って、携帯から送信された内容を ファイルに保存するためのCGIを配っているサイトを教えていただきたいのです。 私自身,素人ですので,文面で意味不明のところがあると思います。 堪忍ください・・・ よろしくお願いいたします。

  • メールフォームの訪問者情報取得について

    ある会員専用サイトをつくってます。 こんな事を考えているのですが、うまく行きません。 (1)メールフォームから名前・メールアドレスを入力しを送信。 (2)送信を押すと名前・アドレスなどと一緒に以下の情報を取得 ●IPアドレス ※$ENV{'REMOTE_HOST'}) ●OS・ブラウザ情報※$ENV{'HTTP_USER_AGENT'} ●携帯識別番号(携帯会社別) (3)上記の情報より、 LパソコンでアクセスするとIPアドレスをチェックし会員を判別 L携帯電話からだと携帯識別番号で判別 といった仕組みをつくろうと思っています。 メールフォームは自力では無いですが、オープンソースを使用し作成しました。 ※Copyright (C) 1996-2005 杜甫々 様 とほほのWWW入門>メール送信フォーム より $ENV{●●●}を組み込めば入力情報と同時に取得できると思ったのですが、うまく取れません。 十分に理解せず他人様のソースを安易に利用しようとする私が悪い事は多分に承知しておりますが、何卒ご教授お願いします。 ---以下ソース--- #!/usr/local/bin/perl #セッティング require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*in); $name = "$in{'name'}"; $from = "$in{'from'}"; $subject = "$in{'subject'}"; $body = "$in{'body'}"; $to = '●●●@●●.ne.jp'; #送信前処理 &jcode'convert(*name,'jis'); &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); #sendmail open(MAIL, "| /usr/sbin/sendmail -t"); print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "お名前:$name\n"; print MAIL "本文:$body\n"; close(MAIL); #HTML表示の前処理 &jcode'convert(*name,'sjis'); &jcode'convert(*subject,'sjis'); &jcode'convert(*body,'sjis'); $body =~ s/[\r\n,\n]/<BR>/g; #HTMLに表示 print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; print "以下のメールを送信しました<HR>"; print "お名前:$name\n<BR>"; print "メールアドレス:$from\n<BR>"; print "題目:$subject\n<BR>"; print "本文:$body\n<BR>"; print "</BODY></HTML>\n"; exit;

    • ベストアンサー
    • Perl
  • CGIメールフォームの件名について

    ホームページ上にCGIで動作するメールフォームを作成しました。実際にmailform.htmlとmailform.cgiをアップロードして、正常に送信先のメールアドレスにメールフォームの内容が送信されてきました。 しかし届いたメールの件名は(件名なし)と表示されます。 CGIプログラムに関してほとんど知識が無いので、mailform.html mailform.cgiはテンプレートを使用しています。 mailform.htmlの内容に件名を追加して、実際に届くメールに件名が表示されるようにするには、CGIファイルにどう記述すればよいでしょうか。 <mailform.htmlの内容> <TABLE> <TBODY> <TR> <TH nowrap>お問い合わせ内容</TH> <TD colspan="2"><TEXTAREA name="Kansou" rows="5" cols="50"></TEXTAREA></TD> </TR> <TR> <TH nowrap>お名前</TH> <TD colspan="2"><INPUT name="Namae" size="50"></TD> </TR> <TR> <TH nowrap>電子メール</TH> <TD colspan="2"><INPUT name="Mail" size="50"></TD> </TR> <TR> <TH nowrap>電話番号</TH> <TD colspan="2"><INPUT name="Tel" size="50"></TD> </TR> <TR> <TH nowrap></TH> <TD align="center"><INPUT type="submit" value=" 送る "></TD> <TD align="center"><INPUT type="reset" value=" リセット "></TD> </TR> </TBODY> </TABLE> <mailform.cgiの内容> require 'jcode.pl'; #Get the input read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); #Split the name-value pairs @pairs = split (/&/,$buffer); foreach $pair(@pairs) { ($name, $value) = split(/=/, $pair); #Un-Webify plus signs and %-encoding $value=~tr/+/ /; $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $FORM{$name} = $value; if ( $name ne "to" ) { push (@fields, $name) unless (grep(/^$name$/, @fields)); } } # ### 送信フォーマット # $mail_msg = ""; foreach $field (@fields) { $mail_msg = "$mail_msg-----------------------------------------------\n"; $mail_msg = "$mail_msg($field) $FORM{$field}\n"; } $mail_msg = "$mail_msg-----------------------------------------------\n"; # ### ShiftJis to Jis # &jcode'convert(*mail_msg, 'jis'); open(MAIL,"| $mailprog $mailto")|| die "Can't open $mailprog!\n"; print MAIL $mail_msg; close(MAIL); # ### Make the person feel good for writing to us # print "Content-type: text/html\n\n"; print "<HTML><HEAD><TITLE>Thank you!</TITLE></HEAD>\n"; print "<BODY bgcolor=\"#9dffff\">\n"; print "<H2 align=\"center\">送信いただき、ありがとうございました!</H2>\n"; print "</BODY></HTML>\n"; よろしくお願いします。

    • ベストアンサー
    • CGI
  • CGI+Sendmail:メールフォームについてです。

    前提:フォームがあるページのファイル名を「start.html」とします。 CGIとSendmailを用いてフォームを作り、送信ボタンを押すと、私のCGIだと「送信完了」というページが表示されるようにしてあります。そこで、その送信完了というメッセージ(表示)は、小さなウィンドウに表示して、start.htmlのページは変わらないようにしたいのです。 あるいは、小さいウィンドウを出さずに、送信完了というメッセージを表示したら、3秒後に自動でstart.htmlに戻るようにしたいのです。 いずれかの方法でCGIに記述したいと思っています。 追記すればいいソースを教えていただけないでしょうか? (CGI)送信完了のページ等は、 print" ・・・・・ \n"; という書式で書いています。

    • 締切済み
    • CGI
  • 携帯電話とメールフォームCGIについて

    こんにちは。皆様のお知恵を拝借させてください。 現在、HP上にフリーCGIを編集したメールフォームを設置しています。 CGIの動作としては主に以下の2点です。 CGI自体はPC、一部携帯電話での動作を確認しています。 1.送信者がメールフォームから送信 2.送信者に「問い合わせ受領」の自動返信メール配信   受信者に、送信者からの問い合わせ内容メールを配信 ここで困っているのが、携帯電話からの送信です。 フォーム自身、携帯電話には非対応なので多少のエラーは仕方が無いと割り切っていますが、 1点よく分からない事象が起きています。 本来、送信者に自動的に戻る筈の「問い合わせ受領」自動返信メールが 受信者に戻ってきてしまっているのです。 宛先・送信者名共に、受信者に設定している管理用アドレスです(つまり同じアドレス) 送信者はau携帯を利用しているようです(自動返信メールに掲載している内容より確認) とはいえ、auであれば必ず起きる、という事でもありません。 偶然起きた事なのか、それとも環境が揃えば毎回起きるものなのか、 エラーメッセージも何も届かないもので、どのように判断すれば良いのか判じかねております。 もしこのような事例で何かヒントをご存知の方がいらっしゃったら教えて頂ければ幸いです。 本当に初心者のような内容でお恥ずかしい限りなのですが、 どうぞ宜しくお願い致します。 ※一通り過去ログは検索をしてみましたが、もし重複するような内容がございましたら申し訳ありません。

    • 締切済み
    • CGI

専門家に質問してみよう