Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile
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