Fetchmail - Procmail: due domande

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3806
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Fetchmail - Procmail: due domande

Messaggio da joe »

Ciao a tutti e buon 2016.

Ho ricevuto ultimamente delle mail con oggetto del messaggio errato per colpa del client utilizzato da chi ha inviato il messaggio.
In particolare le mail sono state inviate dalla webmail di libero credo.
Ad ogni modo ecco la situazione, il messaggio aveva un titolo del tipo:

Codice: Seleziona tutto

Subject: Re: Re: Re: Titolo del messaggio
Quello che vorrei fare è introdurre un filtro in procmail che mi corregga l'oggetto del messaggio in modo che diventi:

Codice: Seleziona tutto

Subject: Re: Titolo del messaggio
Così nel mio ~/.procmailrc ho aggiunto una regola di modifica dell'oggetto:

Codice: Seleziona tutto

# corregge prefissi di risposta errati
#

:0 fhw
* ^Subject:.*R:
| sed -e 's/R:/Re:/g'

:0 fhw
* ^Subject: Re: 
| sed -e 's/Re: .*Re: /Re: /'
La prima regola c'era già e serve per impostare il prefisso corretto "Re:" in luogo del prefisso difettoso "R:".
La seconda regola invece l'ho introdotta a seguito delle recenti email mal titolate. E dovrebbe funzionare, anche se non ho testato la cosa per bene, solo con un banale:

Codice: Seleziona tutto

$ echo 'Subject: Re: Re: Re: oggetto'|sed 's/Re: .*Re: /Re: /'
Subject: Re: oggetto
Ok, farò qualche altro test inviandomi delle mail con oggetto sballato in modo da vedere se vengono rielaborate come dovrebbe.
Al di la di questo però, adesso nella mia mailbox mi ritrovo quei messaggi con quei brutti titoli che mandano la corretta visualizzazione del threading a donnine.

La mia configurazione email è la seguente:
- scarico la posta con fetchmail via server POP (principalmente da account Gmail).
- i messaggi vengono passati a procmail che appunto dopo un'eventuale rielaborazione sono smistati in differenti caselle in base al destinatario (ho diversi indirizzi email) e alcuni anche in base al mittente (mailing lists e roba del genere).
- le caselle di posta locali sono configurate in formato "mbox" quindi alla fine sono dei banali file di testo contenenti tutti i messaggi relativi alla particolare casella in un unico file.
- Infine leggo e scrivo le mail con Mutt

Cosa vorrei fare:
Inizialmente avevo pensato di applicare il nuovo filtro configurato in procmail per correggere le mail dal titolo diffettoso.
Però procmail si attiva di suo solo allo scaricamento della posta via fetchmail....
Prima domanda allora.

1) Come potrei applicare il filtro procmail alle mailboxes locali al volo in modo da modificare i messaggi già scaricati e correggerne l'oggetto?


Siccome non sapevo come rispondere alla domanda sopra ho tentato un "workaround".
Ho cancellato il messaggio incriminato così mi sono detto: dopo vado su gmail lo segno come da leggere e lo riscarico con fetchmail facendolo passare anche nel nuovo filtro di procmail.
Evidentemente non funziona così perchè fetchmail "si ricorda" di aver già scaricato quel messaggio e non lo riscarica.
Allora provo a chiedervi la seconda domanda:

2) Come forzare fetchmail a riscaricare un particolare messaggio già scaricato in precedenza?
In altre parole come fa fetchmail a ricordarsi delle vecchie mail già scaricate?
Mi pare si basi su un Message-ID dell'ultimo messaggio scaricato, ma non ricordo bene dove pescare questo message id, non ricordo ne su quale header del messaggio si basa nè in quale file locale di fetchmail venga salvato.
Il funzionamento, ma posso sbagliare (come dico non mi ricordo più bene) dovrebbe essere: fetchmail scarica le mail e salva il messageid dell'ultimo messaggio (quello più recente). Al successivo scaricamento delle mail controlla solo se vi sono nuovi messaggi più recenti di quello col message id che aveva salvato al precedente collegamento al server POP...

Quindi se io sapessi dove fetchmail salva il messageid dell'ultimo messaggio scaricato e se sapessi quale header dei messaggi viene considerato per estrarre quel message id potrei forzare fetchmail a riscaricare solo gli ultimi N mesaggi...

Se conoscete il funzionamento di fetchmail probabilmente mi saprete aiutare. Ho chiesto qui perchè in rete non trovo esattamente quello che sto cercando.

Grazie in anticipo a tutti! :)

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Fetchmail - Procmail: due domande

Messaggio da conraid »

Perché tutto questo casino quando puoi editare direttamente il file mbox? :-)

Comunque se vuoi rimandarti le mail corrette
formail -ns procmail < mbox

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3806
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Fetchmail - Procmail: due domande

Messaggio da joe »

Ciao e grazie,
ma l'idea era cancellare il messaggio mal titolato e riscaricare solo quello, o al limite quello e tutti i messaggi successivi.
Però effettivamente la cosa è incasinata ala grande.
La tua soluzione dovrebbe reinviarmi tutte le mail relative alla "mbox" contenente i messaggi mal titolati e teoricamente dovrebbe anche correggerli visto che ho modificato il filtro in procmailrc.
Ora provo....

