メールサーバーからFTPへのファイル転送システム

このQ&Aのポイント
  • メールサーバー(POP3)から特定の内容を含むメールの添付ファイルをFTPサーバーに転送するシステムについての質問です。
  • メールの題名に「UP」という文字が含まれている場合、その後ろの文字列をFTPサーバーの指定アドレスとし、添付ファイルを送信する方法についてお教えください。
  • 詳細は、たとえば「[UP User/Photo]」という題名のメールが来た場合、指定したFTPサーバーのUser/Photoディレクトリに添付ファイルを送信するようなシステムです。
回答を見る
  • ベストアンサー

メールに添付されたものをそのままFTPに運ぶ。

私が今回質問したいのはメールサーバー(POP3)にて取得したメールの題名の中で特定の内容が含まれている場合、そのメールに添付してあるものをFTPサーバーに転送するというシステムです。 詳しく言うと、たとえば先頭に"UP"という文字があるとそれより後ろの文字をFTPサーバー内のアドレスだと決めてそこへ添付されたファイルをUPさせたいんです。 (例)[UP User/Photo]という題名のメールが来た場合、その指定したFTPサーバー内のUser/Photoと言う場所に添付ファイルを送信するというシステムです。 厳しいところも含まれているとは思いますが、どう組めばいいかお聞かせください。

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

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

Net::POP3でメールを受信して、MIME::Parser で Subject:からのコマンド解析と添付ファイルの抽出・ファイル保存を行い、 http://homepage3.nifty.com/hippo2000/perltips/rcvmail.htm Net::FTP で保存したファイルのアップロード http://www.itmedia.co.jp/enterprise/articles/0808/15/news011.html すればいいでしょう。 アップロードが終わったらファイル削除を忘れずに。 それと、アップロード先のディレクトリがあるかどうかは確認した方がいいでしょうね。手を抜くなら、「UP User/Photo」なんかの時には問答無用でアップロード前に「User」と「User/Photo」のディレクトリ作成するだけでもいいでしょう。

wakapaja
質問者

お礼

すいません、試行錯誤してるうちに出来ました。 明確な回答ありがとうございました!

wakapaja
質問者

補足

ご回答ありがうございます。 やりたい内容等としてはピッタリなのですが、 >MIME::Parser で Subject:からのコマンド解析 が良く分かりません。 因みにひとつのplの中で他のサーバーと同時にログイン等ということは可能なのでしょうか? #!/usr/bin/perl use File::Basename; use MIME::Parser; use Net::POP3; use Net::FTP; #POPサーバに接続 my $pop = Net::POP3->new('サーバー名', Timeout=> 120) || die "Cound\'t Connect to POP server\n"; $pop->login('ユーザ名', 'パスワード') || die "Authentication failed\n"; #メールのリストを取得(メッセージ番号 => サイズ からなるハッシュリファレンス) my $list_href = $pop->list; #メールを一通づつ取得 foreach my $msg_id (keys %$list_href){ my $message = $pop->get($msg_id); #メールを取得 print @$message; $pop->delete($msg_id); #メールを削除 } my $parser = MIME::Parser->new; #ファイルの一時保存場所を指定 $parser->output_dir('/一時保存'); #標準入力からメールを取得 my $entity = $parser->parse(*STDIN); #FromとSubjectのみ取り出し $entity->head; my $from = $header->get('From'); my $subject = $header->get('Subject'); #添付ファイルがある場合のみ処理 if($entity->is_multipart){ #パートの数(本文と添付ファイルの合計数) $count = $entity->parts; #メール本文以外(添付のみ)を取り出し(本文は0番目のため、一番目から取り出し) for($i = 1; $i < $count; $i++){ #ファイル名を含むパスを取り出し $path = $entity->parts($i)->bodyhandle->path; #ファイル名を取り出し $filename = (fileparse($path))[0]; #添付ファイルを書き出し open(FILE, "> /添付/$filename"); print FILE $entity->parts($i)->bodyhandle->as_string; close(FILE); } } $ftp = Net::FTP -> new(""); $ftp -> login("",""); $ftp -> binary; $ftp -> cwd ("/tmp"); $ftp -> put ("/data/test"); $ftp -> quit; 書き方が汚くて申し訳ありませんが、この場合だと既にメールサーバーにログインしてるのでこのまま>$ftp -> cwd ("/tmp");<でメールサーバーを指定しても大丈夫なのでしょうか?

