IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

Modules Net::OAuth2::Profile::Password Mail::IMAPClient


Sujet :

Modules Perl

  1. #1
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut Modules Net::OAuth2::Profile::Password Mail::IMAPClient
    Bonjour,
    Gmail est passé depuis peu à l'authentification OAuth2 : https://support.mozilla.org/fr/kb/co...e-mail-oauth20
    J'accède à mes BAL @free et @orange sans problème avec Mail::IMAPClient, MIME::Base64, MIME::Parser...

    Je ne trouve pas beaucoup d'exemple pour l'utilisation de Net::OAuth2::Profile::Password et encore je ne suis pas certain qu'il faille utiliser ce module pour avoir un jeton Gmail...

    J'en suis là à partir des infos que j'ai glané (mais c'est vraiment au pif) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #!/usr/bin/env perl
    use strict;
    use warnings;
    use utf8;
    use Mail::IMAPClient;
    use MIME::Base64;
    use Net::OAuth2::Profile::Password;
     
    my $username = 'xxxxx@gmail.com';
    my $password = 'xxxxx';
     
    my $auth = Net::OAuth2::Profile::Password->new(
     client_id => $username,
     client_secret => $password,
     grant_type => 'OAuth2',
    );
     
    my $oauth_sign = encode_base64("user=". $username ."\x01auth=Bearer ". $auth ."\x01\x01", '');
     
    my $imap = Mail::IMAPClient->new( 
    				Server 	 => 'imap.gmail.com',
    				User     => $username,
    				Password => $password,
    				Timeout  => 15,
    				Port     => 993,
    				Ssl      => 1,
    				Debug	   => 1,
    			) or die ("Erreur connexion $! - $@\n");
     
    $imap->authenticate('XOAUTH2', sub { return $oauth_sign }) or die("Auth error: ". $imap->LastError);
     
    print $imap->folders or die("List folders error: ". $imap->LastError);
    Et bien sûr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur connexion Bad file descriptor - 1 NO [AUTHENTICATIONFAILED] Invalid credentials (Failure)
    Avez vous des idées ?
    Merci !

  2. #2
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour, voila la solution

    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #!/usr/bin/env perl
    use strict;
    use warnings;
    use utf8;
    use Mail::IMAPClient;
    use MIME::Base64;
    use Net::OAuth2::Profile::Password;
     
    my $username = 'bal@gmail.com';
    my $password = 'aabbccddeeffgghh';
     
    my $auth = Net::OAuth2::Profile::Password->new(
     client_id => $username,
     client_secret => $password,
    # grant_type => 'XOAUTH2',
    );
     
    my $oauth_sign = encode_base64("user=". $username ."\x01auth=Bearer ". $auth ."\x01\x01", '');
     
    print "\n\n-->$oauth_sign<--\n";
     
    my $imap = Mail::IMAPClient->new( 
    				Server 	 => 'imap.gmail.com',
    				User     => $username,
    				Password => $password,
    				Timeout  => 15,
    				Port     => 993,
    				Ssl      => 1,
    				Debug	   => 0,
    			) or die ("Erreur connexion $! - $@\n");
     
    # BAD $imap->authenticate('XOAUTH2', sub { return $oauth_sign }) or die("Auth error: ". $imap->LastError);
     
    $imap->Authenticated('XOAUTH2', $username, $oauth_sign ) or die("Auth error: ". $imap->LastError);
     
    print $imap->folders or die("List folders error: ". $imap->LastError);
    Le retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    E:\_APPLI\Oauth2>perl ESS_1.pl
     
    -->dXNlcj12aWRlb3ZhbGRlcmF1QGdtYWlsLmNvbQFhdXRoPUJlYXJlciBOZXQ6Ok9BdXRoMjo6UHJvZmlsZTo6UGFzc3ddcmQ9SEFTSCgweDRkYmU5OCkBAQ==<--
    INBOX[Gmail]/
    Brouillons[Gmail]/
    Corbeille[Gmail]/
    Important[Gmail]/
    Messages envoy&
    AOk-s[Gmail]
    /Spam[Gmail]
    /Suivis[Gmail]/
    Tous les messages
    E:\_APPLI\Oauth2>
    J'ai ajouté des retours à la ligne pour la lisibilité

    Ce qui n'allait pas, mais que j'avais trouvé sur Internet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # BAD $imap->authenticate('XOAUTH2', sub { return $oauth_sign }) or die("Auth error: ". $imap->LastError);
    Mais il faut chez Gmail un mot de passe d'application ! (16 caractères) : Consulter Gmail via d'autres plates-formes de messagerie

    Ce qui en video muette (Sans le groin groin américain ) donne :


    Et enfin la doc cpan :
    Mail::IMAPClient Authenticated


    [Edit 14:25]
    Cerise, un envoi simple, depuis smtp Gmail, directement avec le PWD d'application (16 caractères), sans passer par Net::OAuth2 Pour le moment... (NB port 587)...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use Email::Sender::Simple qw(sendmail);
    use Email::Sender::Transport::SMTPS ();
    use Email::Simple ();
    use Email::Simple::Creator ();
     
    my $smtpserver = 'smtp.gmail.com';
    my $smtpport = 587;
    my $smtpuser   = 'smtpuser@gmail.com';
    my $smtppassword = 'aabbccddeeffgghh';
     
    #NB: Gmail OK avec PWD double authentification
     
    my $transport = Email::Sender::Transport::SMTPS->new({
      host => $smtpserver,
      port => $smtpport,
      ssl => "starttls",
      sasl_username => $smtpuser,
      sasl_password => $smtppassword,
    });
     
    my $email = Email::Simple->create(
      header => [
        To      => 'moi@orange.fr',
        From    => 'toi@free.fr',
        Subject => 'Essai sendmail',
      ],
      body => "Bonne réception !\n",
    );
     
    sendmail($email, { transport => $transport });

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/04/2006, 19h30
  2. est ce normal que le module NET::FTP soit TRES lent ?
    Par ramislebob dans le forum Modules
    Réponses: 4
    Dernier message: 14/03/2006, 10h13
  3. Réponses: 4
    Dernier message: 20/12/2005, 20h05
  4. [VB.NET] Envoyer des e-mails !
    Par Ludog35 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 26/10/2005, 17h50
  5. [VB.NET] Authentification sur serveur mail ?
    Par Webman dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/05/2004, 20h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo