• 締切済み

メールの添付ファイルの表示

受信メールをホームページで表示して閲覧するプログラムを作成しているのですが、添付ファイルを表示する方法がわからないので教えていただけると助かります。 件名を表示させるプログラムと本文を閲覧するプログラム以下の通り作成しています。 件名表示プログラム(一部) foreach ( $pop -> Head( $i )) { $info_link = "<a href=\"./mail.cgi?uname=$user&passwd=$pass&msgnum=$i\">$sub</a>"; } 本文表示プログラム(一部) foreach ( $pop -> Body( $msgn )) { $body = jcode($_)->mime_decode()->sjis; $HTML .= <<"EOL"; $body<br> EOL } $HTML .= <<"EOL";

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

みんなの回答

  • nerumako
  • ベストアンサー率84% (11/13)
回答No.2

自力で添付付きメールを解析する。 添付メールの基本構成は以下の通りです http://cns-guide.sfc.keio.ac.jp/2003/2/2/3.html 正規表現で切り出した部分より上部を次々に削除して行くとモジュールを使うより高速です。(だと思っています;) マルチパート(添付付きのメール)は 本文 と 添付部分 の区切りにboundary(バウンダリ)という文字列を利用しています。 boundaryの文字列はヘッダ部分で指定してあります。 一度、メーラーで受信した添付メールのソースを見ると構成がわかります。 インターネットメールは基本的にテキストデータしか送受信できませんので添付ファイル部分はBASE64というものでエンコードされてテキスト化されている事が標準です。この添付部分をデコードして保存する手順になります。 メールに関する知識付けの為に一度、手作業で行ってみるのも楽しいです。

  • g_p_
  • ベストアンサー率53% (28/52)
回答No.1

こんにちは、 ご自身で解析して添付ファイル部分を取り出して デコードするのは面倒そうなので、 MIME::Parser が使えれば使ってみてはどうでしょうか? http://search.cpan.org/~doneill/MIME-tools-5.427/lib/MIME/Parser.pm