その他の回答 (1)

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.1

http://okwave.jp/qa5186427.html と同じことではありませんか。

wakapaja
質問者

補足

すいません、私が考えているのとは多少違います・・・。 個人で使うのではなく複数の人数で使うので、 Perl・CGIが分らない人が使うときに使いやすいものを作ろうと考えております。 なので、メールサーバーに一度送ったものをFTPへUPしなければなりません。

関連するQ&A

  • PHP ftp_fput()関数について

    下記のPHPスクリプトで、JPEGファイルをFTPサーバーにアップしようとしてるんですが、 サーバー側でエラーが出ます。どこが間違っているのか指摘していただけますか? ※ftp_chdir($ftp, $path); の$path は、相対パスか絶対パスか、URLか ※ftp_fput($ftp, $remote_file, $fp, FTP_BINARY)の、第二引数$remoto_file は、リモートでの ファイル名だけでよいのか、相対パスか、絶対パスかURLか ※ちなみに、FTPサーバーへのログインはできてます。 <?php //$photo = "akashi.jpg"; $photo = $_GET['photo']; // FTPサーバーに接続 $ftp_server="users109.lolipop.jp"; $ftp = ftp_connect($ftp_server); //$res = ftp_login($ftp, "root", " "); $res = ftp_login($ftp, " ", " "); if($res==FALSE){ echo("FTPサーバーのログインに失敗しました。"); exit(1); } //$path = "/home/users/1/raindrop.jp-5247423/web/tsukushinbo/upload_photo"; // 絶対パス $path = "../tsukushinbo/upload_photo"; // 相対パス ftp_chdir($ftp, $path); // サーバー側のディレクトリを変更 /* $cur = ftp_pwd($ftp); echo($cur); exit(1); */ // ローカル側でファイルをオープン /* $dir = dirname($photo); // ファイルあるいはディレクトリへのパスを含む文字列を受け取って、 親ディレクトリのパスを返します。 //$filename = $dir."/".$photo; echo($filename); exit(1); */ $fp = fopen("$photo", 'rb') or die; //$fp = fopen("$filename", 'r') or die; // ローカルでオープンされているファイルのポインタ。 ファイルの終端まで進むと読み込みが終了する。 // FTPサーバーに画像ファイルをアップロード $remote_file = $photo; // リモート上でのファイル名指定 if(ftp_fput($ftp, $remote_file, $fp, FTP_BINARY)){ // ローカルでオープンしている画像ファイルをバイナリモードでFTPサーバーにアップロードする echo "Successfully uploaded $file\n"; }else{ echo "There was a problem while uploading $file\n"; } fclose($fp); ftp_close($ftp); //header("Location: bbs.php"); ?>

    • ベストアンサー
    • PHP
  • ftpはなぜhttpが必要ないんですか?

    ftpでファイルを転送するときのホスト名には、web.なんちゃらみたいになってますよね なぜhttpがないんですか?他にもメールなんかもpop3などでhttpがないですよね?あれもなぜなんですか?

  • 添付ファイル付きメールのみ転送

    メールの条件付き転送で、 添付ファイルがあるメールのみ、添付ファイルも含めて転送 という条件が指定できる、ISP等はないでしょうか。 メールをGmailに転送してそちらからIMAPで受信することで、 いろいろ都合がいいなあと思うのですが、EXEファイルを 添付されるとメールそのものが消えてしまうという仕様だけ 引っかかっています。そもそも、EXEファイルどころか 添付ファイル付きのメール自体、殆ど受け取ることはないのですが、 かといって届いたことすらわからないのは、ちょっとマズイです。 そこで、EXEファイルに限定しなくても、添付ファイル付きという 条件で構わないので、Yahoo!メールにでも転送できれば、 そちらのPOP受信をあわせて行うことで、自分の使い方では 大丈夫かなと思った次第です。

  • FTPでのGET

    サーバ上にあるファイルをFTPのGETでダウンロードする場合、 転送中のサーバ上のファイルは、どうなるのですか? 切り取りで転送することは可能ですか? サーバ側では、 クライアント側で転送中であるかどうか、 もしくは削除して欲しいのですが。 転送中に、そのファイルを触れないようにするため。

  • FTPサーバーへのデータ転送方法について。

    FTPサーバーへのデータ転送方法について。 WEBページをFTPサーバーにアップする方法で、基本的にはFTPソフトを使用し、サーバー上へデータを転送するかと思います。しかし、いままではFTPサーバーに直接アクセスして(ftp://ftp~のURLを直接開いて)、サーバー内に置いてあるファイルを修正したり、またファイル追加したりできました。 ということは、FTPソフトは使わなくても問題ないのでしょうか。 ちなみに、なぜか今はファイル追加などできなくなっていて、しようがないのでFTPソフト(FFFTP)から接続してアップしています。

  • メール添付ファイルの自動PDF化について

    ファイル添付されたメールに対し、受信側メールサーバーで次のような処理を考えています。 何か良いパッケージやサービスはないでしょうか? メールサーバ上に届いたメールに、ファイル(Officeなど)が添付されていた場合、 1)添付ファイルをPDF化し、別サーバ上へ格納する 2)メールから添付ファイルを削除し、メール本文にPDFファイルを参照できるURLを埋め込む 上記までをメールサーバ(または周辺サブシステム上)で自動処理したいです。 エンドユーザがPC側で参照する際は、メール本文内に埋め込まれたURLをクリックするだけでPDFファイルが開くようになるイメージです。 何か良い手段がありましたら、ぜひ教えてください。

  • fedora4でのFTPサーバについて

    fedora4でFTPサーバを立てています。 同じLAN内のWin機からFFFTPにて『/home/user』にファイル転送はできたのですが、クライアントマシンからルートフォルダまで全部丸見えになってしまいます。 間違えてシステムファイルなどを消してしまったりされたら困るのでクライアント側からアクセスできないようにしたいのですが、どのようにすればよいでしょうか? アクセス権の設定など試したのですがうまくいきません。よろしくお願いします。

  • メール添付ファイルが受信されない。

    ちょっとややこしいので箇条書きにします。 (1)通常のメールは届く (2)添付ファイルが付いたものは、添付ファイルだけ削除されて本文が届く(まるっきり添付されていた痕跡はない) (3)添付ファイル付きメールをaとbにCCで同じサーバー(社内)に送るとaには普通に届くが、bには添付ファイルだけ削除されたメールが届く (4)上記(3)のメールを同サーバー(社内)で転送した場合は、添付ファイルも付いて、ちゃんと届く。 (5)メールのサイズは128KB。受信可能なサイズは10Mまで。 こういった症状って、どうしたら直りますか? 教えてください。お願いします。

  • FTPとは???

    お世話になります。 FTP(File Transfer Protocol)というプロトコルについて 教えてください。 日本語訳をすると、「ファイル転送プロトコル」であることは 暗記しているのですが、実務上、どのような場面で使用 するのかが理解できておりません。 ファイルのアップロードやダウンロードに使うプロトコルであれば Vectorなどでソフトをダウンロードしたり、WindowsUpdateの最中 でも使われているのでしょうか? 企業などで、共有フォルダへファイルをアップロードするには、 Windowsであれば、コピー&ペーストで実現できますが、この場合 にもFTPが使われているのでしょうか? また、単にファイル転送という観点からすると、添付ファイルを E-mailで送受信するときにも、FTPが登場するのでしょうか? 不勉強で大変お恥ずかしいですが、FTPなるもののイメージが 把握できておりません。 FFFTPというソフトを、ホームページを更新する際に使用したことが ありますが、ローカルPCからサーバへファイルを更新する程度 しか作業したことがないため、仕組みがわかりませんでした。 とんちんかんな質問であることは、私自身よく心得ておりますが FTPの考え方をご教示くださいませ。

  • FTPでのファイル転送について

    今までFTP TransporterとFFFTPの両方を使ってHPのファイル転送をしていました。(更新内容によって使い分けてたのですが) サーバーも2つありそれぞれちゃんと転送できてたのですが、 PCのトラブルで修理をしてもらい(本体の中にあるサウンドの部品が壊れてて 音声が鳴らなくなったので取り替えてもらいました)家に持って帰ったところ、サウンドは直ったのですがFTPの転送がおかしくなってしまいました。 「更新されたファイルだけアップロードする」の設定にしても なぜか更新してないファイルまで一緒にアップしてしまうのです。(多分全部のファイル) 1度FTPソフト2つとも削除してもう1度入れなおしてみましたが同じです。 両方のサーバーともそうなのでサーバーと関係あるとは考えられません。 修理も関係あるのか分かりませんが、原因として考えられる事があったら教えてください。