La domanda su fetchmail e il riconoscimento dei nuovi messaggi era abbastanza fine a se stessa alla fine. Mi interessava capire come funziona...
Il problema dei nuovi messaggi è anche relativo all'account GMail, nel senso che dalle impostazioni POP di Gmail si può impostare:

Codice: Seleziona tutto

Scarica tramite POP:
Ulteriori informazioni	
1. Stato: POP è attivato per tutti i messaggi
	Attiva POP per tutti i messaggi (anche i messaggi già scaricati)
	Attiva POP solo per i messaggi che arrivano a partire da adesso
	Disattiva POP
In questo modo tutti i miei messaggi sull'account gmail dovrebbero essere visibili e trattati come "nuovi" da un client mai usato.
Nonostante ciò ho provato a collegarmi via openssl al mio account e lanciare un comando POP tipo STAT (anzi l'ho fatto con uno scriptino..):

Codice: Seleziona tutto

#!/bin/sh

{
sleep 5
echo "user mioaccount@gmail.com"
sleep 5
echo "pass mIaPassW0rd"
sleep 2
echo stat
sleep 2
echo top 540 10
echo quit
sleep 2
} | openssl s_client -connect pop.gmail.com:995
Ecco cosa risponde GMail:

Codice: Seleziona tutto

+OK send PASS
+OK Welcome.
+OK 540 79223227
In pratica al comando STAT risponde che ci sono 540 messaggi.
Provando però a visualizzare il messaggio numero 540 col comando TOP, ecco che risulta essere una mail del 2013, cioè di due anni fà.
In pratica ci sono altri messaggi più recenti che non appaiono al comando STAT...
Perchè secondo voi?
Forse in GMail bisogna configurare qualcosa di diverso? Dove e cosa eventualmente?

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3806
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Fetchmail - Procmail: due domande

Messaggio da joe »

Ho capito il problema.
Se tentiamo di sbloccare le impostazioni di GMail in modo da attivare l'accesso PO3 selezionando "Attiva POP per tutti i messaggi (anche i messaggi già scaricati)" praticamente collegandoci con un client qualsiasi (incluso openssl...) vedremo i messaggi dal più vecchio al più recente (il messaggio numero 1 sarà il più vecchio che abbiamo in mailbox).
Ora la domanda era: perchè mai il server PO di GMail risponde che ci sono solo 540 messaggi quando invece ne ho molti e molti di più?
La risposta sta nelle limitazioni di GMail che non consente di scaricare tutti i messaggi in una botta sola e così ne fà apparire solo un tot alla volta. Quanto sia di preciso questo "tot" non lo so, ma indicativamente dai 250 ai 700 messaggi... no so forse il limite è in base al peso dei messaggi scaricati nella singola sessione POP.

Quindi per riscaricare tutti i messaggi nella casella di posta, ad esempio con fetchmail, bisogna lanciare fetchmail ripetutamente: nella prima sessione vengono scaricati i "500 circa" messaggi più vecchi, nella seconda sessione i "500 circa" successivi e così via fino all'ultima sessione POP che finisce con lo scaricamento dell'ultimo messaggio che abbiamo ricevuto nella casella remota.
In questo modo si riesce a ricreare una casella di posta locale, in cui nel mio caso si trovano tutti i messaggi della casella remota (proprio tutti) filtrati con le regole di procmail configurate.

Ok, è però decisamente scomodo scaricare tutti i messaggi... i più vecchi che avevo io sono del 2009 e non mi interessa averli in locale... Possono starsene benissimo in remoto su GMail.
Sarebbe ottimo invece avere la possibilità di configurare GMail in modo che blocchi l'accesso via POP ai soli messaggi più recenti di una certa data impostata.
Ad esempio nel mio caso mi basterebbe avere in locale l'ultimo mese di o gli ultimi due mesi di corrispondenza elettronica....

Al momento però nelle impostazioni di GMail non ho trovato la possibilità di limitare l'accesso POP alle sole mail più recenti di una certa data.
C'è un workaround utilizzabile, anche se a me non piace tanto (preferivo impostare la data del messaggio più vecchio dalle impostazioni di gmail): invece bisogna immettere un nome utente modificato del tipo "recent:mioindirizzo@gmail.com".
Ed ecco che in tal modo vengono scaricati solamente i messaggi degli ultimi 30 giorni.
Può già andar bene.
Se però a qualcuno servissero in locale quelli degli ultimi 3 mesi?
Si dovrà scaricare 5 anni di messaggi, oppure c'è qualche altro modo per indurre GMail a considerare come messaggi più vecchi quelli arrivati non prima di 3 mesi fà?
Forse archiviando i messaggi più vecchi e lasciando nella directory "inbox" e "sent" solo i messaggi di nostro interesse (quelli da scaricare via POP3)?

Se qualcuno sa dare risposte dica pure...
Appena riesco faccio un riepilogo delle mie domande qui poste e delle soluzioni trovate, consigliate e testate. :)

Rispondi