@UnModérateur : Éventuellement déplacer dans
Windows10 - Merci
Suite à notre échange MP je réponds ici.
Étant encore sous Win10 je ne peux pas répondre à la première question, mon interface du Planificateur de tâches est différente.
Donc pour :
C'est ce que je fais :
- Un programme Perl qui envoie un mail
- Un point.bat qui lance le programme Perl
- Le point.bat est lancé par GPO (stratégie de groupe de Windows) sur Arrêt du PC. On pourrait mettre le point.bat dans le planificateur
Si l'envoi de mails est déconseillé par tâches planifiées c'est qu'il faut à un moment préciser un compte mail smtp chez un fournisseur d'accès et d'y associer un mot de passe.
Un clampin en possession du code source peut voir ces informations...
Mais on peut contourner cet inconvénient :
1 - en utilsant un module de cryptage pour le mot de passe, par exemple
Crypt::CBC mais le mot de passe se trouve nécessairement en clair quelque part...
2 - en générant un exécutable Windows .exe avec le module
PAR:acker
Perl Strawberry se trouve
ICI
Les modules à inclure dans Perl sont sur le
CPAN
La FAQ Perl pour commencer
Un tuto pour installer les modules à partir du CPAN :
djibril
Un petit programme Perl qui envoie un mail :
Mime_Snowmann.pl :
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
| #!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Win32; # Pour GetTickCount
use Carp; # Gestion des erreurs de syntaxe
use File::Path; # Gestion des répertoires
use Encode; # Pour encoder en iso-8859-16
use MIME::Lite; # Pour envoyer les mail
my $RepBase = 'E:/_APPLI/Mail/';
my $RepBookMark = 'E:/_APPLI/_Save/Bookmarks';
my $FicTxt = File::Spec->catfile( $RepBase, 'info.txt' );
my $FicXls = File::Spec->catfile( $RepBase, 'info.xls' );
my $FicBmp = File::Spec->catfile( $RepBase, 'doudou.bmp' );
my $message = "";
my $Date_Heure = date();
my $Demarrage = Win32::GetTickCount();
my $Debut = $Demarrage;
my $Msec = $Demarrage % 1000;
$Demarrage = ($Demarrage - $Msec) / 1000;
my $Sec = $Demarrage % 60;
$Demarrage = ($Demarrage - $Sec) / 60;
my $Min = $Demarrage % 60;
$Demarrage = ($Demarrage - $Min) / 60;
my $Dem = "\nLe système été démarré depuis : $Demarrage h $Min mn $Sec s $Msec ms\n";
my $Stop = "\nSystème arrêté à : $Date_Heure\n";
my $FicJoints = "\nÉventuellement il y a des fichiers joints\n\n";
opendir my $FhRep, $RepBookMark or die ("impossible d'ouvrir le répertoire $RepBookMark :\n\t $! - $@\n");
my @Reps = grep { !/^\.\.?$/ } readdir($FhRep);
my $NbBookMark = @Reps;
my $BookMark = "ATTENTION, il y a $NbBookMark fichiers Bookmark.html,\nle dernier est $Reps[-1]";
if (-s "$FicTxt" ) {
$message = "\n\nCi-dessous les info :\n\nBonne reception\n";
} else {
$message = "\n\nPas d'information !\n";
}
$message = $message.$Stop.$Dem.$FicJoints.$BookMark;
$message = encode("iso-8859-16", $message);
my $msg = MIME::Lite->new(
From => 'michel@free.fr',
To => 'michel@free.fr',
Subject => $BookMark,
Type => 'TEXT',
Data => $message,
);
if (-e "$FicBmp" ) {
$msg->attach(
Type => "image/bmp",
Id => $FicBmp,
Path => $FicBmp,
);
}
if (-e "$FicXls" ) {
$msg->attach(
Type => "application/msexcel",
Id => $FicXls,
Path => $FicXls,
);
}
if (-e "$FicTxt" ) {
$msg->attach(
Type => "TEXT",
Id => $FicTxt,
Path => $FicTxt,
);
}
$msg->send('smtp','smtp.orange.fr',
Debug => 0,
AuthUser => 'michel.michel',
AuthPass => 'xxxxxxxxxxxxx',
Timeout => 5 );
print "MESSAGE=$message\n";
exit (0);
###############
# Date et Heure
sub date {
my $time = shift || time; #$time par defaut vaut le time actuel
my ( $seconde, $minute, $heure, $jour, $mois, $annee, $jour_semaine, $jour_annee, $heure_hiver_ou_ete )
= localtime($time);
$mois += 1;
$annee += 1900;
# On rajoute 0 si le chiffre est compris entre 1 et 9
foreach ( $seconde, $minute, $heure, $jour, $mois, $annee ) { s/^(\d)$/0$1/; }
return "Le $jour/$mois/$annee à $heure:$minute:$seconde";
} |
NB : c'est du rudimentaire !
Le pgm utilise le module
MIME::Lite pour l'envoi de mail
ainsi que le module
Win32 qui permet d'accéder aux API Windows (Tu n'en as probablement pas besoin - Voilà pourquoi, entre autre, je ne suis pas pressé de passer à Win10, je ne suis pas sûr d'y trouver toutes les API que j'utilise en Win7...
) NB : Le module Win32 se trouve maintenant dans le core de Perl (enfin de mémoire), il est inutile de l'installer de surcroit...
Le module
PAR:acker permettrait éventuellement de transformer
Mime_Snowmann.pl : en
Mime_Snowmann.exe : et de n'avoir plus sur le PC les infos de connexion au FAI en clair à condition de supprimer le .pl
Le programme :
- Détermine depuis combien de temps le PC tourne : Win32::GetTickCount() (API Win32)
- Récupère le nom du dernier fichier BookMark sauvegardé de mon Firefox
- Éventuellement joint au mail des fichiers image, txt, Excel, s'il sont présent dans un répertoire
- Effectue l'envoi, NB la présence d'info confidentielles :
1 2 3 4 5 6
| $msg->send('smtp','smtp.orange.fr',
Debug => 0,
AuthUser => 'michel.michel',
AuthPass => 'xxxxxxxxxxxxx',
Timeout => 5 );
print "MESSAGE=$message\n"; |
Le point.bat qui lance le programme Perl :
C:\Strawberry\perl\bin\wperl.exe E:\_APPLI\Mail\Mime.pl > E:\_APPLI\Mail\Mime.log
Le point.bat dans le GPO Windows, suivi du résultat dans Thunderbird
Partager