Newsgroup: it.comp.os.linux.sys
Titolo: client email per shellscript

ciao
devo automatizzare la spedizione dei log su un server,
che client email posso usare nello script preposto?
tenete presente che devo inviare del testo
generico più un allegato contenente i log zippati.
thanx.

 thanx.
ciao ..
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0};printf("%s",c);return 0;}

 ha scritto nel messaggio
news:bnm3bp$pv4$1...@lacerta.tiscalinet.it...

Faccio spesso script che inviano cose per email, e mutt non mi ha mai
tradito.... funziona alla grande.
Un solo consiglio se il tuo script funziona in bg la variabile TERM sarà
impostata su dumb e mutt si inkazza.
In tal caso nel tuo script imposta TERM=vt220 per esempio....
Ciao.
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.530 / Virus Database: 325 - Release Date: 22/10/2003


dimenticavo un dettaglio:-)
ho dato un'occhiata alla man page di mutt,
ma non ho trovato l'opzione per indicare il server smtp
da usare per l'invio della posta, ne ho bisogno perchè
non ne ho uno in locale.
ce faccio?
bye

 ma non ho trovato l'opzione per indicare il server smtp
Infatti non c'è....
Ti consiglio di installare Postfix o Qmail così la tua macchina diventerà
smtp e il gioco è fatto, in + la configurazione di Postfix per funzionare
solo come smtp richiede 3 minuti netti, quindi non credo che avrai problemi.
Se proprio non vuoi installare un vero mailserver però potrei segnalarti (ma
non consigliarti) alcuni programmini "Send Only" che possono essere
agganciati a mutt attraverso il file di configurazione, credo che il
migliore ed il + facile da configurare sia ssmtp
http://larve.net/people/hugo/2001/02/ssmtp/


 Ciao.
in effetti ho notato che la situazione su questo fronte è
pessima, non c'è un client smtp decente neanche se piangi
in cinese.
ne ho trovati diversi ma nessuno ha funzionalità decenti.


Che ne dici del Perl?
Ti allego uno scriptino che ho fatto per fare un lavoro analogo: manda a 
x recipient tutti i file contenuti in x directory che rispettano un 
certo pattern (vedi codice), e poi li cancella. Se non hai il 
pacchettino Mail::Sender, dovresti trovarlo su CPAN. Fanne quello che 
credi (è più lungo delle soluzioni one-liner con mutt che ti hanno già 
proposto, ma un po' più versatile)... io pero' te lo consegno AS IS, non 
do' garanzie :-)
#!/usr/bin/perl
#
# Script per l'invio automatico di file via mail
#
# (C) Fabrizio Ermini  2003
#
use Mail::Sender;
# Variabili di configurazione
$smtpserver = 'xx.xx.xx.xx';
$sender = '
xx...@xxxxx.it
';
$subject_prefix = 'Invio del ';
$bcc_recpt = '
xxx...@xxxxx.it
';
$bcc_subj = 'Invio effettuato a ';
$homedir = '/var/tmp';
%destinatari = ('nomedir1' => '
xx...@xxxxxx.it
','nomedir2' 
=>'
xxx...@xxxxxx.it
');
# istanzio l'oggetto sender
$sender = new Mail::Sender{
   smtp => $smtpserver,
   from => $sender,
   replyto => $sender,
   headers => 'X-Sender: mail automatic service by hermooz\n',
   confirm => 'delivery'
   };
die "Errore nell'invio: $Mail::Sender::Error\n" unless ref $sender;
# Setto la dir di lavoro
chdir($homedir) or die ("directory $homedir non accessibile");
# Ciclo sull'array dei destinatari
foreach $destinatario (sort (keys %destinatari))
{
   $email = $destinatari{$destinatario};
   opendir(DIR,$homedir.'/'.$destinatario) or die ("directory 
$homedir/$destinatario non accessibile");
   @entries = readdir(DIR);
   @files = grep {/nomefile/} @entries;
   closedir(DIR);
   $numfiles=@files;
   next if ($numfiles<=0);
   # invio la mail con i file al destinatario
   $lista = join ',', @files;
   chdir($destinatario);
   $sender->MailFile({
   to => $email,
   subject => $subject_prefix.gmtime(),
   msg => "Sistema di invio automatico di dati.\n(C) Hermooz\n\n",
   file => $lista
   });
   die "Errore nell'invio: $Mail::Sender::Error\n" unless ref $sender;
   # invio la mail di conferma
   $sender->MailFile({
   to => $bcc_recpt,
   subject => $bcc_subj.$destinatario,
   msg => "Sistema di invio automatico di dati.\n(C) Hermooz\n\n",
   file => $lista
   });
   die "Errore nell'invio: $Mail::Sender::Error\n" unless ref $sender;
   # elimino i files spediti
   unlink @files;
   chdir('..');
}
exit;
# Fine del codice
-- 
Fabrizio "Hermooz" Ermini

 do' garanzie :-)
guarda il caso ne stavo giusto modificando uno in python
che fa la stessa cosa:-)
purtroppo il perl non fa (ancora per poco) parte del mio
"arsenale" di programmazione.
grazie lo stesso.

 ne ho trovati diversi ma nessuno ha funzionalità decenti.
Questo perche' non c'e' "richiesta sul mercato" per una cosa del 
genere... nei sistemi unix ci si aspetta di solito che il server stesso 
sia in grado di fare da SMTP.
-- 
Fabrizio "Hermooz" Ermini

 
Guarda, neanche del mio... anzi, lo detesto visceralmente :-)
Pero' per un compito del genere è stata una scelta quasi forzata. Lo 
trovi già installato quasi dappertutto (anche su sistemi non Linux: 
quello script lì lo uso anche su AIX), a differenza di altri tool tipo 
mutt e company; per fare operazioni semplici non c'e' bisogno di grossa 
abilità di programmazione (quello script l'ho fatto in pratica con pochi 
copia & incolla e tre ritocchini...); ti mette a disposizione una classe 
che ti gestisce smtp esterni, attach, delivery receipt ecc. in modo 
trasparente... ergo... ho fatto buon viso a cattivo gioco e l'ho data 
vinta al cammello almeno per questa volta ;-)
-- 
Fabrizio "Hermooz" Ermini


