-1

ここに 3 年前に投稿された内容を読みました -> Perl から Gmail アカウントでメッセージを読むにはどうすればよいですか?

しかし、本文を開くことができません.. Net::IMAP::Simple と Email::Simple; を読みました。. 私はこれを試しています..しかし動作しません.de fromと件名を出力しますが、本文は出力しません.

use strict;
use warnings;

# required modules
use Net::IMAP::Simple;
use Email::Simple;
use IO::Socket::SSL;

# fill in your details here
my $username = 'email@gmail.com';
my $password = 'pass';
my $mailhost = 'imap.gmail.com';

# Connect
my $imap = Net::IMAP::Simple->new(
    $mailhost,
    port    => 993,
    use_ssl => 1,
) || die "Unable to connect to IMAP: $Net::IMAP::Simple::errstr\n";

# Log in
if ( !$imap->login( $username, $password ) ) {
    print STDERR "Login failed: " . $imap->errstr . "\n";
    exit(64);
}
# Look in the INBOX
my $nm = $imap->select('INBOX');

# How many messages are there?
my ($unseen, $recent, $num_messages) = $imap->status();
print "unseen: $unseen, recent: $recent, total: $num_messages\n\n";


## Iterate through unseen messages
for ( my $i = 1 ; $i <= $nm ; $i++ ) {
    if ( $imap->seen($i) ) {
        next;
    }
    else {
    my $es = Email::Simple->new( join '', @{ $imap->top($i) } );
    my $text = $es->body;
    printf( "[%03d] %s\n\t%s\n%s", $i, $es->header('From'), $es->header('Subject'),$text);
    }
}


# Disconnect
$imap->quit;

exit;

このプリント:

[001] <example@example.com>
     test subject

メールの本文ではありません。

誰でもこれを解決できますか?

前もって感謝します。

4

1 に答える 1

1

問題は、あなたが使用していることです:

$imap->top($i)

ドキュメントから(強調鉱山):

このメソッドは、必須パラメーターとしてメッセージ番号を受け入れます。そのメッセージは、現在選択されているフォルダーから取得されます。成功すると、このメソッドはヘッダーの行を含むリスト参照を返します。失敗した場合は何も返されず、errstr() エラー ハンドラにエラー メッセージが設定されます。

topメッセージの本文を返しません。そのために使用する必要がありますget。このようなもの:

my $es = Email::Simple->new( join '', @{ $imap->get($i) } );
                                                ^^^
于 2013-09-04T13:06:01.330 に答える