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 :

Traduire un script shell en perl


Sujet :

Langage Perl

  1. #61
    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
    Non c'est que l'on choisi d'envoyer les infos dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filename	=> "FichierResultat.txt",
    La bonne façon d'envoyer des fichiers c'est en pièce jointe :
    Et dans ce cas on peut mettre un texte dans le mail.

    Celui-ci envoie 2 fichiers à 2 destinataires :
    - un .txt et .xls
    - de plus on a le texte dans le mail :

    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 MIME::Lite;
     
    my $message = "";
    if (-s "info.txt" ) {
    	$message = "\n\nCi-dessous les info :\n\nBonne reception";
    } else {
    	$message = "\n\nPas d'information !\n\nJoyeux Noël !";
    }
    my $msg = MIME::Lite->new(
    	From 		=> 'xxxx@free.fr',
    	To			=> 'xxxx@yahoo.fr;xxxx@free.fr',
    	Subject => 'Fichier txt joint',
    	Type    => 'TEXT',
    	Data 		=> $message,
    );
     
    if (-e "info.xls" ) {
    	$msg->attach(
    		Type => "application/msexcel",
    		Id   => 'info.xls',
    		Path => 'info.xls',
    	);
    }
     
    $msg->attach(
       Type => "TEXT",
       Id   => 'info.txt',
       Path => 'info.txt',
    );
     
    $msg->send('smtp','smtp.orange.fr', Debug=>0, Timeout => 5 );
    [EDIT 21:05]
    @lolo78
    J'ai dû installer le module car je ne comprenais pas non plus...

  2. #62
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    le programme c'est juste le code source ci-dessous : ( c'est un peu bizzare j'ai essayé plusieurs solution mais c'est toujours pareil :s )

    le code source :

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use MIME::Lite;
     
    my $text = "Bonjour,\n\nCi-dessous les infos :\nBonne reception !\n\n";
    open (FIC,"info.txt") or die "impossible d'ouvrir le fichier info.txt\n $!";
    while ( my $ligne = <FIC> ){
    	$text = $text . $ligne;
    }
    close FIC;
    my $message = "";
    if (-s "info.txt" ) {
    	$message = $text . "\n\nCi-dessous les info :\n\nBonne reception";
    } else {
    	$message = "\n\nPas d'information !\n\nJoyeux Noël !";
    }
    my $msg = MIME::Lite->new(
    	From 		=> 'xxxx@free.fr',
    	To			=> 'xxxx@yahoo.fr;xxxx@free.fr',
    	Subject => 'info',
    	Type    => 'TEXT',
    	Data 		=> $message,
    );
    $msg->send('smtp','smtp.orange.fr', Debug=>0, Timeout => 5 );
    Est ce que cela pour vous exact parce que moi il envoie un mail vide. c'est normal parce que $message ="" est vide il me semble qu'il prend pas en considération la boucle if -s

    avez-vous une baquette magique

  3. #63
    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
    Je n'ai pas de baguette magique et ce code fonctionne parfaitement chez moi !
    Promis

    Voir image
    [EDIT 21:38] j'ai ajouté image quand fichier vide c'est OK dans Thunderbird !

  4. #64
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    C'est vraiment magique

    je mets mon code source entier ligne par ligne peut-être il y a quelque chose qui empéche l'envoie.

    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use MIME::Lite;
     
     
    my $text = "Bonjour,\n\Ci-dessous les infors n\n";
    open (FIC,"/tmp/infomation.txt"") or die "impossible d'ouvrir le
    fichier info.txt\n $!";
    while ( my $ligne = <FIC> ){
            $text = $text . $ligne;
    $text = $text . "  \n\n";
    }
    close FIC;
    my $message = "";
    if ( -s "/tmp/infomation.txt"") {
    my $message = $text . "Bonne reception,";
     } else {
    my $message = "\n\n\pas d'info";
    }
    my $msg = MIME::Lite->new(
            From            => 'mail@mail.fr',
           To            => 'xxx@orange.fr',
            Subject      => "INFO ",
            Type         => 'TEXT ',
            Data    => $message,
     );
     
     
    $msg->send('smtp','smtp.orange.fr', Debug=>1, Timeout => 60 );
    Est ce que c'est le même code que vous utilisez ?
    Edit : sinon si vous pouvez nous mettre votre code que vous avez utiliser
    EDIT : quand j'enléve les lignes ci_dessous de if -s ça remarche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my $message = "";
    if ( -s "/tmp/infomation.txt"") {
     
     } else {
    my $message = "\n\n\pas d'info";
    }

  5. #65
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Ton code est toujours indenté à la va comme je te pousse, DSL, j'insiste, tu ne feras rien de bon tant que tu seras aussi peu soigneux.

    Presque envie de ne plus répondre à quelqu'un qui ne tient aucun compte de ce qu'on lui conseille, mais, par charité (après tout, c'était Noël encore il y a moins d'une heure), je fais une tentative supplémentaire pour essayer de t'aider:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open (FIC,"/tmp/infomation.txt"") or die "impossible d'ouvrir le
    fichier info.txt\n $!";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( -s "/tmp/infomation.txt"") {
    my $message = $text . "Bonne reception,";
    La seule coloration syntaxique devrait te dire qu'il y a un problème avec tes guillemets dans les deux cas (deux guillemets fermants pour un seul ouvrant).

    Même problème avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( -s "/tmp/infomation.txt"") {
     
     } else {
    my $message = "\n\n\pas d'info";
    Même si ça peut arriver parfois, je suis surpris que le compilateur ne te prévienne pas de ces trois grosses erreurs.

  6. #66
    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,

    Dernière réponse de ma part, ton code est bourré de fautes !

    Il est rejeté à la compil, il n'a donc pas pu tourné chez toi.
    La moindre des choses, aurait été de tester au minimum la syntaxe ! passe encore pour les erreurs de logique...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open (FIC,"/tmp/infomation.txt"") or die "impossible d'ouvrir le
    fichier info.txt\n $!";
    Là il y a 2 doubles cotes après .txt TOUT LE RESTE DU CODE DEVIENT INVALIDE !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my $message = "";
    if ( -s "/tmp/infomation.txt"") {
    my $message = $text . "Bonne reception,";
     } else {
    my $message = "\n\n\pas d'info";
    }
    Là tu déclares $message qui restera toujours à ""
    puisque en dessous tu redéclares (avec my) la variable $message qui ne sera visible que dans le if
    En fait tu as 2 variables $message :
    - une qui restera toujours à "" et qui est la seule visible pour Data => $message,
    - et une qui sera évaluée à "Bonne reception," ou "\n\n\pas d'info" et qui ne sera jamais utilisée !

    Enfin :
    Là il y a un espace de trop après TEXT

    Tu utilises un module du cpan la moindre des choses est de te conformer aux directives du développeur donnée dans la doc, j'ai collé le lien dans un post précédent !

    Il y a dans tout le fil diverses versions : en pièces jointes, résultats formaté dans le corps du message, avec ou sans texte ajouté dans le corps du message... et qui fonctionnent parfaitement.
    Tu n'as plus qu'à faire un copier/coller et à mettre à jour les adresses mail.

    Ici personne ne pourra faire çà à ta place !

    Enfin dernière cerise sur le gâteau, tu auras surement envie d'avoir les accents dans le corps du message il faudra ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $msg->attr("content-type" => "text/html; charset=utf8" );
    La dernière mouture qui fonctionne est :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
    use Encode;
    use MIME::Lite;
     
    my $sujet = encode ('utf8','Sujet accentué éèàïôù');
    my $text = "Bonjour,\n\nCi-dessous les infors \n\n";
    open (FIC, '<:encoding(UTF-8)', "info.txt") or die "impossible d'ouvrir le
    fichier info.txt\n $!";
    while ( my $ligne = <FIC> ){
    	$text = $text . $ligne . "\n";
    }
    close FIC;
    my $message = "";
    if ( -s "info.txt") {
    	$message = $text . "\n\nBonne reception.";
     } else {
    	$message = "\n\n\pas d'info";
    }
    my $message = encode ('utf8',$message);
     
    my $msg = MIME::Lite->new(
    	From		=> 'mail@mail.fr',
    	To			=> 'xxxx@free.fr',
    	Subject	=> $sujet,
    	Type		=> 'TEXT',
    	Data		=> $message,
    );
     
    $msg->attr("content-type" => "text; charset=utf8" );
    $msg->send('smtp','smtp.orange.fr', Debug=>1, Timeout => 5 );
    [EDIT 08:14] Modif code pour gestion accents dans Sujet & Body

    Désolé Noël est passé je retourne à mes occupations.
    Bonne continuation.

Discussions similaires

  1. Exécution d'un script shell sous perl
    Par ysahel dans le forum Langage
    Réponses: 1
    Dernier message: 12/08/2012, 10h39
  2. Script shell ou perl
    Par Jinkas dans le forum Programmation et administration système
    Réponses: 5
    Dernier message: 24/12/2010, 08h01
  3. écrire dans un script shell depuis perl
    Par painouch21 dans le forum Langage
    Réponses: 1
    Dernier message: 10/02/2008, 14h03
  4. Traduction script Korn shell en perl
    Par olemoine dans le forum Linux
    Réponses: 4
    Dernier message: 07/02/2008, 11h13
  5. [HTML & PERL] Appel d'un script shell
    Par mevardy dans le forum Web
    Réponses: 1
    Dernier message: 30/08/2006, 10h17

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