【问题标题】:How do I parse an email to extract text (password) and store in a variable如何解析电子邮件以提取文本(密码)并存储在变量中
【发布时间】:2011-04-12 18:04:48
【问题描述】:

我有一个使用临时密码向用户发送电子邮件的系统。我正在使用以下脚本输出电子邮件,但我正在寻找一种方法来提取密码并将值存储在变量中。电子邮件正文将包含以下文本“您的临时密码是”我想解析电子邮件正文并提取。我假设我可以使用解析模块来搜索“您的临时密码是”,然后将下一个令牌存储到变量中,但我对 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;

【问题讨论】:

    标签: perl pop3


    【解决方案1】:

    这是一个接收消息文本并返回密码的函数,如果找不到,则返回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)

    【讨论】:

    • 如果我使用包含模式的预定义字符串,但当我在 $msg 变量上运行该函数时,它不起作用。我认为在分配不同的数据类型或其他东西时我做错了。很久没有认真地编写我的 $msg = $pop->get($msgnum);我的 $password = extract_password($msg)|| die "extract_password 有问题\n$!\n";
    • documentationNet::POP3get() 函数返回对文本行列表的引用。您可以先使用my $msg_text = join("\n",@$msg) 将它们组合成一个字符串,然后将其传递给我上面写的函数。
    猜你喜欢
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多