ecco la risposta, un programmino in python che fa tutto
quello che non avete mai osato chiedere:-)
ho modificato un programma della documentazione di python
ed ecco il risultato.
legge il testo di una email da file (anche stdin)
potete inserire un allegato e potete (finalmente)
scegliere un server di posta esterno, manca solo
l'autenticazione per cui potete spedire solo se
la mailbox e sul server smtp stesso, che è il mio caso.
ad ogni modo la classe SMTP che ho usato prevede
anche il login.
attenzione:
mozilla ha troncato un po di linee con dei ritorni
selvaggi, a voi il compito di scovarli ed eliminarli.
#!/usr/bin/python
"""Send email as MIME message.
Usage: smtp_client [options]
Options:
     -a, --append <filename>
     -s, --subject <subject>
     -t, --text <text_filename> or - for stdin
     -h, --server <smtp_server>
	default 'localhost'
     -p, --port <server_port>
	default 25
"""
import sys
import os
import getopt
import smtplib
# For guessing MIME type based on file name extension
import mimetypes
from email import Encoders
from email.Message import Message
from email.MIMEAudio import MIMEAudio
from email.MIMEMultipart import MIMEMultipart
from email.MIMEImage import MIMEImage
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
COMMASPACE = ', '
def usage(code, msg=''):
     print >> sys.stderr, __doc__
     if msg:
         print >> sys.stderr, msg
     sys.exit(code)
def main():
     try:
         opts, args = getopt.getopt(sys.argv[1:], 't:s:h:p:a:', ['text', 
'subject', 'server', 'port', 'append'])
     except getopt.error, msg:
         usage(1, msg)
     server = 'localhost'
     port = 25
     subject = ''
     text = ''
     attach = ''
     for opt, arg in opts:
         if opt in ('-h', '--server'):
	    server = arg
	elif opt in ('-p', '--port'):
	    port = int(arg)
	elif opt in ('-a', '--append'):
	    attach = arg
	elif opt in ('-s', '--subject'):
	    subject = arg
	elif opt in ('-t', '--text'):
	    text = arg
     if len(args) < 2:
         usage(1)
     sender = args[0]
     recips = args[1:]
     # Create the enclosing (outer) message
     outer = MIMEMultipart()
     outer['Subject'] = subject
     outer['To'] = COMMASPACE.join(recips)
     outer['From'] = sender
     outer.preamble = ''
     # To guarantee the message ends with a newline
     outer.epilogue = ''
     if text == '-':
	in_text = sys.stdin
     elif len(text):
	in_text = file(text)
     else:
	in_text = None
     if in_text:
	mime_text = MIMEText(in_text.read(), _subtype='plain') #text/plain
	mime_text.add_header('Content-Disposition', 'attachment', filename='text')
	outer.attach(mime_text)
     if len(attach) and os.path.isfile(attach):
	ctype, encoding = mimetypes.guess_type(attach)
         if ctype is None or encoding is not None:
             # No guess could be made, or the file is encoded 
