Peut-t-on rajouter une information ; si il n'y a pas d'information dans le fichier , le message envoyer par mail ça sera " pas d'info".
Peut-t-on rajouter une information ; si il n'y a pas d'information dans le fichier , le message envoyer par mail ça sera " pas d'info".
Oui :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if ( -s "/tmp/info.txt" ) { my $message = "\n\n\Ci-dessous les info :\n\nBonne reception"; } else { my $message = "\n\n\Pas d'information !\n\nJoyeux Noël !"; }
-e teste si son paramètre est un chemin valable dans le système de fichier (répertoire, fichier, etc). On pourrait l'utiliser ainsi :
if( -e "/usr/tmp/fichier" ) {
print "Le fichier existe\n";
}
-f teste si son paramètre est un fichier normal.
-d teste si son paramètre est un répertoire.
-l teste si son paramètre est un lien symbolique. Ceci n'exclut pas que -f ou -d renvoie vrai.
-r teste si le programme a le droit de lire le fichier/répertoire/etc passé en paramètre.
-w teste si le programme a le droit d'écrire.
-x teste si le programme a le droit d'exécuter le fichier ou d'accéder (ou axéder :-)) au répertoire.
-o teste si le fichier appartient à l'utilisateur qui exécute le programme.
-z teste si le fichier est vide.
-s teste si le fichier est non vide ; en fait cet opérateur renvoie la taille du fichier.
-M renvoie l'âge en jour du fichier (depuis le début de l'exécution du programme).
Il existe tout plein d'autres opérateurs sur les fichiers !
ET TOUT PLEIN D'INFO DANS LES COURS ET DANS LA FAC LA DOC entre autres ...
Vous pouvez aussi cliquer sur le bouton "Résolu" ça donne du courage aux personnes qui cherchent de lire jusqu'au bout...
Bonne continuation !
Merci bcp pour ces jolies liens qui vont me servir pour ce superbe langage
par la méme occassion bonnes fétes
dernière question juste pour information : j'ai utilisé la condition if ( -s "fichier ")
j'ai les messages suivants:
Unrecognized escape \C passed through at ./mail.pl line 19.
Unrecognized escape \i passed through at ./mail.pl line 22.
Global symbol "$message" requires explicit package name at ./mail.pl line 32.
Execution of ./toto.pl aborted due to compilation errors.
ligne 19 : my $message = $text . "\n\n\Ci-dessous les info :\n\nBonne reception";
ligne 22 : my $message = "\n\n\Pas d'information !\n\nJoyeux Noël !";
ligne 32 : Data ==> $message
j'ai essayé d'utiliser plusieurs alternative mais toujours le même problème
Avez-vous une idée ?
Merci bcp
MERCI, bonnes fêtes à vous aussi
Il maque quelque chose quelque part ' ou " ou ; ....................Unrecognized escape \C passed through at ./mail.pl line 19.
Unrecognized escape \i passed through at ./mail.pl line 22.
L'anomalie peut venir des lignes précédentes !...
Lorsque vous posez une telle question, n'hésitez pas, après avoir beaucoup cherché par vous même, car c'est encore la meilleure façon de progresser, à faire un véritable copier/coller d'une large partie du source, afin qu'on puisse vous aider.
Là on ne peut rien voir, l'anomalie est certainement au dessus...
Faut presque être devin
indique que vous n'avez pas déclaré la variable $messageGlobal symbol "$message" requires explicit package name at ./mail.pl line 32.
et que vous avez utilisé la directive
use strict;
au début ce qui est très bien !
Il faut seulement mettre my devant $message :
le "my" limite la portée de la variable, ainsi si vous la déclarez dans une boucle, cette variable n'est pas accessible à l'extérieur de la boucle...
Code : Sélectionner tout - Visualiser dans une fenêtre à part my $message = "toto";
[Edit 16:00]
Mais en résolvant les "Unrecognized" il y a des chances que "requires explicit package" soit résolu...
je pense que le probléme vient du déclaration de my $message qui n'est pas reconnu par le data ==>
voici 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 #!/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; if ( -s "info.txt") { my $message = $text . "\n\n\Ci-dessus les infos !"; } else { my $message = "\n\n\pas d'info joyeux noël !"; } my $msg = MIME::Lite->new( From => 'xxxxxxxxxxxxxx@free.fr', To => 'xxxxxxxxxxxxxx@yahoo.fr', Subject => 'Perso', Type => 'TEXT', Data => $message, Filename => "FichierResultat.txt", ); $msg->send('smtp','smtp.orange.fr', Debug=>1, Timeout => 5 );
Ben oui là de suite c'est plus clair
Y peu pas comprendre les cotes font que $message n'est plus une variable mais une constante...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Data => '$message',
le code doit être :
Faut pas tricher aussi avec [EDIT] quand on modifie il faut le préciser
Code : Sélectionner tout - Visualiser dans une fenêtre à part Data => $message,
Car en plus dans la précipitation vous avez édité le mien
je me suis trompé en fait j'ai mis '$message' du coup il envoie le mail avec le message $message
quand je mets tout simplement $message il y a ça comme message d'erreur
Unrecognized escape \C passed through at ./mail.pl line 19.
Unrecognized escape \i passed through at ./mail.pl line 22.
Global symbol "$message" requires explicit package name at ./mail.pl line 32.
Execution of ./mail.pl aborted due to compilation errors
EDIT : je pense comme vous avez dit la variable n'est pas accessible à l'extérieur de la boucle
@SNTP2014: force-toi à indenter ton code correctement, tu ne peux pas imaginer à quel point ça aide pour écrire du code correct et éviter d'interminables séances de "débogage".
Pour moi, il n'y a aucune excuse pour écrire quelque chose comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if ( -s "info.txt") { my $message = $text . "\n\n\Ci-dessus les infos !"; } else { my $message = "\n\n\pas d'info joyeux noël !"; }
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
il y a quoi comme erreur dans le code ? pour profiter de votre compétence et pour que tout le monde puisse bénéficier de ce post
Il n'y a pas d'erreur, je parlais juste d'indentation, c'est-à-dire de présentation du code. Il est d'usage que tout bloc du code dépendant d'une instruction de contrôle (telle que while, if, else, until, for, sub, etc.) soit présenté en retrait de façon à bien visualiser d'un seul coup d’œil l'étendue du bloc. Par exemple:
On peut préférer un autre style d'indentation, comme par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if ( -s "info.txt") { my $message = $text . "\n\n\Ci-dessus les infos !"; } else { my $message = "\n\n\pas d'info joyeux noël !"; }
Le style d'indentation choisi n'a pas beaucoup d'importance, il faut juste essayer d'être cohérent. Et essayer d'utiliser un nombre de caractères d'indentation cohérent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if ( -s "info.txt") { my $message = $text . "\n\n\Ci-dessus les infos !"; } else { my $message = "\n\n\pas d'info joyeux noël !"; }
Tout cela ne change rien au fonctionnement du programme, surtout sur six lignes de code, mais ça rend l'intention du développeur beaucoup plus claire. Et, même sur un programme de seulement 30 lignes, ça fait toute la différence entre du code clair et du code parfaitement illisible. Et entre du code sans bug ou facile à débuguer, et du code bugué et impossible à comprendre et donc à débuguer.
Je ne connais aucun développeur un tant soit peu expérimenté qui ne se conforme pas soigneusement à ces règles. Certains langages de programmation (comme Python) imposent même l'indentation cohérente du code. Crois-moi, même si ça ne te paraît pas avoir d'importance pour du code aussi court, cela te fera gagner des heures de travail de débugage. Fais-le, même pour dix lignes de code provisoire dont tu ne te serviras que pendant 30 minutes. Tu seras gagnant.
D'ailleurs, dmganges avait bien écrit:
Ce n'est pas pour rien qu'il l'a fait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if ( -s "/tmp/info.txt" ) { my $message = "\n\n\Ci-dessous les info :\n\nBonne reception"; } else { my $message = "\n\n\Pas d'information !\n\nJoyeux Noël !"; }
Perso, je n'embaucherais simplement pas un développeur dont j'aurais vu ne serait-ce que quelques lignes de code récentes mal indentées (quel que soit le langage), étant entendu que je ne parle pas du style d'indentation, mais du fait d'indenter ou non tout bloc de code dépendant d'une instruction de contrôle.
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Merci pour votre conseil pertinent.
Toujours le même problème et je pense que je pense la variable n'est pas accessible à l'extérieur de la boucle parce que le programme se bloque là : data ==> $message
Je n'utilise pas ce module, mais
n'est certainement pas correct. Essaie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part data ==> $message
Code : Sélectionner tout - Visualiser dans une fenêtre à part data => $message,
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
pareil :s même problème
Est ce que on peut utiliser une variable en dehors de la condition parce que quend j'enléve la boucle if -s ça remarche et quand je remets la boucle data => $message ne marche pas.
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 #!/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; if ( -s "/tmp/info.txt" ) { my $message = "\n\n\Ci-dessous les info :\n\nBonne reception"; } else { my $message = "\n\n\Pas d'information !\n\nJoyeux Noël !"; } my $msg = MIME::Lite->new( From => 'xxxxxxxxxxxxxx@free.fr', To => 'xxxxxxxxxxxxxx@yahoo.fr', Subject => 'Perso', Type => 'TEXT', Data => $message, Filename => "FichierResultat.txt", ); $msg->send('smtp','smtp.orange.fr', Debug=>1, Timeout => 5 );
Il y a une différence de comportement du module suivant que l'on envoi des fichier .txt ou xsl !
Donc il faudra que tu répondes à nos questions !
Avec un fichier .txt ceci fonctionne :
J'ai mis en commentaire pour l'envoi d'un fichier .xsl !
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 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 => 'xxx@free.fr', To => 'xxx@yahoo.fr;dmganges@free.fr', Subject => 'Fichier txt joint', Type => 'TEXT', Data => $message, ); =pod $msg->attach( Type => "application/msexcel", Id => 'info.xls', Path => 'info.xls', ); =cut $msg->attach( Type => "TEXT", Id => 'info.txt', Path => 'info.txt', ); $msg->send('smtp','smtp.orange.fr', Debug=>0, Timeout => 5 );
Le module ne sait pas envoyer un fichier .xsl vide, pour lui un .xsl vide c'est un fichier corrompu !
Si tu envoies un fichier .xsl il faudra tester sur sa présence ou non ...
Qu'envoies-tu comme fichier ?
C'est un fichier TXT
le dernier code envoie un mail vide parce que le $message ="": est vide.
lorsque j'essaye d'envoyer un mail avec la boucle if -s l'envoie se bloque , le probléme vient du data=> $message
Message d'erreur : Global symbol "$message" requires explicit package name at ./mail.pl line 20.
Execution of ./mail.pl aborted due to compilation errors.
ligne 20 = data => $message
Edit : Voici le code j'envoie juste le contenu du fichier et pas une pièces jointe .
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 #!/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; if ( -s "/tmp/info.txt" ) { my $message = "\n\n\Ci-dessous les info :\n\nBonne reception"; } else { my $message = "\n\n\Pas d'information !\n\nJoyeux Noël !"; } my $msg = MIME::Lite->new( From => 'xxxxxxxxxxxxxx@free.fr', To => 'xxxxxxxxxxxxxx@yahoo.fr', Subject => 'Perso', Type => 'TEXT', Data => $message, Filename => "FichierResultat.txt", ); $msg->send('smtp','smtp.orange.fr', Debug=>1, Timeout => 5 );
le voilà :
j'envoie juste le contenu du fichier et pas une pièces jointe
EDIT : l'erreur exact c'est ça :
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 #!/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; if ( -s "/tmp/info.txt" ) { my $message = "\n\n\Ci-dessous les info :\n\nBonne reception"; } else { my $message = "\n\n\Pas d'information !\n\nJoyeux Noël !"; } my $msg = MIME::Lite->new( From => 'xxxxxxxxxxxxxx@free.fr', To => 'xxxxxxxxxxxxxx@yahoo.fr', Subject => 'Perso', Type => 'TEXT', Data => $message, Filename => "FichierResultat.txt", ); $msg->send('smtp','smtp.orange.fr', Debug=>1, Timeout => 5 );
le 2 éme my $message
et l'envoie se bloque :
Code : Sélectionner tout - Visualiser dans une fenêtre à part my $message = "\n\n\Pas d'information !\n\nJoyeux Noël !";
Code : Sélectionner tout - Visualiser dans une fenêtre à part Data => $message,
Ceci fonctionne :
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 #!/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 = "\n\nCi-dessous les info :\n\nBonne reception"; } else { $message = "\n\nPas d'information !\n\nJoyeux Noël !"; } my $msg = MIME::Lite->new( From => 'xxx@free.fr', To => 'xxx@yahoo.fr', Subject => 'Perso', Type => 'TEXT', Data => $message, Filename => "FichierResultat.txt", ); $msg->send('smtp','smtp.orange.fr', Debug=>0, Timeout => 5 );
Il fallait déclarer la variable $message en dehors des if, sinon comme précisé ci-dessus cette variable n'est pas visible par le reste du programme !
cela envoie un mail vide il prend pas en considération la boucle
Code : Sélectionner tout - Visualiser dans une fenêtre à part my $message = "";
Deux ou trois trucs qui m'interpellent.
D'une part tu ouvres un fichier "info.txt" et copies son contenu dans la variable $text, mais tu ne sembles pas utiliser la variable $text par la suite.
Ensuite, tu testes l'existence et la taille du fichier "/tmp/info.txt" (a priori un autre chemin et, donc, un autre fichier), mais ne sembles pas t'en servir non plus.
Enfin, tu utilises le fichier "FichierResultat.txt", dont on ne sait pas trop d'où il vient.
Bref, encore une fois, je ne connais pas le module, mais j'ai l'impression qu'il y a des incohérences dans tes noms de fichiers et de variables.
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager