perl Net :: IMAP :: Client如何获取看不见的电子邮件

时间:2015-08-19 15:29:02

标签: perl email imap

我正在使用Net :: IMAP :: Client

代码:

my $imap = Net::IMAP::Client->new(
   server => 'imap.server.com',
   user   => $user,
   pass   => $pass,
   ssl    => 1,                              # (use SSL? default no)
   ssl_verify_peer => 0,                     # (use ca to verify server, default yes)
   #ssl_ca_file => '/etc/ssl/certs/certa.pm', # (CA file used for verify server) or
   # ssl_ca_path => '/etc/ssl/certs/',         # (CA path used for SSL)
   port   => 993                             # (but defaults are sane)

) or die "Could not connect to IMAP server";


$imap->login or die('Login failed: ' . $imap->last_error);
$imap->select('INBOX');

然后我尝试了:

my $status = $imap->status(INBOX);

现在我有这样的哈希:

name : INBOX 
UIDNEXT : 312 
MESSAGES : 298 
RECENT : 0 
UNSEEN : 1 
UIDVALIDITY : 1420542773

现在想要获取这个看不见的电子邮件的文本。 我阅读了文档,但没有找到如何做到这一点。

非常感谢。

1 个答案:

答案 0 :(得分:0)

我有我知道正在运行的代码。它使用不同的模块,但可以让你到达你需要去的地方?

use Mail::IMAPClient;

sub get_imap {
  my ($user, $pass) = @_;
  my $imap = Mail::IMAPClient->new(  
    'User'    => $user,
    'Password'=> $pass,
    'Ssl'     => 1 ) or die "IMAP Failure: $@";
  $imap->Timeout(120);
  $imap->Server('smtp.gmail.com');
  $imap->connect or die "Could not connect: $@\n";
  $imap->select('Inbox') or die "IMAP Select Error: $!";

  return $imap;
}

sub check_msgs {
  my ($imap) = @_;

  my @msgs = $imap->messages or die "Could not get messages: $@\n";

  MSGITR:   
  foreach my $msg_id (@msgs) {
    print "looking at msg_id $msg_id\n";
    my $string = $imap->body_string($msg_id);
    my @lines  = split( /[\n\r]/, $string );
    print scalar @lines . " lines\n";
    foreach my $line (@lines) {
      ...
    }
  }
}

(来自我的工作代码的实际代码段,用于检查邮件是否有反弹)