#1 Le 18/02/2014, à 11:49
- pem1664
[RESOLU]boucler l'envoi de mail issus d'un csv
Bonjour à tous! j'ai un fichier csv qui contient ~700 mails je voudrais faire un script qui permette d'envoyer un mail à chacune de ses adresses en utilisant la commande mail ou mutt selon s'il y a des pièces jointes ou pas, le problème c'est que je ne sais pas comment utiliser mon csv pour faire ca : je voudrais lire dans un premier temps le csv créer une variable donnant le nombre exact de mails et faire une boucle qui répete la commande mail (ou mutt) jusqu'a la fin de la liste csv.
Quelqu'un pourrait il m'aider svp?
D'avance merci!
Dernière modification par pem1664 (Le 18/02/2014, à 15:26)
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#2 Le 18/02/2014, à 11:58
- pingouinux
Re : [RESOLU]boucler l'envoi de mail issus d'un csv
Bonjour,
Peux-tu donner un exemple ?
- un bout du fichier .csv (en mettant éventuellement des adresses bidon)
- les commandes que tu veux générer
Hors ligne
#3 Le 18/02/2014, à 12:17
- pem1664
Re : [RESOLU]boucler l'envoi de mail issus d'un csv
Merci pour ta réponse
alors voila le csv est de la forme :
toto@fai.fr
toto1@fai.fr
toto2@fai.fr
toto3@fai.fr
toto4@fai.fr
toto5@fai.fr
toto6@fai.fr
...
et le script en lui meme je voyais une boucle while du genre :
$nbmails= nombre de ligne du csv
$mail=valeur de l'adresse mail en cours
$count=nombre de mail envoyés
while ($count != $nbmail)
do
echo "ce qui doit etre ecrit dans le corps du mail" | mail -s "sujet du mail" $mail < piecejointe
$count++
en gros
modif : en fait il me manque toute la partie ou le script va lire le csv, compter le nombre de lignes, et aller chercher au fur et a mesure les adresses mail... sinon la partie simple, cad l'envoi du mail c'est juste une commande... (je suis un boulet!)
Dernière modification par pem1664 (Le 18/02/2014, à 12:27)
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#4 Le 18/02/2014, à 12:36
- pingouinux
Re : [RESOLU]boucler l'envoi de mail issus d'un csv
Voici qui devrait t'aider :
#!/bin/bash
while read adrs_mail
do
((count++))
printf "%4d %s\n" $count $adrs_mail
done <fichier.csv
Ce qui donne avec ton exemple :
1 toto@fai.fr
2 toto1@fai.fr
3 toto2@fai.fr
4 toto3@fai.fr
5 toto4@fai.fr
6 toto5@fai.fr
7 toto6@fai.fr
Hors ligne
#5 Le 18/02/2014, à 13:06
- pem1664
Re : [RESOLU]boucler l'envoi de mail issus d'un csv
Super, ca fonctionne impeccable pour lister le csv et en fait je peux intégrer le printf dans mon echo?
comme ceci?
echo "ce qui doit etre ecrit dans le corps du mail" | mail -s "sujet du mail" printf "%4d %s\n" $adrs_mail < piecejointe
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#6 Le 18/02/2014, à 13:15
- pingouinux
Re : [RESOLU]boucler l'envoi de mail issus d'un csv
Le printf n'était là que pour montrer ce qui était lu dans le fichier (un echo aurait fait l'affaire, mais printf permet de formater la sortie).
Dans ton cas, ceci devrait suffire :
echo "ce qui doit etre ecrit dans le corps du mail" | mail -s "sujet du mail" $adrs_mail < piecejointe
Hors ligne
#7 Le 18/02/2014, à 13:17
- pem1664
Re : [RESOLU]boucler l'envoi de mail issus d'un csv
Ok, merci beaucoup pingouinux! je crois que je vais pouvoir m'en sortir avec ca!
Crois tu qu'il failles mettre un sleep? pour temporiser l'envoi? Et une question comment je peux gérer s'il y a des adresses mail qui ne fonctionnent pas?
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#8 Le 18/02/2014, à 13:28
- pingouinux
Re : [RESOLU]boucler l'envoi de mail issus d'un csv
Remarques :
- La variable count n'a pas l'air d'être utile
- Je ne crois pas que la syntaxe soit correcte pour la pièce jointe
Crois tu qu'il failles mettre un sleep?
Telle que la commande est écrite, on attend qu'elle soit terminée pour passer à la boucle suivante.
Et une question comment je peux gérer s'il y a des adresses mail qui ne fonctionnent pas?
En créant un fichier log, par exemple (en ajoutant 2>/tmp/$adrs_mail.log à la fin de la commande). Il y aura un fichier créé par adresse en erreur.
Hors ligne
#9 Le 18/02/2014, à 14:06
- pem1664
Re : [RESOLU]boucler l'envoi de mail issus d'un csv
Super! merci encore!
En effet la commande pour la pj ne fonctionne que si c'est un fichier texte, et le type mime de mail ne supporte que ca donc si je veux envoyer un autre type de document il faut que je passe par mutt (enfin c'est ce que j'ai compris de ssmtp..)
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne