• 締切済み

メールの件名のデコード

お世話になります。 メールの件名が「登録」のもののみ、以降の処理をしようとしています。 $n_msg = $pop3->numMsg(); $header_list = $pop3->getParsedHeaders($n_msg); $subject = mb_decode_mimeheader($header_list['Subject']); print "$subject<br>"; としても「??」と表示され、 「登録」に戻りません。 if($subject <> "登録") なら、対象外とするという処理に したいのですが、どうすればいいでしょうか? ちなみに、、 $header_list['Subject']は、 =?iso-2022-jp?B?GyRCRVBPPxsoQg==?= です。 よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

phpの内部エンコーディングが、想定してるものと違っているのでは。 mb_internal_encoding() の戻り値が、望みの値と違っていたら、それをセットしてから、 mb_decode_mimeheader() してみるとか。

関連するQ&A

  • PEAR--Net_POP3。phpで受信メールの表示

    初めて質問します。 ものすごい初心者ですので、すごい簡単な返答をお願いします。 環境は自分で作ったサーバです。 Lunux centos PEAR Net_POP3 インストール済み(確認済) utf-8 PEARのライブラリで、Net_POP3を使用し、phpで、書いてみたのですが、私が参照したページの見本より、作成したPHPでは、動かないのです。何がいけないのでしょうか? 下記の様にPHPを記入して、サーバ接続は、ドメインを書き換えると接続できなく、しっかり記入すると、接続可能です。 ですが、ログイン部分は、パスワードをわざと間違えて記入しても、ログイン可能と表示されてしまいます。 ログイン部分がおかしいのか。それとも、エンコードの部分もおかしいのか、わかりません!みなさんのお力添えを!! <?php require_once('Net/POP3.php'); $account = array( 'host' => 'mail.私のドメイン', 'port' => '110', 'username' => 'メールアカウント', 'password' => 'メールパスワード', ); $pop3 =& new Net_POP3(); if($pop3->connect($account['host'], $account['port'],LOGIN)){ echo "接続OK!<br>"; }else{ echo "接続NGNGNG!<br>"; } if($pop3->login($account['username'], $account['password'],LOGIN)){ echo "接続OK!<br>"; }else{ echo "接続NGNGNG!<br>"; } $n_msg = $pop3->numMsg(); $header_list = $pop3->getParsedHeaders($n_msg); $body = mb_convert_encoding($pop3->getBody($n_msg), "utf-8", "jis"); $body = htmlspecialchars($body, ENT_QUOTES, "utf-8"); $pop3->disconnect(); echo "<dl>"; echo "<dt>差出人</dt><dd>".mb_decode_mimeheader($header_list['From'])." </dd>"; echo "<dt>件名</dt><dd>".mb_decode_mimeheader($header_list['Subject'])." </dd>"; echo "<dt>本文</dt><dd><pre>".$body."</pre></dd>"; echo "</dl>"; ?>

    • 締切済み
    • PHP
  • Net_POP3 メール一覧のソート

    Net_POP3を使用してメールの閲覧を作成しています。 現在は日付の古いものから新しいものへと表示されています。 これを日付の新しいものから古いものへと表示をさせたいのですが、sortがうまくできず困っています。 ご存知の方がいらっしゃいましたらご教示お願いします。 ソースは下記になります。 $count = $pop3->numMsg(); if ($count) { $count = $pop3->getListing(); $start = 1; $end = 21; if ($count !== false) { foreach ($count as $key => $value) { if($start < $end) { $overview = $pop3->getParsedHeaders($start); $body = $pop3->getBody($start); $from = mb_decode_mimeheader($overview['From']); $from = mb_convert_encoding($from, "UTF-8", "JIS"); $subject = mb_decode_mimeheader($overview['Subject']); $subject = mb_convert_encoding($subject, "UTF-8", "ISO-2022-JP"); $subject = mb_strimwidth($subject, 0, 42, "...",'UTF8'); $date = mb_decode_mimeheader($overview['Date']); $body = nl2br($body); $maillist .= '<tr>'."\n"; $maillist .= '<td>'.$subject.'</td>'."\n"; $maillist .= '<td>' .$from. '</td>'."\n"; $maillist .= '<td>' .date('Y/m/d H:i:s',strtotime($date)). '</td>'."\n"; $maillist .= '</tr>'."\n"; $start++; } } } } 宜しくお願いします。

    • 締切済み
    • PHP
  • mail()でメール送信で、特定のメーラーの受信のみ件名が文字化け

    PHPでメール配信プログラムを作っております。 配信テストを行なったのですが、特定のメーラーで件名が文字化けしてしまう現象に見舞われしてしまい、対処法を探しております。 ■テストメーラー 1、OutlookExpress 2、EdMax 3、Thunderbird ■ソース(一部抜粋) mb_language('Japanese'); mb_internal_encoding("SJIS"); //1 $subject = mb_encode_mimeheader($subject); //2 $subject = mb_convert_encoding($subject,"JIS","SJIS"); $send_body = mb_convert_encoding($send_body,"JIS","SJIS"); $header = "From: $fronmail.\n"; $header .= "Return-path: $return\n"; $header .= "Reply-To: $fronmail.\n"; //3 $header .= "Subject: $subject\n"; $header .= "Message-ID: {$MessageID}\n"; $header .= "MIME-Version: 1.0\n"; $header .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; //4 $header .= "Content-Transfer-Encoding: base64\n"; $header .= "X-Mailer:PHP/".phpversion(); $chk_mail = mail($to_email,$subject,$send_body,$header); ■設定値 $body = $subject = "日本語テスト"; メールアドレスはプロバイダなどが発行しているもの ■現象 ソースのままだと1、2は件名は文字化けせず、3は文字化け(???{????? ※?はひし形に囲まれた?です)します。 それぞれコメントアウトを外したり切り替えたりするのですが、1、2も件名が文字化けになったりします。 3は基本的にどのコメントアウトを有効にしても文字化けのままです。 $subjectに関しては、mail関数のものが優先のようでして、試しに空にしてみたのですが、件名も空のままでした。 何故この形式を取っているかというと、半角カナを使いたいが為でして、mb_send_mailだと半角カナが使えなかったような気がしてmailを使っております。 あと、popenで直接コマンドを打つという手もありそうですが、sendmailではなくpostfixなのですがpostfixでコマンドをという手段を探した方が良いのでしょうか? 出来ればmailを使って文字化けもしない方向を希望なのですが、それが駄目なら他の手段など誘導していただければ幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • メールフォームの件名が文字化けします

    PHPでメールフォームを作っていて、以前のサーバーではエラーも無く動いていたのですが、新しいサーバーでは件名がどうしても文字化けしてしまいます。(※本文も化けていましたが解決しました) 色々調べて色々試してみたのですが上手く動作せず・・・ 以下にPHPの必要と思われる部分を書いておきますので、ご解答の程よろしくお願いいたします。 ちなみにPHPのバージョンは4.4.2です。 <?php header("Content-Type:text/html;charset=Shift_JIS"); ?> <?php $mailto = "aaa@bbb.ccc" $subject = "フォームからのメール"; ~各種設定・エラーチェック等省略~ $body=mb_convert_encoding($body,"Shift_JIS","ASCII.JIS,UTF-8,EUC-JP,SJIS"); $subject=mb_encode_mimeheader($subject,"ISO-2022-JP"); if($from_add == 1) { $from = $_POST['E-mail1']; $header="From: $from\nReply-To: ".$_POST['E-mail1']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } else { $header="Reply-To: ".$_POST['E-mail1']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } if($mailcheck == 0 || $sendchk == 1) { mb_send_mail($mailto,$subject,$body,$header); if($remail == 1) { mb_send_mail($reto,$resubject,$rebody,$reheader); } } else { htmlHeader(); ?> ~送信確認画面レイアウト・その他処理省略~ <?php } ?>

    • ベストアンサー
    • PHP
  • PHPでmb_send_mail()関数を使っときの件名について

    PHPでmb_send_mail()関数を使っときの件名について mb_send_mail()でメールの送信はできるのですが、件名(Subject)を日本語にすると8文字以上送信すると送信エラーが起こります。同じプログラムをLinuxでやるとうまくいきます。プログラムは以下のようにしています。(mail()関数を使うとこのような問題は起こりませんでした。) mb_language('Japanese'); $subject='メールテスト'; $subject=mb_convert_encoding($subject,'ISO-2022-JP','UTF-8'); $message='Webメールのテストです。'; $message=mb_convert_encoding($message,'ISO-2022-JP','UTF-8'); $head='私から送信されました。<****@****.net>'; $head=mb_convert_encoding($head, 'ISO-2022-JP', 'UTF-8'); $head=mb_encode_mimeHeader($head,'ISO-2022-JP','B'); if(mb_send_mail('****@****.com',$subject,$message,'From:'.$head)){ echo 'おくったよ。<br>'; } else{ echo 'おくれない。'; }  件名の全角での文字数を増やす方法があったら教えてください。  よろしくお願いいたします。 <システム環境>  Windows7(64Bit)  Apache2.2  PHP5.3.2

    • ベストアンサー
    • PHP
  • 掲示板からのメールの本文中に件名が表示

    http://genesis.vis.ne.jp/cgi/i/f_board/ ここで配布しているフリースクリプトを設置したのですが 書き込みに対してメールを送ると、メール本文に件名が 表示されていて、本来の件名部分には「無題」と なってしまいます。 以下がメール送信部分だと思うので貼り付けました。 おかしいところがあったら教えてください。 sub sendmail_ { $subject="$FORM{'SYSTEM14'}"; &jcode'convert(*subject, "jis"); #&jcode'convert($SYSTEM[14], "jis"); open (MAIL,"| $SYSTEM[12] -t -f $SYSTEM[13]") || &error("sendmailが使用できませんでした。"); print MAIL "To: $tomail\n"; if ($SYSTEM[9]) { print MAIL "Bcc: $SYSTEM[13]\n"; } print MAIL "From: $frommail\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n"; print MAIL "$dateに$fromnameさんから$tonameさんに送信がありました。\n"; print MAIL "+-+-+-+-+-+-+-+\n"; print MAIL "mail: $frommail\n"; print MAIL "+-+-+-+-+-+-+-+\n"; print MAIL "$title\n"; print MAIL "-+-----+-\n"; print MAIL "$message\n"; print MAIL "+-+-+-+-+-+-+-+\n"; if ($SYSTEM[11]) { print MAIL "HOST:$host\n"; print MAIL "IP:$ip\n"; print MAIL "+-+-+-+-+-+-+-+\n"; } print MAIL "$SYSTEM[2]\n"; print MAIL "$SYSTEM[3]\n"; close (MAIL); $_ = ""; }

  • smtpでメール送信

    いつもお世話になっております。 mail()、mb_send_mail() が使用できないため、smtp から 直接メール送信をしようと考えております。 (なぜ、mail()、mb_send_mail() が使用できないのかはわかりません。) // 件名 $subject = mb_convert_encoding($subject, "JIS", "EUC-JP"); $subject = '=?iso-2022-jp?B?' . base64_encode($subject) . '?='; // 本文 $msg = mb_convert_encoding($msg, "JIS", "EUC-JP"); // 送信 $fp = fsockopen('localhost', 25, $err_str, $err_no, 5); $header = "From: " . $from . "\r\n"; $header .= "To: " . $to . "\r\n"; $header .= "Reply-To: " . $from . "\r\n"; $header .= "Subject: " . $subject . "\r\n"; $header .= "Mime-Version: 1.0\r\n"; $header .= "Content-Type: Text/Plain; charset=iso-2022-jp\r\n"; $header .= "Content-Transfer-Encoding: 7bit\r\n"; fputs($fp, "HELO " . $smtp . "\r\n" ); fputs($fp, "MAIL FROM:" . $from . "\r\n"); fputs($fp, "RCPT TO:" . $to . "\r\n"); fputs($fp, "DATA \r\n"); fputs($fp, $header . $msg . "\r\n.\r\n"); fputs($fp, "QUIT \r\n"); 上記のように書きました。 一回目は送信できるのですが、二回目以降が送信できません。 サーバを再起動するとまた送信できるようになるのですが、 二回目以降はやはり送信できません。 何か原因が考えられますでしょうか。 ご教示よろしくお願いいたします。

    • 締切済み
    • PHP
  • 画像の添付ファイルをメールで送信する

    頑張って、作ったけど、うまくいかないよぉ・・・ だれか、たすけてくださぃにゃん。 //メールのヘッダ $header = "Cc:$cc\n"; $header .= "From:$from\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; $header .= "MIME-version: 1.0\n"; if(file_exists($upfile)){ //アップファイルがあれば $header .= "Content-Type: multipart/mixed;\n"; $header .= "\tboundary=\"$boundary\"\n"; $msg .= "This is a multi-part message in MIME format.\n\n"; $msg .= "--$boundary\n"; $msg .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $msg .= "Content-Transfer-Encoding: 7bit\n\n"; }else{ $header .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; } $msg .= "本文だよ\n"; //ファイルの読み込み if(file_exists($photo1)){ $fp = fopen($photo1, "r") or die("error"); $contents = fread($fp, filesize($photo1)); fclose($fp); $f_encoded = chunk_split(base64_encode($contents)); //エンコードして分割 $msg .= "\n--$boundary\n"; $msg .= "Content-Type: " . $photo1_type . ";\n"; $msg .= "\tname=\"$photo1_name\"\n"; $msg .= "Content-Transfer-Encoding: base64\n"; $msg .= "Content-Disposition: attachment;\n"; $msg .= "\tfilename=\"$photo1_name\"\n\n"; $msg .= "$f_encoded\n"; } $msg .= "--$boundary--"; //メール送信を実行する mb_send_mail( $to, $subject, $msg, $header );

    • 締切済み
    • PHP
  • 件名が文字化けしてしまう。PHPで送信フォームを作成しましたが件名が?

    件名が文字化けしてしまう。PHPで送信フォームを作成しましたが件名が?????と 文字化けします。 <? require_once("./lib/form_check.lib"); $type = $_POST['type']; $company = $_POST['company']; $industry = $_POST['industry']; $post = $_POST['post']; $name = $_POST['name']; $address = $_POST['address']; $tel = $_POST['tel']; $mail = $_POST['mail']; $detail = $_POST['detail']; type_name($type); $to = "■■■@■■■■"; $subject = "お問い合わせ"; $header= "From:".$mail; $msg ="────────────────────────────────────────────\n"; $msg .="■お問い合わせ内容\n".$type_name."\n\n"; $msg .="■会社名\n".$company."\n\n"; $msg .="■業種\n".$industry."\n\n"; $msg .="■役職・部署名\n".$post."\n\n"; $msg .="■氏名\n".$name."\n\n"; $msg .="■住所\n".$address."\n\n"; $msg .="■電話番号\n".$tel."\n\n"; $msg .="■メールアドレス\n".$mail."\n\n"; $msg .="■お問い合わせ詳細\n".$detail."\n"; mail($to,$subject,$msg,$header); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <title>お問い合わせ</title> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> これではダメなので mb_language("japanese"); mb_internal_encoding("EUC-JP"); mb_send_mail($to,$subject,$msg,$header); と付け足しました。 これで件名が????になるのはふせげたのですが今度は送信後のページ全体が 文字化けとなりお手上げ状態です。 どう組めばいいのでしょうか?

    • 締切済み
    • PHP
  • Gmailへのメール送信で文字化け

    PHPでフォームメールの作っているのですが、Gmailで送信したメールを受け取ると□□□□□というように文字化けが起こっていまいます。 アウトルック、ホットメールなどは大丈夫なのですが、グーグルのGmailだけ駄目なようです。なぜ文字化けするのでしょうか? mb_language("Ja"); $header = "From: reminder@aaa.com\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n"; $header .= "Content-Transfer-Encoding: base64"; $to = "aaa@gmail.com"; $subject = "送信テスト"; $body = "本文テスト本文テスト"; $subject = base64_encode($subject); $subject = mb_convert_encoding($subject,"ISO-2022-JP"); $subject = "=?ISO-2022-JP?B?" . $subject . "=?="; $body = base64_encode($body); $body = mb_convert_encoding($body,"ISO-2022-JP"); $success = @mail($to,$subject,$body,$header); if($success) print "成功"; else print "失敗";

    • ベストアンサー
    • PHP

専門家に質問してみよう