Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Besoin d'aide pour envoyer un mail via Perl

7 réponses
Avatar
Sébastien
Bonjour tout le monde,

Je n'y connais pas grand chose en Perl et j'ai =E9cris un petit script
qui doit selectionner des enregistrements dans une table suivant un
crit=E8re, envoyer le resultat dans un mail =E0 une ou plusieurs
personnes puis indiquer que les enregistrements ont =E9t=E9 trait=E9s.

Voici mon script :
#usr/bin/perl
use Mail::Sender;
use DBI;

$base =3D "ma base";
$login =3D "mon login";
$pass =3D "mon pot de passe";

# on se connecte a la base
$dbh =3D DBI->connect("DBI:mysql:$base",$login,$pass) || die "erreur
connection" ;

# on selectionne les nouvelles blagues
$req =3D "SELECT DATE_BLAGUE, NOTE_BLAGUE, TITRE_BLAGUE, FICHIER_BLAGUE
FROM BLAGUE WHERE MAIL LIKE 'N';";
$req =3D $dbh->prepare ("$req");
$req->execute || die "erreur execution requete";

# on constitue le mail
$message =3D new Mail::Sender { smtp =3D>'smtp.wanadoo.fr', from
=3D>'monadesse@wanadoo.fr'};
$message -> Open ({to =3D> 'autresadesses@wanadoo.fr' , subject =3D> 'Mail
automatique'});
while (@result=3D$req->fetchrow_array){
foreach(@result){
$message -> SendLine("$_ ");
}
}
$message -> Close;
$req->finish;

# on indique que les nouvelles blagues ont ete traitees
$req =3D "UPDATE BLAGUE SET MAIL =3D 'O' WHERE MAIL LIKE 'N';";
$req =3D $dbh->prepare ("$req");
$req->execute || die "erreur execution requete";
$req->finish;

# on se deconnecte a la base
$dbh->disconnect;

Il marche correctement et mon script envoie le mail suivant :
2006-05-05
1
Fermeture du bar
0605/fermeturebar.mpeg
2006-05-05
1
Trop de vent ?
0605/13.jpg
2006-05-05
1
Des chutes..
0605/chutes.wmv

J'aimerais obtenir dans un premier temps ceci :
2006-05-05 1 Fermeture du bar 0605/fermeturebar.mpeg
2006-05-05 1Trop de vent ? 0605/13.jpg
2006-05-05 1 Des chutes.. 0605/chutes.wmv

Puis j'aimerais ajouter une adresse web au dernier champ et un
commentaire au second , pour avoir :
2006-05-05 Note : 1 Fermeture du bar
http://monadresseweb/0605/fermeturebar.mpeg
2006-05-05 Note : 1Trop de vent ? http://monadresseweb/0605/13.jpg
2006-05-05 Note : 1 Des chutes.. http://monadresseweb/0605/chutes.wmv

Si en plus les champs pouvaient =EAtre align=E9s... ce serait le top :
2006-05-05 Note : 1 Fermeture du bar
http://monadresseweb/0605/fermeturebar.mpeg
2006-05-05 Note : 1 Trop de vent ?
http://monadresseweb/0605/13.jpg
2006-05-05 Note : 1 Des chutes..
http://monadresseweb/0605/chutes.wmv=20

Par avance merci.

S=E9bastien

7 réponses

Avatar
Sébastien Cottalorda
Bonjour tout le monde,


Salut,

Je n'y connais pas grand chose en Perl et j'ai écris un petit script
qui doit selectionner des enregistrements dans une table suivant un
critère, envoyer le resultat dans un mail à une ou plusieurs
personnes puis indiquer que les enregistrements ont été traités.

Voici mon script :
#usr/bin/perl
use Mail::Sender;
use DBI;

$base = "ma base";
$login = "mon login";
$pass = "mon pot de passe";

# on se connecte a la base
$dbh = DBI->connect("DBI:mysql:$base",$login,$pass) || die "erreur
connection" ;

# on selectionne les nouvelles blagues
$req = "SELECT DATE_BLAGUE, NOTE_BLAGUE, TITRE_BLAGUE, FICHIER_BLAGUE
FROM BLAGUE WHERE MAIL LIKE 'N';";
$req = $dbh->prepare ("$req");
$req->execute || die "erreur execution requete";

# on constitue le mail
$message = new Mail::Sender { smtp =>'smtp.wanadoo.fr', from
=>''};
$message -> Open ({to => '' , subject => 'Mail
automatique'});
while (@result=$req->fetchrow_array){


Remplace ce bloc ==>
foreach(@result){
$message -> SendLine("$_ ");
}
par $message -> SendLine("@result");


}
$message -> Close;
$req->finish;


J'espère que cela t'aidera.

Sébastien

Avatar
Sébastien
Bonjour,

Merci pour ton aide.
J'ai déjà tenté cette modification hier au soir.
Cela m'a permis d'obtenir quelque chose comme :

2006-05-05 1 Fermeture du bar 0605/fermeturebar.mpeg
2006-05-05 1Trop de vent ? 0605/13.jpg
2006-05-05 1 Des chutes.. 0605/chutes.wmv

Ce qui répond à ma première modification.
Toutefois, j'aimerais aussi ajouter du "texte" sur ma réponse pour
obtenir :

2006-05-05 Note : 1 Fermeture du bar
http://monadresseweb/0605/fermeturebar.mpeg
2006-05-05 Note : 1 Trop de vent ?
http://monadresseweb/0605/13.jpg
2006-05-05 Note : 1 Des chutes..
http://monadresseweb/0605/chutes.wmv

(ajout de "Note :" et de "http://monadresseweb/" ).
Comment dois je faire ?

Par avance merci.

Sébastien
Avatar
Sébastien Cottalorda
Bonjour,

Merci pour ton aide.
J'ai déjà tenté cette modification hier au soir.
Cela m'a permis d'obtenir quelque chose comme :

2006-05-05 1 Fermeture du bar 0605/fermeturebar.mpeg
2006-05-05 1Trop de vent ? 0605/13.jpg
2006-05-05 1 Des chutes.. 0605/chutes.wmv

Ce qui répond à ma première modification.
Toutefois, j'aimerais aussi ajouter du "texte" sur ma réponse pour
obtenir :

2006-05-05 Note : 1 Fermeture du bar
http://monadresseweb/0605/fermeturebar.mpeg
2006-05-05 Note : 1 Trop de vent ?
http://monadresseweb/0605/13.jpg
2006-05-05 Note : 1 Des chutes..
http://monadresseweb/0605/chutes.wmv


Salut,

tu peux faire comme ceci:
ATTENTION, cela suppose que le fichier est toujours à la position n°3
dans la requête SQL


#usr/bin/perl
use Mail::Sender;
use DBI;

$base = "ma base";
$login = "mon login";
$pass = "mon pot de passe";

# on se connecte a la base
$dbh = DBI->connect("DBI:mysql:$base",$login,$pass) || die "erreur
connection" ;

# on selectionne les nouvelles blagues
$req = "SELECT DATE_BLAGUE, NOTE_BLAGUE, TITRE_BLAGUE, FICHIER_BLAGUE
FROM BLAGUE WHERE MAIL LIKE 'N';";
$req = $dbh->prepare ("$req");
$req->execute || die "erreur execution requete";

# on constitue le mail
$message = new Mail::Sender { smtp =>'smtp.wanadoo.fr', from
=>''};
$message -> Open ({to => '' , subject => 'Mail
automatique'});
while (@result=$req->fetchrow_array){
#########################################################
# Ajou de http://monadresseweb/ devant le nom du fichier
#########################################################
$result[3] = 'http://monadresseweb/'.$result[3];
$message -> SendLine("@result");
}
$message -> Close;
$req->finish;

# on indique que les nouvelles blagues ont ete traitees
$req = "UPDATE BLAGUE SET MAIL = 'O' WHERE MAIL LIKE 'N';";
$req = $dbh->prepare ("$req");
$req->execute || die "erreur execution requete";
$req->finish;

# on se deconnecte a la base
$dbh->disconnect;


REMARQUE: A ta place, je n'utiliserai pas LIKE dans la requête SQL, mais
plutôt "=", en effet, il me semble que LIKE est plus gourmand en ressources

Sébastien

Avatar
Sébastien
Ok, j'ai modifié mon script pour avoir :
while (@result=$req->fetchrow_array){
$result[0] = $result[0].' ';
$result[1] = ' Note : '.$result[1].' ';
$result[2] = $result[2].' ';
$result[3] = 'http://sdrouard.dyndns.org/'.$result[3].' ';;
$message -> SendLine("@result");
}

Ce qui me donne en résultat :
2006-05-05 Note : 1 Fermeture du bar
http://monadresseweb/0605/fermeturebar.mpeg
2006-05-05 Note : 1 Trop de vent ?
http://monadresseweb/0605/13.jpg
2006-05-05 Note : 1 Des chutes..
http://monadresseweb/0605/chutes.wmv
2006-05-08 Note : 1 On danse ?
http://monadresseweb/0605/Pinguindance.wmv
2006-05-08 Note : 2 Toto
http://monadresseweb/0605/toto.pps
2006-05-08 Note : 1 Pub
http://monadresseweb/0605/Whyshaveclose.wmv
2006-05-09 Note : 2 La ceinture
http://monadresseweb/0605/ceinture.pps
2006-05-09 Note : 2 Berlusconi
http://monadresseweb/0605/Berlusconi.wmv
2006-05-09 Note : 1 Mobylette
http://monadresseweb/0605/Mobylette.mpg
2006-05-09 Note : 0 Régis
http://monadresseweb/0605/regis.zip
2006-05-09 Note : 0 Bonjour les petits nenfants
http://monadresseweb/0605/jackass_enfants.zip

Y a t'il un moyen pour que le champ titre (le 3) fasse toujours 35
caractères de long ?
Par avance merci.

Encore merci a toutes les personnes qui m'aident

Sébastien
Avatar
Sébastien
Ok, j'ai modifié le while de manière à avoir :

while (@result=$req->fetchrow_array){
$result[0] = $result[0].' ';
$result[1] = ' Note : '.$result[1].' ';
$result[2] = $result[2].' ';
$result[3] = 'http://monsiteweb/'.$result[3].' ';;
$message -> SendLine("@result");
}

Ce qui me donne en résultat :
2006-05-05 Note : 1 Fermeture du bar
http://monsiteweb/0605/fermeturebar.mpeg
2006-05-05 Note : 1 Trop de vent ?
http://monsiteweb/0605/13.jpg
2006-05-05 Note : 1 Des chutes..
http://monsiteweb/0605/chutes.wmv
2006-05-08 Note : 1 On danse ?
http://monsiteweb/0605/Pinguindance.wmv
2006-05-08 Note : 2 Toto
http://monsiteweb/0605/toto.pps
2006-05-08 Note : 1 Pub
http://monsiteweb/0605/Whyshaveclose.wmv
2006-05-09 Note : 2 La ceinture
http://monsiteweb/0605/ceinture.pps
2006-05-09 Note : 2 Berlusconi
http://monsiteweb/0605/Berlusconi.wmv
2006-05-09 Note : 1 Mobylette
http://monsiteweb/0605/Mobylette.mpg
2006-05-09 Note : 0 Régis
http://monsiteweb/0605/regis.zip
2006-05-09 Note : 0 Bonjour les petits nenfants
http://monsiteweb/0605/jackass_enfants.zip

J'aimerais que le champ titre fasse toujours 35 caractères de long.
Comment dois je faire ?

Encore merci à toutes les personnes qui m'aident.

Sébastien
Avatar
Patrick Texier
Le 9 May 2006 15:49:11 -0700, "Sébastien"
a écrit :

J'aimerais que le champ titre fasse toujours 35 caractères de long.
Comment dois je faire ?


Utiliser sprintf :

sprintf('%-35s', $titre)

Avatar
Sébastien
Merci.

Cela a fonctionné.