auのiPhoneでの受信メールが文字化けする原因と対策

このQ&Aのポイント
  • auのiPhoneで受信したメールが文字化けする原因と対策についてご教示いただきたいです。
  • Perlの初心者ですが、フォームを使ったメールアドレスの確認プログラムを作成しています。
  • 通常のパソコンではメールが文字化けしないのですが、auのiPhoneで受信すると文字化けしてしまいます。どうすれば文字化けしないようになるでしょうか?
回答を見る
  • ベストアンサー

auのiPhoneでの受信メールが文字化けします。

フリーのCGIをパーミッションを変える程度で設置できる程度のPerl超初心者です。 下のプログラムは、フォームを使って利用者のメールアドレスに送信してメールアドレスの確認のためのに書かれた部分らしいと思いますが、 通常のパソコンでは、届いたメールは文字化けしていません。 しかしながら、私が持っているauのiPhoneでは着信したメールが見事に文字化けしています。 ここより上も下も関係ない感じがするので、この辺りを切り取ってみました。 auのiPhoneで文字化けしないようにするにはどうすればいいのでしょうか? それともこの辺りの記述じゃないのでしょうか? お手数をお掛けしますが、教えてください。 お助けください。 よろしくお願い致します。 if ( $mail =~ /^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+$/ && $mail !~ /[\[\]\,\;\:\\\s\r\n\t]/) { $print .= "<CENTER><BR><BR>$mail宛てにメールを送信致しました。<BR><BR>しばらくたってもメールが届かない場合はメールアドレスが間違っている可能\性があります。<BR><BR>メールが届かない場合は再度お願い致します。<BR><BR>\n"; open(OUT,"| $sendmail -t"); &jcode'convert(*mailcheckkenmei,'jis'); print OUT<<"EOM"; To: $mail From: $mastermail Subject: $mailcheckkenmei EOM print OUT "お客様のメールアドレスを確認しました。\n下記URLにアクセスしてください。\nこのメールに心あたりがない場合はお手数ですが返信してお知らせください。\n\n\n"; print OUT "$basedir/formmail.cgi?query=$encmail"; close(OUT); &print($print); exit; }else{ if ($mail){ $print .= "<p><Font color=\"red\">メールアドレスを確認してください</FONT></p>\n"; } }

  • Perl
  • 回答数1
  • ありがとう数5

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

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

メールを送信するときは。文字コードが非常に重要になります。 Content-Type: ヘッダをつけるようにしてください。 ヘッダをつけたとしても、一部のMUAは正しく認識してくれません。 ISO-2022-JPかUTF-8が無難と思われます。 ソースからヘッダを含めてjisに変換しているようですので、適切なContent-Type: ヘッダがあれば良さそうですね。 (ヘッダを含めてconvertはあまりにも乱暴です。) 複数バイト系の文字列は、(まずあり得ませんが)途中通過するMTAで欠落する場合があります。 7bitで表現できないコードは、BASE64でエンコードしてください。 メール送信の仕組みの基本を理解して、プログラミングされる様、お願いいたします。

auchan2001
質問者

お礼

あんまり分からないですが、このCGIを使うのは止めにしました。 少しずつ勉強していきます。ありがとうございました。

関連するQ&A

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

    サーバーを移転してからある特定のソース部分だけ不具合が出ました。 ユーザーがログイン後特定のユーザーにアドレスを公開せずに、メッセージをおくり、その内容がユーザのアドレスに受信するというものなのですが、 その受信するメイルが文字化けしてしまいます。 その他にサイト上からおなじ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
  • 文字化け

    下記のようなcgiスクリプトがあり、test1.cgi から リンクの test2.cgiを呼ぶと 「リンドウ」が文字化けしてしまいます。 文字化けしないようにするには、どうしたらいいでしょうか。 Perl cgi 初心者です。 --------test1.cgi----------------------------------------- #!/usr/bin/perl print "Content-Type: text/html; charset=EUC-JP\n\n"; $name="リンドウ"; print "name=$name<br>"; print "<a href=\"test2.cgi?aaa,${name},bbb\">test2.cgi</a>\n"; ---------test2.cgi------------------------------------------------- #!/usr/bin/perl print "Content-type: text/html; charset=EUC_JP\n\n"; $query = $ENV{'QUERY_STRING'}; print "query=$query\n";

    • ベストアンサー
    • CGI
  • auで受信した文字化けしたメール

    auで受信した文字化けしたメール auのW64Sでメールを受信したところ、件名と差出人が「???」と文字化けしてしまい見れませんでした。 メールはとあるイベントに応募した際の応募確認メールで、 From:??? Sub:????あいうえお????完了 本文:まったく文字化けなし といった感じで届きました。 差出人はクリックするときちんとアドレスは表示されます。送信元は恐らくパソコンだと思います。 件名は所々きちんと表示されているのですが、大半が?で文字化けです。 本文はまったく文字化けしておらず、最後まできちんと記載されており普通に読めました。 アドレスは送信専用なので、返信しても無駄で、本文内にあった問い合わせ先は平日のみ対応の電話番号となっており、再送をお願いできません。 どうやら件名に受付番号が記載されているらしく、その受付番号が当落の確認に必要なのです。 どうにかして文字化けした部分を確認する方法はありますか?

    • ベストアンサー
    • au
  • 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
  • 文字化け

    以下のように作成して、実際に表示すると文字化けします。 CGIは素人です・・。宜しくお願いします。 # -----ここから出力 ----- print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <HTML> <HEAD> <TITLE>DOUBLE STEAL DESIGN MARKET</TITLE> </HEAD> <BODY background="bg2.gif"> <CENTER> <B><FONT size="4"> <FONT color="red"> <BR> ありがとうございました。 <P> 至急お送りいたします。</FONT> <P> <FONT color="blue">☆</FONT> </B> </CENTER> </BODY> </HTML> END_OF_HTML 実際に表示される文字は・・・  ^0!#(B ;j5^Aw?STDOUT_TOP!#(B !y(B です。お願いします・・・。

    • ベストアンサー
    • CGI
  • Perlからメール送信で文字化け

    Perl5.8からsendmailを使ってメール送信しています。 髙や﨑が入ると文字化けします。文字化けしないようにする方法を教えてください。 #!/usr/bin/perl require 'jcode.pl'; require 'mimew.pl'; $sendmail = '/usr/lib/sendmail'; print"Content-type: text/html\n\n test\n"; if (!(open(OUT,"| $sendmail -t -i -f xxxx\@hogehoge.co.jp"))) { ; } print OUT "To: xxxx\@hogehoge.co.jp\n"; print OUT "From: xxxx\@hogehoge.co.jp\n"; print OUT "Reply-To: xxxx\@hogehoge.co.jp\n"; $subject = "サブジェクト 髙﨑"; $subject = &mimeencode($mail_subject); print OUT "Subject: $mail_subject\n"; print OUT "Mime-version: 1.0\n"; print OUT "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n"; print OUT "Content-Transfer-Encoding: 7bit\n\n"; $honbun = "メール本文 髙﨑"; &jcode'convert(*honbun, 'jis'); print OUT "$honbun\n"; close(OUT);

    • ベストアンサー
    • Perl
  • 中国からのメールが文字化けする。

    中国からのメールが文字化けする。 中国に住む中国人の友人から、 au宛にメールを送ってもらったところ文字化けしてしまいました。 友人のPCは中国のPC。ただし日本語フォントをインストールしているので日本語で打てます。 またメールは中国で有名な無料メールアドレス「~@163.com」を使っている状況です。 私のHOTMAIL宛の日本語メールは大丈夫ですが、AU宛の日本語メールは文字化けしてしまいます。 この場合、どうすれば日本語を文字化けせずにAu携帯に送ることができるでしょうか。 ご存知の方、よろしくお願いいたします。

  • iPhoneから送るメールの文字化けについて

    iPhoneの「メールアプリ」を使用していますが、 頻繁にメールをしている相手から、 数日前に「メールが文字化けしている」と言われるようになりました。 それから、何度か送りましたが、ほとんどが文字化けしています。 その相手は、ガラケーです。 相手のPCアドレスに送ると、正常に表示されるようです。 試しに自分宛にも送ってみましたら、正常に受信できました。 最初からそのような文字化けがあるなら、ともかく、ここ数日になって急なこの現象は、 何が考えられるでしょうか? 機種は、iPhone5S キャリアはdocomoです。 対処法など分かりましたら、アドバイスいただけると幸いです。 どうぞ、よろしくお願いします。

  • CGIにおいて、エンコード・文字化けの対処方法

    以下のようにCGIを記述しております。(本日勉強したてで間違いだらけでしたら申し訳ございません。) ============= #!/usr/local/bin/perl print "Content-type: text/html; charset=EUC-JP\n"; print "\n"; print "<html>\n"; print "<title>Hello CGI</title>\n"; print "<body>\n"; print "<h1>Hello CGI!</h1>\n"; print "<hr>\n"; print qq( 上記のCGIファイルのメッセージは、次のように記述しました。<br><br> #!/usr/local/bin/perl<br><br> print "Content-type: text/html\\n";<br> print "\\n";<br> print "&lt;html&gt;\\n";<br> print "&lt;title&gt;Hello CGI&lt;/title&gt;\\n";<br> print "&lt;body&gt;\\n";<br> print "&lt;h1&gt;Hello CGI!&lt;/h1&gt;\\n";<br> print "&lt;/body&gt;";<br> print "&lt;/html&gt;";<br><br> ); print "</body>"; print "</html>"; =========== 以上をIE7で表示しますと、エンコードが西ヨーロッパ言語になって文字化けを起こしてしまいます。 何か記述の仕方が間違っているのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • perlのcgiが文字化けします。

    perlを使ったcgiを作ろうと思い、こんなプログラムを書いてみたのですが、htmlのタグに囲まれた部分の日本語が文字化けしてしましいます。ファイルの文字列は上手く表示できるのですが… どうすればいいでしょうか。 文字コード判別をしてみたところ、このプログラム自体はShift-JISで書かれているようです。 開いているファイルはutf-8のようです。 #!/usr/bin/perl #ヘッダの表示 print "Content-Type: text/html; charset=utf-8\n\n"; print "<html>\n"; print "<head><title>掲示板</title></head>\n";#これが文字化け print "<body>\n"; print "<input type=\"text\" name=\"mail\" size=\"20\" value=\"\"><br>\n"; print "メッセージ<br>\n";#これも文字化け my $File = 'party0339.html'; if (-e $File) { #####@ファイルを開く…上でファイルが存在してることを確認して開けない場合はエラーメッセージ open(FF,"<:utf8",$File) or die "ファイル:$File を開けない $! \n"; my @FILE = <FF>; close (FF); ####@読み込んだデータを$Dataに格納する foreach (@FILE) { $Data = $_; print "$Data<br>\n"; } } #フッタの表示 print "</body>\n"; print "</html>\n"; exit (); 対策や原因などを教えてくださるとありがたいです。よろしくお願いします。