- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メールに添付されたものをそのままFTPに運ぶ。)
メールサーバーからFTPへのファイル転送システム
このQ&Aのポイント
- メールサーバー(POP3)から特定の内容を含むメールの添付ファイルをFTPサーバーに転送するシステムについての質問です。
- メールの題名に「UP」という文字が含まれている場合、その後ろの文字列をFTPサーバーの指定アドレスとし、添付ファイルを送信する方法についてお教えください。
- 詳細は、たとえば「[UP User/Photo]」という題名のメールが来た場合、指定したFTPサーバーのUser/Photoディレクトリに添付ファイルを送信するようなシステムです。
- みんなの回答 (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」のディレクトリ作成するだけでもいいでしょう。
その他の回答 (1)
- okmotokun
- ベストアンサー率59% (92/155)
回答No.1
http://okwave.jp/qa5186427.html と同じことではありませんか。
質問者
補足
すいません、私が考えているのとは多少違います・・・。 個人で使うのではなく複数の人数で使うので、 Perl・CGIが分らない人が使うときに使いやすいものを作ろうと考えております。 なので、メールサーバーに一度送ったものをFTPへUPしなければなりません。
お礼
すいません、試行錯誤してるうちに出来ました。 明確な回答ありがとうございました!
補足
ご回答ありがうございます。 やりたい内容等としてはピッタリなのですが、 >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");<でメールサーバーを指定しても大丈夫なのでしょうか?