WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perlでウェブ上にメールの保存

0:[投稿] ラテ [2004/12/24 04:50 ][環境:? perl]

perlで自分のサイト内に,
メールの件名や本文などをテキストファイルで,
添付画像を画像として保存したいのですが,
件名などをテキストファイルに保存することは出来ました。
画像の保存は,どのようにしたら良いのでしょうか?


1:[回答] 薫 [2004/12/28 10:48 ]

詳しくありませんが、GD.pmとかImageMagickあたりを使用するのでは?


2:[回答] exists [2004/12/28 11:13 ]

GDやImageMagickは関係ないですねぇ。
メールに添付されるファイル類はバイナリファイルのため、そのままではテキストであるメールには添付できません。
そこで、BASE64エンコード等(BASE64だけではないので)がされてテキストとして添付できる形に変換されています。
ということは、このエンコードされた部分をデコードすれば、元のバイナリファイルの形式に戻るということになります。


3:[回答] B-Cus [2004/12/28 11:17 ]

MIME::Parser モジュールを使って画像を取り出すのが一番
簡単かと。


4:[回答] 薫 [2004/12/28 15:08 ]

MIME::Parserでしたか、失礼。

# モジュールなのは分かったけれど、どれかは知らなかったもので。
# 放置されていたので予測でレスしてしまいました。


5:[お知らせ] ラテ [2004/12/29 02:47 ]

薫さま。
> 放置されていたので予測でレスしてしまいました。
27日には,回答が来てなかったので,どうしようか…と思っていました。
おかげさまで,放置されずにすみました。ありがとうございます。

existsさま。
> ということは、このエンコードされた部分をデコードすれば、元のバイナリファイルの形式に戻るということになります。
なのですよね。
そこまではなんとなくなのですが,解ってきたのですが,
あの文字列(?)をどぉ画像に戻すのかで,つまってました。

B-Cusさま。
> MIME::Parser モジュールを使って画像を取り出すのが一番
早速 MIME::Parser 調べてみます。

まずは,お礼まで。
皆様,ありがとうございます。


6:[質問] ラテ [2005/01/06 02:47 ]

いろいろ調べてみたのですが…
MIME::Base64で,デコードすれば良いのかと思いました。

.txtファイルとして(メールのソース(というのでしょうか?)の状態で),保存するところまで,できたのですが,そこから

例えば件名なら
$subject =~ s/^Subject: ……
みたいに取り出せば,できると思いました。

添付画像は,どのように渡せば良いのかが,全くわかりません。

その後は,
open OUT,"> gazou.jpg";
print OUT $gazou;
とか して行けば……
この時の $gazou の作り方がわかりません。
(できれば,ファイル名も元のファイル名で保存したいです。)

質問を書き直した形になってしまいましたが,再度,よろしくお願いします。


7:[回答] B-Cus [2005/01/06 02:49 ]

> MIME::Base64で,デコードすれば良いのかと思いました。

いいえ。MIME::Parser を使います。
google で検索してみてください。


8:[質問] ラテ [2005/01/19 05:59 ]

B-Cusさま。
>> MIME::Base64で,デコードすれば良いのかと思いました。
>いいえ。MIME::Parser を使います。

MIME::Parser
自分なりに調べてみましたが…
難しいですねぇ。

MIME::Explode
http://perldoc.jp/docs/modules/MIME-Explode-0.09/Explode.pod
というのを,見つけたのですが,こちらも調べてみたいと思います。


9:[質問] ラテ [2005/01/19 08:05 ]

フォルダー"tmp"の中に,
Outlook Express 6 で過去に受信したメイルのソースを"mail.txt"として保存し,
下のものを試してみました。

添付した画像は,そのファイル名で"tmp"内に,
本文も,"file.txt"として"tmp"内に保存されました。
件名や日付は,保存されていません。

下のものは,ほぼ写しただけなので,どこがどぉなってるのかは解りません。

-----ここから
use MIME::Explode;

$explode = MIME::Explode -> new(output_dir => 'tmp');

open(MAIL, '< ./tmp/mail.txt');
$headers = $explode -> parse(\*MAIL);
close(MAIL);

for my $part (sort{ $a cmp $b } keys(%{$headers})) {
    for my $k (keys(%{$headers -> {$part}})) {
        if(ref($headers -> {$part} -> {$k}) eq "ARRAY") {
            for my $i (0 .. $#{$headers -> {$part} -> {$k}}) {
                print "$part => $k => $i => ", $headers -> {$part} -> {$k} -> [$i],"\n";
            }
        } elsif(ref($headers -> {$part} -> {$k}) eq "HASH") {
            for my $ks (keys(%{$headers -> {$part} -> {$k}})) {
                if(ref($headers -> {$part} -> {$k} -> {$ks}) eq "ARRAY") {
                    print "$part => $k => $ks => ",join(($ks eq "charset") ? " " : "", @{$headers -> {$part} -> {$k} -> {$ks}}),"\n";
                } else {
                    print "$part => $k => $ks => ",$headers -> {$part} -> {$k} -> {$ks},"\n";
                }
                print "$part => $k => $ks => ",$headers -> {$part} -> {$k} -> {$ks},"\n";
            }
        } else {
            print "$part => $k => ", $headers -> {$part} -> {$k},"\n";
        }
    }
}
-----ここまで

MIME::Parser は,和訳されたものが見つからなかったのですが,
解りやすいページがありましたら,教えていただけたら幸いです。


10:[回答] exists [2005/01/19 13:47 ]

http://homepage3.nifty.com/hippo2000/perltips/rcvmail.htm
ここをどうぞ。


11:[お知らせ] ラテ [2005/01/20 18:11 ]

exists様 ありがとうございます。
読んでみます。

どぉにか必要そうなところだけ MIME::Parser 読んでみました。

フォルダー"tmp"の中に,
Outlook Express 6 で過去に受信したメイルのソースを"mail.txt"として保存し,
下のものを試してみました。
1----------ここから
use MIME::Parser;

my $parser = new MIME::Parser;
$parser -> output_dir("./tmp");
$entity = $parser -> parse_open("./tmp/mail.txt");
1----------ここまで
2----------ここから
use MIME::Explode;

$explode = MIME::Explode -> new(output_dir => 'tmp');
open(MAIL, '< ./tmp/mail.txt');
$explode -> parse(*MAIL);
close(MAIL);
2----------ここまで

添付書類の名前で添付書類が保存され
1の場合,本文はユニークな名前のテキストファイルに保存されました。
2の場合,本文は"file.txt"として保存されました。

添付書類の名前を変えたり,本文を加工したりするのは,
保存されたものに対してするのでしょうか??
出来れば Jcodeで変換したり,添付書類を加工したり名前を変えたりしたいのですが…。

後から加工するには,ユニークな名前のものを,どぉ参照するのかもわかりませんでした。

一応,本文と添付書類の保存は出来たので報告までに…。


12:[質問] ラテ [2005/01/21 19:10 ]

exists 様
> ここをどうぞ。
読んでみました。解らないところは,多いですけど
コマンドプロンプトの画面には表示できました。

少し弄って,日付や件名,本文を他のファイルに書き出したのですが,
自動的にテキスト保存されるファイルは必要ないので,保存したくないのです。
何処の処理で保存されているのかが,解りません。

画像のファイル名も変えて保存したくなったのですが,
保存されてから変更するしかないのでしょうか??

それから,一番重要なのですが,Net::POP3 からではなく,
(メールのソース??の状態で)テキストとして保存されているファイルから,
変換して保存したいのですが,コードから Net::POP3 を無くす方法がわかりません。

http://search.cpan.org/~dskoll/MIME-tools/lib/MIME/Parser.pm
読んでみてますが英語が得意ではないので,ゆっくりです…。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World