私はperlでかなりnoobishです、多分私は何かばかげたやりました。 私は現在、スクリプトを使用して、メールボックスに含まれるすべてのメッセージをIMAPプロトコルで取得していますが、PERLでNet :: IMAP :: Simpleを使用していますが、メッセージ全体が表示されません。 私の全体のコードは次のようになります。それは、電子メールを取得していることをNet :: IMAP :: Simpleはメッセージ全体を受け取らないようにします
use strict;
use Net::IMAP::Simple;
my $imap = Net::IMAP::Simple->new('xxxxxxxxxxxxxx') or die 'Impossible to connect '.$!;
$imap->login('xxxxxxxx', 'xxxxxxxxx') or die 'Login Error!';
my $nbmsg = $imap->select('INBOX') or die 'Impossible to reach this folder !';
print 'You have '.$nbmsg." messages in this folder !\n\n";
my $index = $imap->list() or die 'Impossible to list these messages !';
foreach my $msgnum (keys %$index) {
#if(!$imap->seen($msgnum)) {
my $msg = $imap->get($msgnum) or die 'Impossible to retrieve this message'.$msgnum.' !';
print $msg."\n\n";
# }
}
$imap->quit() or die 'quitting issue !';
そして毎回、それは私に(私の場合にはメッセージを送信するボットによって生成cryptics無用メタデータです)最初の文字を与えているが、全身ではありません。
EDIT:
のContent-Type:ここでは、本体部が出力に表示されるテキスト/平野。 charset = "UTF-8" を コンテンツ転送 - エンコード:BASE64
Q2UgbWVzc2FnZSBhIMOpdMOpIGfDqW7DqXLDqSBhdXRvbWF0aXF1ZW1lbnQgcGFyIGwnaW1wcmlt YW50ZSBtdWx0aWZvbmN0aW9ucyBYZXJveCBYRVJPWF83ODMwLgogICBFbXBsYWNlbWVudCBkdSBz eXN0w6htZSA6IAogICBBZHJlc3NlIElQIHN5c3TDqG1lIDogMTkyLjE2OC4xLjIwMAogICBBZHJl c3NlIE1BQyBzeXN0w6htZSA6IDlDOjkzOjRFOjMzOjM1OkJECiAgIE1vZMOobGUgc3lzdMOobWUg OiBYZXJveCBXb3JrQ2VudHJlIDc4MzAKICAgTnVtw6lybyBkZSBzw6lyaWUgc3lzdMOobWUgOiAz OTEyNzk4ODk0CgpMJ0Fzc2lzdGFudCBkZSBjb21wdGV1ciBhIGVudm95w6kgbGUgcmVsZXbDqSBz dWl2YW50IGF1IHNlcnZldXIgZGUgY29tbXVuaWNhdGlvbiBYZXJveCBTTWFydCBlU29sdXRpb25z IGxlICAxNC8xMS8xNiAgIDA5OjI0OiAKI CBUaXJhZ2VzIGVuIG5vaXIgOiAxMzIwNwogIFRpcmFn ZXMgZW4gY291bGV1ciA6IDkyNjg3CiAgVG91cyBsZXMgdGlyYWdlcyA6IDEwNTg5NAの==
それは常にこの「==」ところで、私はモジュールが出力を短縮していることを考えて作っていることで終了されます。
私はCPANのドキュメントでそれについていくつかの詳細を見ていましたが、悲しいことに何も見つかりませんでした。
[編集]し、その出力を含めてください。私はそれが実際にメッセージの一部ではなく、 '$ imap-> get'によって返されるメッセージオブジェクトの' ref'だと信じています。これらのオブジェクトには、テキストに変換する文字列のオーバーロードがありますが、使用していません。それを文字列に強制するには 'print" $ msg "'を実行しなければなりません。 – simbabque
私はすでにそれをしました。しかしそれは何も変わらなかった。 出力を追加するように編集しています。 –
私はあなたが 'list()'を取得する必要はないと思うので、基本的に '1'から' $ nbmsg'までループで繰り返すこともできます。番号はIDなどではなく、単なるインデックスです。だから 'foreach my $ msgnum(1 .. $ nbmsg){...}'が動作します。それはまたそれらを直接並べ替えるでしょう。あなたが今持っているものは '%$ index'のキーをランダムな順序で返します。なぜならPerlのハッシュはソートされておらず、実装の詳細がランダムな順序になっているからです。そこに出てくるものの順序を頼りにしてはいけません。別のマシンでは違うでしょう。 – simbabque