2011-04-12 1 views
0

J'ai un système qui envoie un e-mail à un utilisateur avec un mot de passe temporaire. J'utilise le script suivant pour sortir l'email mais je cherche un moyen d'extraire le mot de passe et de stocker la valeur dans une variable. Le corps de l'e-mail aura le texte suivant "Votre mot de passe temporaire est" Je voudrais analyser le corps de l'e-mail et extraire. Je suppose que je pourrais utiliser un module d'analyse pour rechercher "Votre mot de passe temporaire est", puis stocker le jeton suivant dans une variable, mais ma connaissance de perl n'est pas terrible. Est-ce que quelqu'un peut-il me montrer la bonne direction?Comment analyser un e-mail pour extraire du texte (mot de passe) et le stocker dans une variable

#!/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; 

Répondre

0

est ici une fonction qui reçoit le texte du message et retourne si elle ne le trouve pas le mot de passe ou undef.

sub extract_password { 
    my $text = shift; 

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

Ensuite, vous pouvez dire my $password = extract_password($msg_text).

+0

Cela fonctionne si j'utilise une chaîne prédéfinie qui contient le modèle, mais lorsque je l'exécute sur une variable $ msg, cela ne fonctionne pas. Je pense que je fais quelque chose de mal en assignant différents types de données ou quelque chose. Cela fait longtemps que je n'ai pas fait de programmation sérieuse my $ msg = $ pop-> get ($ msgnum); my $ mot_de_passe = mot de passe_extraction ($ msg) || die "Problème avec extract_password \ n $! \ N"; – Joe

+0

Dans [documentation] (http://perldoc.perl.org/Net/POP3.html), la fonction 'get()' de 'Net :: POP3' renvoie une référence à une liste de lignes de texte. Vous pouvez d'abord les combiner en une chaîne en utilisant 'my $ msg_text = join (" \ n ", @ $ msg)' et ensuite passer à la fonction que j'ai écrite plus haut. –

Questions connexes