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

Langage Perl Discussion :

Script d'expédition de mail ok, sauf Auth et domain


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut Script d'expédition de mail ok, sauf Auth et domain
    Bonjour,

    Tout dabord, mes excuses si mon script transpire le débutantisme, car je suis en effet débutant ceci étant mon 1er script Perl jamais écrit...

    Mon but est d'envoyer des emails à partir de données contenus dans des fichiers. Chaque fichier contient toutes les info nécessaires au mailing, y compris adresse SMTP, port et info d'Authentification (1 fichier = 1 mail).

    Exemple de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SMTP_ADDR 91.121.68.89
    SMTP_PORT 25
    SMTP_LOGIN
    SMTP_PASSWORD
    MAIL_TO xxxxxxx@xxxxxxxxx.fr
    MAIL_FROM xxxx@xxxxxxxx.fr
    MAIL_REPLY xxxx@xxxxxxxx.fr
    MAIL_SUBJECT Test du script Perl
    <html><head></head><body>
    Bonjour
    </body></html>
    Et le script complet qui lit ce fichier :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    #!/usr/bin/perl -w
    use Net::SMTP;
     
    if(!$ARGV[0]) 
    {
    	print 'File missing !'."\n";
    	exit;
    }
     
    open (FIC, $ARGV[0]) || die('read error');
     
    my $i = 0;
    my $data = '';
    my $smtpserver = '';
    my $port = '';
    my $login = '';
    my $pass = '';
    my $to = '';
    my $from = '';
    my $reply = '';
    my $subject = '';
     
    while(<FIC>)
    {
    		$i = $i >= 0 ? 0 : -1;
            if(substr($_, 0, 9) eq 'SMTP_ADDR')
            {
                    $smtpserver = substr($_, 10);
    				chomp($smtpserver);
    				$i=1;
            }
     
    		if(substr($_, 0, 9) eq 'SMTP_PORT')
            {
                    $port = substr($_, 10);
    				chomp($port);
    				$i=1;
            }
     
    		if(substr($_, 0, 10) eq 'SMTP_LOGIN')
            {
                    $login = substr($_, 11);
    				chomp($login);
    				$i=1;
            }
     
    		if(substr($_, 0, 13) eq 'SMTP_PASSWORD')
            {
                    $pass = substr($_, 14);
    				chomp($pass);
    				$i=1;
            }
     
    		if(substr($_, 0, 7) eq 'MAIL_TO')
            {
                    $to = substr($_, 8);
    				chomp($to);
    				$i=1;
            }
     
    		if(substr($_, 0, 10) eq 'MAIL_REPLY')
            {
                    $reply = substr($_, 11);
    				chomp($reply);
    				$i=1;
            }
     
    		if(substr($_, 0, 9) eq 'MAIL_FROM')
            {
                    $from = substr($_, 10);
    				chomp($from);
    				$i=1;
            }
     
    		if(substr($_, 0, 12) eq 'MAIL_SUBJECT')
            {
                    $subject = substr($_, 13);
    				chomp($subject);
    				$i=1;
            }
     
    		if(!$i || $i == -1)
            {
                    $data .= $_;
    				$i = -1;
            }	
    }
     
    $data .= "\n";
     
    $smtpserver .= ':'.$port if $port;
     
     $smtp = Net::SMTP->new($smtpserver."\n", Timeout => 10) || die ('echec de connexion'."\n");
     
     $smtp->auth($login, $pass) if $login;
     
     $smtp->mail($from."\n");
     $smtp->to($to."\n");
     $smtp->data();
     
     #$smtp->datasend('To: '.$to."\n");
     #$smtp->datasend('From: '.$from."\n");
     #$smtp->datasend('Reply-to: '.$reply."\n") if $reply;
     
     $smtp->datasend('X-Mailer: xxxxxxxx."\n");
     $smtp->datasend('Subject: '.$subject."\n");
     $smtp->datasend( "Content-type: text/html\n");
     $smtp->datasend("\n");
     
     $smtp->datasend($data."\n");
     $smtp->dataend();
     $smtp->quit();
     
    close(FIC);
     
    exit;
    Nottez qu'avec le fichier donné en exemple, ça marche impécablement bien. Mais 2 problèmes se posent à moi :

    1) Je doit impérativement mettre une adresse IP en adresse server. En effet, passé par un nom de domaine ne marche pas. Par exemple, smtp.gmail.com me plante, avec ou sans numéro de port explicite. En revanche, si je met l'adresse ip du service, il se connecte. Comment puis-je résoudre ce problème ?

    2) L'authentification ne marche pas. Sur un fichier contenant une ligne SMTP_LOGIN vide, ça marche (pourvu que le SMTP soit publique, of course). Si je veut m'identifier, ça ne marche pas ! Je suppose que le auth ne marche pas, mais je ne sais pas trop comment tester tout ça...

    Y aurait-il une ame charitable qui pourrait m'aider ?

    En vous remerciant par avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Par défaut
    pour ton premier problème tu peux relancer un shell dans ton script à l'aide de

    Puis tu execute une commande system effectue la resolution de ton nom smtp.gmail.com et tu recupére l'adresse ip

    glouffy6

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par gloubi
    1) Je doit impérativement mettre une adresse IP en adresse server. En effet, passé par un nom de domaine ne marche pas. Par exemple, smtp.gmail.com me plante, avec ou sans numéro de port explicite. En revanche, si je met l'adresse ip du service, il se connecte. Comment puis-je résoudre ce problème ?
    Normalement ça devrait fonctionner (ça fonctionne chez moi), ce qui signifie probablement que tu as un problème de résolution DNS sur la machine, tu n'as pas d'autre services qui ont un problème avec ça ? Quel est l'OS ?

    De même auth() marche normalement, avec les serveurs SMTP standard en tout cas.

    --
    Jedaï

  4. #4
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Le system est un Gentoo64 de chez OVH (qu'ils appellent relase2). C'est un serveur dédié pré-paramétré pour faire serveur web.
    La distrib est de très bonne qualité puisqu'on trouve installé par défaut a peu près tout ce dont on a besoin (le package NET etait dispo de base).

    J'imagine que le system en lui même n'a pas de probleme pour résoudre les nom de domaines puisque je peux me connecter en telnet sur le SMTP avec le nom de domaine.

    Quoi qu'il en soit, je confirme que ça ne passe pas avec un nom de domaine.

    Pour le Auth, ça marche vraiment pas non plus... Je ne sais pas trop comment je pourrais récupérer l'erreur correspondante. Etant totalement novice et en PERL, et en SMTP, je suis même pas sur que j'oublie rien.
    Je vais faire le test avec auth en telnet voir ce qui se passe (j'essaye avec le smtp gmail pour l'identification).

    Puisque je suis là, qualqun sait dans le protocole SMTP comment on demande l'authentification ?

    En tout cas, merci pour vos réponses !

Discussions similaires

  1. [Script Windows]recevoir des mails et piece jointe
    Par chpog dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 30/08/2006, 10h52
  2. Cherche script d'envoi de mails en PHP
    Par tomchaz dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 30/05/2006, 14h30
  3. Réponses: 2
    Dernier message: 03/05/2006, 00h12
  4. [Mail] Problème avec mon script d'envoi de mail
    Par leroivert dans le forum Langage
    Réponses: 18
    Dernier message: 02/12/2005, 00h26

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