関連するQ&A

  • メール件名の表示について

    メールの受信表示をwebでするようにプログラムを作成しましたが、日本語の件名がきちんと表示されません。 「中国の消費者物価、4月は8.5%上昇・食料品など高止まり」が「中国の消費者物価、4月は8.5」のように途中で切れてしまいまいます。正しく表示させるにはどのようにしたらよいでしょうか? 以下はプログラムの抜粋です。 #!/usr/bin/perl require 'lib/jcode.pl'; use CGI qw(:standard); use Mail::POP3Client; use Jcode; (略) foreach ( $pop -> Head( $i )) { s/^Subject: (.*)/jcode($1)->mime_decode()->sjis/ie and $sub = $_;

    • ベストアンサー
    • Perl
  • Outlook2007でメール本文が表示されません。

    Outlook2007のメールで本文が表示されなくなってしまいました。 起動したら「問題が発生したためプログラムを終了します」となって表示されなくなり、件名は表示されていて件名をダブルクリックすると本文を開くことはできます。 この症状は3度目で5日ほど前にも同じ症状がでてマイリカバリしました。どうすれば直るでしょうか?お願いします。

  • HTMLメールについて

    こんにちは。質問させてください。 HTML形式のメールを送信したいと考え、 以下の本文を作成しました。 --------------------------------------- <html> <body> <font color="red">こんにちは</font> </body> </html> --------------------------------------- 上記の本文でメールを送信したところ 受信側では、 上記の本文(タグ表示)そのまま表示されてしまいます。 ”こんにちは”の部分のみを赤色で 本文に表示するHTMLメールを送信したいのですが、 どのようにすればいいのでしょうか? 宜しくお願い致しますm(_ _)m

  • 空メール登録処理(Mail::POP3Client)

    メールマガジン登録用に、hoge@hoge.comへ空メールを送信してもらい、Mail::POP3Clientで取得したヘッダーから送信元メールアドレスだけを抽出、.txtに書き出すモノを作っているのですが、メールサーバーへメールを取りに行った際に、サーバーにある全てのメールを取得している状態です。 登録を削除しても、毎回毎回全てのメールを取得して書き出し、上書きしてしまうので、メールサーバーからは新着メールのみ取得したいのですが、どのような処理をすればいいのでしょうか? お時間ありましたら教えてくださいませ! #!/usr/bin/perl use Mail::POP3Client; $host = 'popサーバー'; $uname = 'ユーザー名'; $passwd = 'hogehoge'; $pop = new Mail::POP3Client (HOST => $host); $pop->User($uname); $pop->Pass($passwd); $pop->Connect(); open OUT,"> ./hoge.txt"; for($i=1;$i <= $pop->Count();$i++){ foreach($pop->HeadAndBody($i)){ if(/^From: .*<(.+)>.*/){ $mail_from = $1; } elsif (/^From: (.+)/) { $mail_from = $1; } } print OUT $mail_from, "\n"; } close OUT; $pop->Close(); #重複削除 (ここに重複削除処理) #成功したら登録完了の文字を表示 print "Content-type: text/html\n\n"; print <<"EOM"; <html> <body> 登\録\完\了\! </body></html> EOM exit;

  • phpでのメール転送(添付ファイルつき)について

    目的: phpにて、添付付きメールを、件名だけ変更して、添付ファイルごと外部へ転送する。 現在、メール受信したものを、mysqlに保存(UID、件名、送信元メールアドレス(一致したものを、指定の件名に変更)、送信日、受信日、本文)、 添付ファイルはサーバー上に保存し、 メール送信時に、サーバー上に保存した添付ファイルとmysqlのデータを読み込み、送信しています。 (添付ファイルは、定期的に削除) これを、もっと簡潔に出来ないでしょうか。 サーバー上に添付ファイルを残さないで済み、 未受信のメールのみ 1画面上で、添付メールごと転送できるのが理想です。 ※mysqlへの保存は、あってもなくてもかまいません。 以下が、現在の状態です。 参考にしたのは、こちらのサイトです。 http://hal456.net/qdmail_rec/top http://www.favorite-labo.org/view/202 ※サーバはCPIです。 **メール受信処理** <?php // QdmailReceiver呼び出し require_once('qdmail_receiver.php'); //POPサーバー(受信サーバー)にアクセスするための初期設定。 $server = array( 'protocol'=>'pop3', 'host'=>'(ホスト名)', 'user'=>'(ユーザー名)', 'pass'=>'(パスワード)', ); qd_receive_mail( 'start' , $server , 'eucJP-win' ); //オブジェクト指向モードでの初期化 $receiver = QdmailReceiver::start( 'pop' , $server); for($i = 1 ; $i <= $receiver->count() ; $i++){ $todaydata = date("Y-m-d"); // *************** メールデータ取得処理 *************** $pointer = $receiver->pointer(); // pointer $popuid = $receiver -> header( 'popuid' );// UID $subject_name = mb_convert_encoding(($receiver->header( array('subject','name') , 'none' )),"Shift-JIS","auto");//件名 $from_mail = $receiver->header( array('from','mail') , 'none');//送信元メールアドレス $date = $receiver -> header('date');//送信日 $text = mb_convert_encoding(($receiver->text()),"Shift-JIS","auto");//本文 // *************** UID照合処理 *************** include '(mysql接続)'; $ii=0; while ($row = mysql_fetch_assoc($result)) { $ii++; } if($ii == 0){ // *************** 転送前データの保存 *************** include '(mysql接続)'; // *************** 添付ファイル保存 *************** $attach = $receiver->attach(); foreach($attach as $att){   $moji = mb_convert_encoding($att['filename'],"Shift-JIS","auto"); $fp=fopen($moji,'w'); fputs($fp,$att['value']); fclose($fp); } }else{ print('取得済みにつき未処理'); } ?> **メール送信** <?php //マイムタイプ定義 $mime_content_types = array( 'ez' => 'application/andrew-inset', 'atom' => 'application/atom+xml', 'atomcat' => 'application/atomcat+xml', ~略~ 'avi' => 'video/x-msvideo', 'movie' => 'video/x-sgi-movie', 'ice' => 'x-conference/x-cooltalk' ); //送信先メールアドレス $to = '(送信先メールアドレス)'; //送信元メールアドレス $from = '(取得した送信元メールアドレス)'; //件名 $subject = '(変更した件名)'; //メール本文 $message = (取得した本文); //添付ファイル $files = array('(添付ファイル1へのパス)','(添付ファイル2へのパス)…以下、あるだけ'); //件名・本文をエンコード $subject = mb_convert_encoding($subject, 'JIS', 'Shift-JIS'); $message = mb_convert_encoding($message, 'JIS', 'Shift-JIS'); $subject = '=?iso-2022-jp?B?' . base64_encode($subject) . '?='; //バウンダリ文字列を定義 if (empty($files)) { $boundary = null; } else { $boundary = md5(uniqid(rand(), true)); } //メールボディを定義 if (empty($files)) { $body = $message; } else { $body = "--$boundary\n"; $body .= "Content-Type: text/plain; charset=\"iso-2022-jp\"\n"; $body .= "Content-Transfer-Encoding: 7bit\n"; $body .= "\n"; $body .= "$message\n"; foreach($files as $file) { if (!file_exists($file)) { continue; } $info = pathinfo($file); $content = $mime_content_types[$info['extension']]; $filename = basename($file); $body .= "\n"; $body .= "--$boundary\n"; $body .= "Content-Type: $content; name=\"$filename\"\n"; $body .= "Content-Disposition: attachment; filename=\"$filename\"\n"; $body .= "Content-Transfer-Encoding: base64\n"; $body .= "\n"; $body .= chunk_split(base64_encode(file_get_contents($file))) . "\n"; } $body .= '--' . $boundary . '--'; } //メールヘッダを定義 $header = "X-Mailer: PHP5\n"; $header .= "From: $from\n"; $header .= "MIME-Version: 1.0\n"; if (empty($files)) { $header .= "Content-Type: text/plain; charset=\"iso-2022-jp\"\n"; } else { $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; } $header .= "Content-Transfer-Encoding: 7bit"; //メール送信 if (mail($to, $subject, $body, $header)) { echo 'メールが送信されました。'; } else { echo 'メールの送信に失敗しました。'; } ?> 以上、よろしくお願いします

    • ベストアンサー
    • PHP
  • 起動させたメールに本文を複数項目入れたい

    起動させたメールに件名や本文を入れる時 mailto:info@example.com?subject=件名&amp;body=本文 ここまでは調べて実際起動もOKでした。 自分の希望は本文に複数項目入れたい場合 ・・・・・・・件名&amp;body=本文 の、本文の後ろにどのようなhtml言語入れればよろしいのでしょうか? 素人は素人的に<br>いれて挑戦してみましたがそのまま<br>が表示されてしまいます。 希望表示は 1行目・・・ID 2行目・・・希望PW 3行目・・・本名 です。 ご教授お願いします。 作成ソフトは「HPビルダー10」です。

  • 受信メールを表示するには?

    PHPを使って、現在受信しているメールの件名一覧をブラウザに表示するというような、WEBメールの簡易版のようなものを作りたいと思っています。 環境はPOP3/PHP4もしくは5で、できればフリーウェアを入れるより、仕組みを学びながらプログラムを組みたいと思っています。 参考になるサイトやプログラムなどがあれば、教えてください。

    • ベストアンサー
    • PHP
  • windows vistaのメール表示について

    Windows Vistaを使っています。 パソコンを起動してメールを開いたとき、新たな受信メールのマークは未開封になっていますが、本文の文章の一部が表示されます。 この文章の一部を表示させない方法を教えてください。 (送信者・件名・受信日時だけ表示されるようにしたいのです。) よろしくお願いします。

  • POPメール受信時の表示について

    http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280400/を参考にPOP3サーバにあるメールをPHPを使って受信しました。 そうした所、2点疑問点があったのですが、どのようにすれば解決できるのかわからなかったので、 アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 1. メールの本文で文字が?になってしまう事があるのですが、どのようにすれば正しく表示されるかがわかりませんでした。 なお、この現象が発生するのは、はしごだか、丸上、丸20、ローマ数字の1、1文字のミリなどとなります。 ■送信時のメール本文 はしごだか(髙) うえ(上) 二十(20) 一I ミリミリ ■受信結果 [本文] はしごだか(?) うえ? 二十? 一? ミリ? 2. HTMLメールを受信時、タグ?のようなものが表示されるのですが、どうすれば普通のメーラーのようにHTMLメールの中身が表示されるかがわかりませんでした。 ■受信結果 [本文] --0016(以下略) Content-Type: multipart/alternative; boundary=0016(以下略) --0016(以下略) Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit *はしごだか(?)* *うえ?* *二十?* 一? ミリ? [image: Blue hills.jpg] --0016(以下略) Content-Type: text/html; charset=ISO-2022-JP Content-Transfer-Encoding: base64 以下略 --0016(以下略)-- --0016(以下略) Content-Type: image/jpeg; name="Blue hills.jpg" Content-Transfer-Encoding: base64 Content-ID: <***> X-Attachment-Id: *** (以下略) --0016(以下略)-- なお、使用したソースは下記となります(host, username, passwordは使用するPOP3サーバにあわせる必要があります)。 <!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"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>メール受信</title> </head> <body> <?php require_once('Net/POP3.php'); $account = array( 'host' => 'pop.mail.yahoo.co.jp', 'port' => '110', 'username' => 'ユーザ名', 'password' => 'パスワード', ); $pop3 =& new Net_POP3(); $pop3->connect($account['host'], $account['port']); $pop3->login($account['username'], $account['password']); $n_msg = $pop3->numMsg(); $body = mb_convert_encoding($pop3->getBody($n_msg), "utf-8", "jis"); $body = htmlspecialchars($body, ENT_QUOTES, "utf-8"); $pop3->disconnect(); ?> <p>[本文]</p> <pre> <p><?php echo $body; ?></p> </pre> </body> </html> なお、私はYahooのWebメール上で受信したメールを表示して試しましたが、YahooのWebメール上では、1,2共に正常に表示されております。 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • アイフォンのメールに写真を添付できない

    アイフォン5sでメールを作成中に写真を添付する場合、本文のところを長押しすると矢印ボタンが表示され、それをタップすると「写真またはビデオを挿入」という表示が出るので、それをタップすれば写真が添付できるはずですよね? ところが、矢印ボタンは表示されるのですが、それをタップしても「写真またはビデオを挿入」という表示が出ず、ただ、入力箇所が本文から件名へと移動するだけで写真は引用されません。どうしたら添付できるでしょうか?

専門家に質問してみよう