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 :

Besoin d'un coup de main avec Email::Send svp


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Par défaut Besoin d'un coup de main avec Email::Send svp
    Bonjour à tous,

    Je suis en train de dévelloper un script pour m'aviser lorsque l'espace disque est faible sur les serveur de mon entreprise et j'ai quelques difficulté à comprendre le fonctionnement de Email::Send. Voici mon script et j'explique ce que je ne comprends pas par la suite:
    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
    use warnings;
    use strict;
    use Win32::AdminMisc;
    use Email::Send;
    my $machine = Win32::AdminMisc::GetComputerName();
    my @drives = Win32::AdminMisc::GetDrives(DRIVE_FIXED);# Array des lecteurs fixes
    foreach(@drives){
                       my ($Total, $Free) = Win32::AdminMisc::GetDriveSpace($_);# Calcul de l'espace utilisé et libre
                       $Total=$Total/1073741824;
                       $Free=$Free/1073741824;
                       my $libre = sprintf("%.2f", $Free);
                       my $tot = sprintf("%.2f", $Total);
                       my $low=$Free/$Total*100;# calcul du pourcentage d'espace libre
                       my $pourcentage = sprintf("%.1f", $low);
                       #test pour le pourcentage de l'espace libre sur le disque
                       if ($pourcentage <= 15){
                            # Génération du courriel
                            my $message = <<'__MESSAGE__';
                            To: <a href="mailto:support@infopresse.com">support@infopresse.com</a> 
                            From: <a href="mailto:eric.lafreniere@infopresse.com">eric.lafreniere@infopresse.com</a>
                            Subject: Espace libre sur les serveurs
     
                            L'espace libre sur au moins un disque est en dessous des 15%
                            __MESSAGE__
     
                            my $sender = Email::Send->new({mailer => 'SMTP'});
                            $sender->mailer_args([Host => 24.201.245.36]);
                            $sender->send($message);
     
                            # more complex
                            my $bulk = Email::Send->new;
                            for ( qw[SMTP Sendmail Qmail] ) {
                            $bulk->mailer($_) and last if $bulk->mailer_available($_);
                            }
     
                            $bulk->message_modifier(sub {
                            my ($sender, $message, $to) = @_;
                            $message->header_set(To => qq[$to\@geeknest.com])
                            });
     
                            my @to = qw[casey chastity evelina casey_jr marshall];
                            my $rv = $bulk->send($message, $_) for @to;
                            }       
    }
    Voilà ce que je ne comprends pas: à la ligne où j'initialise $message, j'ai un erreur me disant <<Can't find string terminator "__MESSAGE__" anywhere before EOF>>
    Je comprends que j'ai besoin d'un caractère pour indiquer qe j'ai terminer d'entrer le texte de mon courriel mais lequel et je le place où ? Après le __MESSAGE__ seul sur sa ligne ?

    Et quant au reste, j'ai besoin de quoi au juste? Le bout sous le # more complex, j'en doute mais vuq ue je ne connais pas ce module, je n'ose pas l'enlever.

    Je vais remettre mon problème entre vos mains compétantes (surtout vos cerveau ) et attendre une réponse de votre part car ni avec le perldoc ni cpan je n'y arrive. Autre petite question, puis-je mettre l'infop de certaines variable dans le contenu de mon courriel ?

    Pour des raisons pratique, répondez-moi à l'adresse suivante eric.lafreniere@infopresse.com svp

  2. #2
    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
    Utilise la balise CODE autour de ton code, sinon c'est illisible (en plus l'indentation disparait, ce qui dans ton cas masquait ton erreur).

    En gros la notation HEREDOC ne tient pas compte de l'indentation du code alentour, donc ton __MESSAGE__ devrait être en début de ligne...

    Par ailleurs tu n'as pas besoin du code en-dessous de "#more complex" si tu es sûr de ton SMTP.

    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
    #!/usr/bin/perl
    use strict; use warnings;
     
    use Win32::AdminMisc;
    use Email::Send;
     
    my $machine = Win32::AdminMisc::GetComputerName();
    #tableau des lecteurs fixes
    my @drives = Win32::AdminMisc::GetDrives(DRIVE_FIXED);
     
    #message générique
    my $message = <<'__MESSAGE__';
    To: <a href="mailto:support@infopresse.com">support@infopresse.com</a> 
    From: <a href="mailto:eric.lafreniere@infopresse.com">eric.lafreniere@infopresse.com</a>
    Subject: Espace libre sur les serveurs
     
    L'espace libre sur au moins un disque est en dessous des 15 %% :
    Sur le disque %s, le pourcentage d'espace libre est %s %%, 
    avec %s d'espace libre sur %s d'espace total.
    __MESSAGE__
     
    for my $drive (@drives){
       my ($total, $free) = Win32::AdminMisc::GetDriveSpace($drive);
       my $free_go = sprintf("%.2f Go", $free/(1024**3));
       my $total_go = sprintf("%.2f Go", $total/(1024**3));
       my $percent_free =sprintf("%.1f", $free/$total*100);
     
       #test pour le pourcentage de l'espace libre sur le disque
       if ($percent_free <= 15){
          my $sender = Email::Send->new({mailer => 'SMTP'});
          $sender->mailer_args([Host => 24.201.245.36]);
     
          $sender->send(sprintf($message,$drive,$percent_free,$free_go,$total_go));
       }
    }
    --
    Jedaï

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Utilise la balise CODE autour de ton code, sinon c'est illisible (en plus l'indentation disparait, ce qui dans ton cas masquait ton erreur).

    En gros la notation HEREDOC ne tient pas compte de l'indentation du code alentour, donc ton __MESSAGE__ devrait être en début de ligne...

    Par ailleurs tu n'as pas besoin du code en-dessous de "#more complex" si tu es sûr de ton SMTP.

    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
    #!/usr/bin/perl
    use strict; use warnings;
     
    use Win32::AdminMisc;
    use Email::Send;
     
    my $machine = Win32::AdminMisc::GetComputerName();
    #tableau des lecteurs fixes
    my @drives = Win32::AdminMisc::GetDrives(DRIVE_FIXED);
     
    #message générique
    my $message = <<'__MESSAGE__';
    To: <a href="mailto:support@infopresse.com">support@infopresse.com</a> 
    From: <a href="mailto:eric.lafreniere@infopresse.com">eric.lafreniere@infopresse.com</a>
    Subject: Espace libre sur les serveurs
     
    L'espace libre sur au moins un disque est en dessous des 15 %% :
    Sur le disque %s, le pourcentage d'espace libre est %s %%, 
    avec %s d'espace libre sur %s d'espace total.
    __MESSAGE__
     
    for my $drive (@drives){
       my ($total, $free) = Win32::AdminMisc::GetDriveSpace($drive);
       my $free_go = sprintf("%.2f Go", $free/(1024**3));
       my $total_go = sprintf("%.2f Go", $total/(1024**3));
       my $percent_free =sprintf("%.1f", $free/$total*100);
     
       #test pour le pourcentage de l'espace libre sur le disque
       if ($percent_free <= 15){
          my $sender = Email::Send->new({mailer => 'SMTP'});
          $sender->mailer_args([Host => 24.201.245.36]);
     
          $sender->send(sprintf($message,$drive,$percent_free,$free_go,$total_go));
       }
    }
    --
    Jedaï

    -------------------------------------------------------------------------
    Merci beaucoup Jedaï.
    À te voir aller coder ainsi, ça m'impressionne à chaque fois, chapeau. Mais est-ce que tu pourrais m'expliquer l'utilisation de %s dans le message générique ? Je vois que tu l'utilises à la place des variables mais c'est toujours le même %s. Je m'interrogeais donc sur sa fonction.

  4. #4
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Les %s représentent des chaines de caractère pour la fonction sprintf. En fait, tout se joue ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf($message,$drive,$percent_free,$free_go,$total_go)
    La fonction sprintf va afficher $message en remplaçant dans message chaque %s qu'elle va retrouver par les autres variables passées en paramètre. Donc le premier %s sera remplacé par $drive, le second par $percent_free...

    Fait une recherche sur sprintf, tu trouveras comment utiliser cette fonction (dans perlfunc par exemple).

Discussions similaires

  1. Besoin d'un coupe de main avec une classe sql
    Par mobscene dans le forum C#
    Réponses: 3
    Dernier message: 21/03/2007, 13h15
  2. Réponses: 4
    Dernier message: 16/03/2007, 10h07
  3. Besoin d'un coup de main avec HTML::Parser
    Par mobscene dans le forum Modules
    Réponses: 1
    Dernier message: 09/12/2006, 15h49
  4. Réponses: 3
    Dernier message: 23/10/2006, 02h07
  5. Besoin d'un coup de main avec print
    Par scaleo dans le forum Langage
    Réponses: 2
    Dernier message: 10/06/2006, 21h12

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