2011-04-12 29 views
0

我有一個系統使用臨時密碼向用戶發送電子郵件。我正在使用以下腳本來輸出電子郵件,但我正在尋找一種方法來提取密碼並將值存儲在變量中。電子郵件的正文將具有以下文字「您的臨時密碼是」我想解析電子郵件正文並提取。我假設我可以使用解析模塊搜索「您的臨時密碼是」,然後將下一個標記存儲到變量中,但是我對perl的瞭解並不是那麼好。任何人都可以將我指向正確的方向嗎?如何解析電子郵件以提取文本(密碼)並存儲在變量中

#!/usr/bin/perl 

use Net::POP3; 

my $username="user"; 
my $password="password"; 
my $host="192.168.17.50"; 

    # Constructors 
    my $pop = Net::POP3->new($host)|| 
     die "Problem calling Net::PoP->new\n$!\n"; 

# $pop = Net::POP3->new($host, Timeout => 60); 
    if ($pop->login($username, $password) > 0) { 
     my $msgnums = $pop->list; # hashref of msgnum => size 
     foreach my $msgnum (keys %$msgnums) { 
     my $msg = $pop->get($msgnum); 
     my $password = extract_password($msg)|| 
      die "Problem with extract_password\n$!\n"; 
     print $password; 
     $pop->delete($msgnum); 
     } 
    } 
    $pop->quit; 

回答

0

下面是收到郵件的文本,如果它沒有找到返回的密碼,或undef功能。

sub extract_password { 
    my $text = shift; 

    if ($text =~ /Your temporary password is (\S+)/) { 
     return $1; 
    } 
    else { 
     return undef; 
    } 
} 

那麼你可以說my $password = extract_password($msg_text)

+0

如果我使用包含模式的預定義字符串,但是當我在$ msg變量上運行該函數時不起作用,這將起作用。我認爲我在分配不同的數據類型或其他東西時做錯了什麼。我已經很長時間了,我已經做了嚴肅的編程 my $ msg = $ pop-> get($ msgnum); my $ password = extract_password($ msg)|| 死「用extract_password問題\ n $!\ n」; – Joe 2011-04-13 18:22:53

+0

從[documentation](http://perldoc.perl.org/Net/POP3.html),Net :: POP3的'get()'函數返回對文本行列表的引用。你可以首先使用'my $ msg_text = join(「\ n」,@ $ msg)'將它們合併爲一個字符串',然後將其傳遞給我上面寫的函數。 – 2011-04-16 02:18:54

相關問題