(compressed), so
             # use a generic bag-of-bits type.
             ctype = 'application/octet-stream'
         maintype, subtype = ctype.split('/', 1)
	fp = file(attach, 'rb')
	msg = MIMEBase(maintype, subtype)
	msg.set_payload(fp.read())
	fp.close()
	# Encode the payload using Base64
	Encoders.encode_base64(msg)
	# Set the filename parameter
	msg.add_header('Content-Disposition', 'attachment', filename=attach)
	outer.attach(msg)
     # Now send the message
     s = smtplib.SMTP()
     s.connect(server, port)
     s.sendmail(sender, recips, outer.as_string())
     s.close()
if __name__ == '__main__':
     main()

 
se c'è un server smtp da un lato dall'altro
ci vuole un client,
puoi chiamarlo client email, client di posta, client per spedire
le email, client di posta elettronica.
io ho detto client smtp perchè mi sembrava più chiaro
dato il contesto.

 orologio) e' puramente incidentale e non cambia lo stato delle cose.
Ben detto! :-)
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.532 / Virus Database: 326 - Release Date: 27/10/2003

 ne ho trovati diversi ma nessuno ha funzionalità decenti.
Hai trovato diversi cosa?  Quali sarebbero le `funzionalità decenti'?
E dove hai cercato, prima di decidere che la situazione su questo
fronte è `pessima'?
La situazione su questo fronte è rosea, ci sono tutte le combinazioni:
MTA completi talmente facili da configurare che possono essere usati
anche come semplici client SMTP; programmi di gestione della posta che
parlano SMTP da sé; vie di mezzo come quelle riportate qui sotto.
http://msmtp.sourceforge.net/
    msmtp is an "SMTP plugin" for Mutt and probably other MUAs (mail
    user agents).
 
    It forwards mails to an SMTP server (for example at a free mail
    provider) which does the delivery.
 
    To use this program, create a configuration file with your mail
    account(s) and tell your MUA to call msmtp instead of
    /usr/sbin/sendmail.
Package: masqmail
Description: A mailer for hosts without permanent internet connection
 MasqMail is a MTA (mail transport agent) and POP3 client for hosts
 that don't have a permanent internet connection, eg. a home network
 or a single host at home and notebooks. It has special support for
 connections to different ISPs.
 .
 In these cases, MasqMail is a slim replacement for full-blown MTAs
 such as sendmail, exim, qmail or postfix. The POP3 client can be
 a small replacement for other full-featured tools like fetchmail.

 cui il client si appoggia. 
Sono  d'accordo  su  tutto  (in particolare  sulla  configurazione  di
postfix  in  5  minuti),  pero'  devo ammettere  che  non  mi  sarebbe
dispiaciuto una  sorta di  resolv.conf dell'smtp.  Ci  sono situazioni
IMHO nelle  quali non sarebbe male  avere un solo server  SMTP in lan,
piuttosto che avere un server su ogni macchina.
A  dire la verita'  questo discorso  lo rifarei  per ogni  server, nel
senso  che sarebbe  bello avere  in /etc  un file  per  ogni server[1]
modello resolv.conf (parlo ad esempio  di ntp, proxy... ma anche molti
altri).  Un  altra cosa che e'  collegata a questo discorso  e' che il
dhcpd server  di openbsd  offre molte opzioni  di questo  tipo (option
ntp-servers e  option nntp-server ad  esempio), di cui pero'  i client
linux sembrano fregarsene...
Non pensi che il discorso sarebbe interessante da affrontare?
[1]  Non necessariamente  uno  per  ogni server,  partirei  da i  piu'
importanti (smtp e ntp fra tutti)
-- 
Sono un servitore del Fuoco Segreto, e reggo la fiamma di Anor.
A nulla ti servira' il fuoco oscuro, fiamma di Udun.
Torna nell'Ombra! Non puoi passare.

 linux sembrano fregarsene...
