PDA

Visualizza la versione completa : Semplice script per mailserver


mrandre
08-08-2010, 21:50
Sto cercando di sviluppare uno script .sh che, sfruttando il programma sendemail in accoppiata con un elenco di email sotto forma di file .txt e il corpo del messaggio, sempre sotto forma di file.txt invii in automatico una newsletter ai clienti della mia societā.

Dunque le azioni da eseguire sono queste :

1_Leggi la prima riga del documento "ElencoMail.txt" e inseriscila come destinatario all'interno del comando ( dopo l'opzione -t )
sendemail -f andrea.miocognome@miasocietā.com -t DESTINATARIO (L'INDIRIZZO SARA' INSERITO QUI) -u Company Presentation B -s smtpout.secureserver.net -xu andrea.miocognome@miasocieta.com -xp ******** -o message-file=/home/andrea/Documenti/Officia/send/mail.txt


2_Cancella la prima riga del documento txt (in questo modo quella che prima era la seconda riga diventa ora la prima e posso avviare un loop)

3_Se non c'e' piu nessuna email nel documento di testo ---->
<echo> Ho finito!

Altrimenti torna al punto 1

Ho le idee chiare ma non so come metterle in pratica visto che sono piuttosto nuovo nell'ambiente linux... HELP ME!

cacao74
08-08-2010, 23:09
togli dalla testa l'idea di leggere una riga e poi cancellarla

piu' semplicemente realizza un ciclo che legge dalla prima riga all'ultima, una riga per volta.
ciascuna riga corrisponde ad un indirizzo

per fare i test, invece di invocare sendmail, invoca un "echo <mail>"
butta giu' qualcosa e se hai problemi, replica.

psykopear
08-08-2010, 23:13
per prendere le singole email dal file .txt, fai un ciclo for del tipo

for i in `cat mail.txt` ecc. ecc.

mrandre
09-08-2010, 11:59
Originariamente inviato da cacao74
togli dalla testa l'idea di leggere una riga e poi cancellarla

piu' semplicemente realizza un ciclo che legge dalla prima riga all'ultima, una riga per volta.
ciascuna riga corrisponde ad un indirizzo

per fare i test, invece di invocare sendmail, invoca un "echo <mail>"
butta giu' qualcosa e se hai problemi, replica.

Infatti la mia situazione č proprio questa:

Nella cartella dello script mi trovo con 3 file: lo script stesso, il corpo del messaggio e la lista delle mail (disposte una per riga).
Come tu hai suggerito, la cosa migliore č quella di far leggere una riga per volta, (aggiungo io) assegnare il testo estratto ad una variabile ed eseguire il comando per inviare le email (sia esso sendmail o echo <mail> ma non č questo il problema) con $variabile al posto del destinatario.

Il mio problema č che di scripting non so praticamente nulla, ne capisco la logica ma non so assolutamente come metterla in pratica.

Insomma per farla breve come faccio a far leggere un file e salvare il contenuto della riga che sta leggendo in una variabile?
E (per me difficilissimo) come faccio a specificare che, di volta in volta, lo script debba leggere la riga successiva senza stare a scrivere a mano "leggi riga uno copia e invia, leggi riga due copia e invia, leggi riga tre"....fino alla fine del file?
Credo che a riguardo psycopear abbia dato giā qualche spunto ma troppo generico per me insesperto.


per prendere le singole email dal file .txt, fai un ciclo for del tipo

for i in `cat mail.txt` ecc. ecc.

(ho un centinaio di indirizzi e il numero varia di mese in mese, non posso ogni volta modificare lo script!)

psykopear
09-08-2010, 13:36
Aaaaaallora, innanzitutto, ti consiglio di leggerti una guida bash per capire come funziona lo scripting, perchč non č niente di difficilissimo, tič, ti do un link intanto

http://www.pluto.it/files/ildp/guide/abs/index.html

Questa č sicuramente la migliore.

Per quanto riguarda il tuo script, la linea che ti ho suggerito serve esattamente a fare ciō che hai chiesto, ti spiego

for i in `cat mail.txt`;
do
echo "Ho inviato una mail a $i"
done

Traducendo, Per ogni riga nel file "mail.txt", fai apparire il messaggio <mail>. Praticamente quella i č la variabile, che cambia per ogni riga del file, ovvero, prima la i č la prima mail del file, quando lo script ha eseguito i comandi fra il do e il done, li rifā nuovamente ogni volta, solo che la i diventa di volta in volta la mail successiva. Mi sono spiegato?

Loading