アプリ版:「スタンプのみでお礼する」機能のリリースについて

私が今回質問したいのはメールサーバー(POP3)にて取得したメールの題名の中で特定の内容が含まれている場合、そのメールに添付してあるものをFTPサーバーに転送するというシステムです。

詳しく言うと、たとえば先頭に"UP"という文字があるとそれより後ろの文字をFTPサーバー内のアドレスだと決めてそこへ添付されたファイルをUPさせたいんです。

(例)[UP User/Photo]という題名のメールが来た場合、その指定したFTPサーバー内のUser/Photoと言う場所に添付ファイルを送信するというシステムです。

厳しいところも含まれているとは思いますが、どう組めばいいかお聞かせください。

A 回答 (2件)

Net::POP3でメールを受信して、MIME::Parser で


Subject:からのコマンド解析と添付ファイルの抽出・ファイル保存を行い、
http://homepage3.nifty.com/hippo2000/perltips/rc …

Net::FTP で保存したファイルのアップロード
http://www.itmedia.co.jp/enterprise/articles/080 …

すればいいでしょう。

アップロードが終わったらファイル削除を忘れずに。

それと、アップロード先のディレクトリがあるかどうかは確認した方がいいでしょうね。手を抜くなら、「UP User/Photo」なんかの時には問答無用でアップロード前に「User」と「User/Photo」のディレクトリ作成するだけでもいいでしょう。

この回答への補足

ご回答ありがうございます。
やりたい内容等としてはピッタリなのですが、
>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");<でメールサーバーを指定しても大丈夫なのでしょうか?

補足日時:2009/08/11 14:08
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/11 15:12

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

この回答への補足

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

補足日時:2009/08/11 06:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!