devi impostare un'azione in /etc/dhclient-exit-hooks ,sul come passare le
opzioni ai vari programmi vedi tu ... magari delle variabili d'ambiente
dichiarate nei files di configurazione,gia' si fa qualcosa del genere per
configurare i firewall.
my 2 cents ;-)
-- 
          "chown linux:users /world"
        PGP key on 
keyserver.linux.it

 orologio) e' puramente incidentale e non cambia lo stato delle cose.
qui sei razzista, io di tempo ne ho passato a fare tutto alla "linux",
ma ora ho il mio bel client grafico (mozilla) su una mandrake e non mi 
sfiora neanche un pò l'idea di mettere su un server di posta in locale.
Questo non perchè io sia pigro, ma perchè non ha senso essere estremisti
su questi argomenti. se c'è qualcosa che rende la vita più comoda usiamola.

 piuttosto che avere un server su ogni macchina.
ammetto di non aver letto il thread, quindi spero di rispondere a tono,
e non dire fesserie, se vado fuori strada, please, avvisatemi.
Non sono sicuro di aver capito l'affermazione "una sorta di resolv.conf
dell'smtp", ma avere un MTA su ogni macchina *nix, non e` una comodita`
o una scomodita`: e` un requirement POSIX.
E difatti, molti processi funzionano partendo dal presupposto che "mail
localhost" funzioni: cron, per dirne uno.
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
QUOTE OF THE DAY: `

 
oltre a mandrake o una debian woody
che uso per lavoro
e slackware 9.0 che uso per le cose "sporche"
che inevitabbilmente piantano mandrake.
il punto e la libertà,
nessuno mi vieta du mettere un MTA su windows e trasformarlo
in una brutta copia di unix aggiungendo un po' di comandi posix
e una shell decente, ma converrai con me che sarebbe una presa in giro.
il bello di linux è la varietà di scelte a disposizione,
scelte che comunque appoggiano su una base solidissima
risultato di anni di sviluppo teorico (POSIX) e tecnico
(il kernel stesso).
la mia scelta e appunto qulla di avere un desktop
senza compromessi per tutti i giorni e uno unix
senza compromessi (slackware e debian) per il lavoro.

 localhost" funzioni: cron, per dirne uno.
Si, questo lo  so, ma a me sembrerebbe comodo  (in alcuni casi) potere
non avere un server smtp locale  e affidarsi ad un unico mailserver in
lan.  Non vedo  l'utilita' di avere un server  smtp installato su ogni
macchina,  anche se  e' una  cosa  che fino  ad ora  ho sempre  fatto.
Ovvio, un  mailserver in  lan ci deve  essere, ma non  capisco perche'
piu' di uno (se la macchina col mailserver e' always-on).


 opzioni ai vari programmi vedi tu ... 
E' questo il punto, con  resolv.conf mi basta cambiare l'indirizzo del
nameserver e so che da quel  punto in poi tutte le risoluzioni di nomi
passeranno dal server che ho indicato.  Perche' non posso avere questa
comodita' (cioe' avere  un file standard a cui  si appoggiano tutte le
richieste di un certo tipo) anche per gli altri server?


 di un dhcpd.
Anch'io in  casa non ne ho una  grossa necessita', ma da  quando ho il
portatile e lo  attacco sia alla mia lan domestica  che a quella della
mia  ragazza, vorrei che  il server  dhcp mi  potesse dare  il maggior
numero di informazioni sulla lan nella quale sto entrando, compreso il
server  smtp  da  utilizzare.   In  quel  modo  potrei  spedire  posta
direttamente senza dovere passare dal web o senza riconfigurare (e' un
parametro solo,  lo so eh  ;-)) e riavviare  il mio postfix  (che come
relayhost ha ovviamente il server smtp gateway di casa mia).
Forse  la mia  e' davvero  un'  idea stupida,  ma non  mi sono  ancora
convinto del perche'.  Quello che mi  dice che devo farlo finora e' il
fatto  che un  server  SMTP in  locale  su una  macchina  UNIX e'  uno
standard  POSIX,  ma  realmente   non  ne  capisco  la  necessita'  in
determinate situazioni.


 piu' di uno (se la macchina col mailserver e' always-on).
Il motivo e` implicito: perche` diversi programmi non funzionano piu`
correttamente.
E esci da una specifica importante che e` quella posix.
Non confondere MTA con mail server. Non e` necessario "fare da server".
L'mta locale puo` tranquillamente essere configurato per la sola
consegna locale (appunto le funzionalita` di cui sopra).
I pacchetti debian, sia per exim, che per postfix (gli altri non li ho
provati sotto debian), prevedono gia` questa configurazione tra quelle
possibili.
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
Greetings, Professor Falken.

 su questi argomenti. se c'è qualcosa che rende la vita più comoda usiamola.
Non è estremismo, è buon senso.  Diversi programmi danno per scontato
che uno dei tanti canali di comunicazione con gli utenti locali sia la
posta (mi vengono in mente at, cron, debconf, apt-listchanges).
A loro volta tali programmi non lo fanno per estremismo, lo fanno
perché le specifiche *assicurano* che in un sistema Unix puoi contare
sull'esistenza di un MTA.
Né le specifiche lo fanno per estremismo, lo fanno perché un canale di
comunicazione `in differita' con gli utenti, su un sistema un pelo più
sofisticato dell'incrocio tra un frigorifero e un televisore, è
semplicemente *logico*.
Se un canale di comunicazione tra processi e utenti come quello
fornito da un MTA sembra estremistico, piuttosto che un requisito
semplice ed essenziale, è segno che i propri standard stanno andando
pericolosamente in picchiata.
Non ho la presunzione di farti cambiare opinione.  Spero di averti
suggerito dov'è l'altro lato della medaglia, poi a te decidere se
tenerne conto o no.

 richieste di un certo tipo) anche per gli altri server?
chi l'ha detto che non la puoi avere .... puoi configurare il server dhcp
per inviare il parametro smtp server,puoi impostare il client dhcp per
riceverlo,puoi far eseguire degli script al cambiamento dei parametri
(vedi post precedente) se poi tu non vuoi una variabile d'ambiente per
contenere l'ip del server smtp nessuno ti vieta di dare un "echo
xxx.xxx.xxx.xxx > /etc/mio_smtp_remoto.conf" in dhclient-exit-hooks e
ricavare il dato dai file di configurazione con un (prendo exim ad
esempio)
 route_list = $(cat /etc/mio_smtp_remoto.conf) (e opzioni)
(che poi exim c'avrebbe pure l'opzione route_file ....) ma il punto vero e
proprio e' la scarsa utilita' ....


 riceverlo,puoi far eseguire degli script al cambiamento dei parametri
Hai ragione, avevo sottovalutato la cosa, grazie :-)


 nella LAN ci sono n macchine UNIX/Linux.
Ok, solo che devi comunque avere  n MTA. A quel punto lascio impostato
in  ogniuno  il relayhost  che  punti  allo  stesso mailserver,  senza
bisogno di MX, ma penso che  sia molto simile al tuo discorso.  
Grazie comunque per le risposte.


 E esci da una specifica importante che e` quella posix.
Ok,  a dire la  verita' non  mi hai/avete  convinto sul  -perche'- sia
giusto  avere un MTA  per ogni  macchina, ma  mi hai/avete  convinto a
farlo comunque senza chiedermi perche' :-)


 farlo comunque senza chiedermi perche' :-)
E` lo stesso motivo per cui ti incazzi quando internet explorer (per
dire) non rispetta correttamente le definizioni deigli standard w3c.
posix e` uno degli standard che ha permesso a Linus di fare il suo
kernel, sempre per dire.
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
Jesus died for your sins. Make it worth his time.

 kernel, sempre per dire.
Come al  solito sei  riuscito ad aprirmi  gli occhi (maledetta  la mia
cocciutaggine  :-)), con questa  frase mi  hai fatto  riconsiderare il
tutto (non  che ora comunque reputi la  mia idea di base,  che non era
legata ad  un server  piuttosto che ad  un altro, totalmente  priva di
senso, eh ;-P).
Grazie :)


 cocciutaggine  :-)),
Sono un tipo caparbio, specie con chi ne vale la pena ;)
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
Debian - even Hell freezes faster.