Questo è il comando gurgitate-mail che può essere eseguito nel provider di hosting gratuito OnWorks utilizzando una delle nostre molteplici workstation online gratuite come Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS
PROGRAMMA:
NOME
gurgitate-mail - un filtro di posta facile da usare
SINOSSI
gurgitare la posta
DESCRIZIONE
"gurgitate-mail" è un programma che legge la tua posta e la filtra in base al
.gurgitate-regole.rb file nella tua directory home. Il file di configurazione usa la sintassi Ruby
ed è quindi abbastanza flessibile.
Viene generalmente invocato tramite il tuo .inoltrare file:
"|/percorso/di/gurgitate-mail"
O attraverso il tuo .procmailrc file:
: 0:
| /percorso/per/gurgitate-mail
In alternativa, se sei l'amministratore di sistema del tuo sito o se il tuo amministratore di sistema è amichevole, puoi
usa gurgitate-mail come agente di consegna locale. Per suffisso, metti
comando_casella=/opt/bin/gurgitate-mail
in /etc/postfix/main.cf. Se usi un altro MTA e configuri gurgitate-mail come a
agente di consegna locale, per favore dimmi come! Voglio includerlo nella documentazione.
CONFIGURAZIONE FILE
Ci sono tre file di configurazione usati da gurgitate-mail: due sono a livello di sistema e il
terzo, è il file delle regole utente.
I due file di configurazione a livello di sistema sono /etc/gurgitate-regole ed
/etc/gurgitate-rules-default. Questi vengono elaborati prima e dopo le regole dell'utente,
rispettivamente.
/etc/gurgitate-regole viene utilizzato per gestire le esigenze di filtraggio a livello di sistema: impostazione predefinita
stile della casella di posta su Maildir anziché sull'MBox predefinito, impostazione della directory di spool, cose
come quello.
Il file di configurazione dell'utente è $HOME/.gurgitate-regole (o, in alternativa,
$HOME/.gurgitate-regole.rb. O lavoro). Hai messo le tue regole qui. Se l'utente
il file di configurazione non incontra un "ritorno" durante l'elaborazione, quindi il file aggiuntivo
regole contenute in /etc/gurgitate-rules-default sono eseguiti. Se anche questo non torna,
quindi i messaggi di posta vengono salvati nella posizione di spool di posta predefinita.
Se viene utilizzata l'opzione "-f" sulla riga di comando, verrà utilizzato il file specificato e
le regole predefinite non lo faranno. L'opzione "-f" può essere utilizzata più di una volta:
gurgitate-mail -f test-regole -f regole-addizionali
CONFIGURAZIONE PARAMETRI
Ci sono diversi parametri che puoi impostare per cambiare il modo in cui gurgitate-mail
si comporta. Imposti un parametro di configurazione dicendo, ad esempio:
inviare una mail "/usr/sbin/sendmail"
che imposta il parametro "sendmail" su "/usr/sbin/sendmail".
è posta
La directory in cui vuoi mettere le cartelle di posta. Il valore predefinito è $HOME/Mail.
file di log
Dove sei andato gurgitate-mail di log dei messaggi a cui andare. La posizione standard per
questo è $HOME/.gurgitate.log
sendmail
Il percorso completo del programma sendmail, utilizzato per recapitare la posta. Questo può essere qualsiasi programma
che prende come parametri la lista degli indirizzi a cui recapitare la posta, e che prende
un messaggio di posta sullo standard input.
direttore di casa
Il percorso completo della tua directory home. Questo valore predefinito è qualunque sia la tua casa reale
la directory è.
spoolir
Il percorso a cui vanno gli spool di posta del sistema. Questo valore predefinito è "/var/spool/posta".
Su un sistema Maildir, questo dovrebbe essere impostato allo stesso modo di "homedir".
file di spool
Il componente del file di spool di posta del percorso completo dello spool di posta. Questo è generalmente
il tuo nome utente. Gli utenti di Maildir dovrebbero impostarlo su "Maildir".
stile cartella
Lo stile delle cartelle che preferisci. Questo può essere (al momento) MBox o Maildir.
FILTRO REGOLE
Le regole di filtro sono una serie di istruzioni Ruby, con i seguenti metodi e variabili
disponibile:
Variabili
from Contiene la busta "da" indirizzo del messaggio di posta elettronica. (Nota che questo
non è necessariamente uguale al contenuto dell'intestazione "Da:")
intestazioni
Questo è un oggetto che contiene le intestazioni del messaggio. Ci sono diversi metodi
che vengono con questo oggetto:
body Contiene il corpo del messaggio di posta elettronica. Per ora, non c'è davvero niente
interessante che puoi fare con questo, a parte assegnarlo; puoi riscrivere
il corpo di un messaggio di posta elettronica in questo modo. La gestione degli allegati è prevista per a
versione futura di "gurgitate-mail".
è posta
La directory che contiene le cartelle, utilizzata dal metodo "salva" quando si specifica
una cartella come "=cartella" (come Elm). Il valore predefinito è "$HOME/Mail".
direttore di casa
La tua directory principale. Sola lettura.
file di log
La posizione del file di registro "gurgitate-mail". Se impostato su "nil", non viene eseguita alcuna registrazione
fatto. Il valore predefinito è "$HOME/.gurgitate.log".
sendmail
La posizione del programma "sendmail". Utilizzato dal metodo "forward". Il valore predefinito è
"/usr/lib/sendmail".
file di spool
La posizione dello spool di posta. Sola lettura.
Metodi
corrisponde (nome/i), regex)
Restituisce "true" se l'intestazione "name" corrisponde all'espressione regolare "regex". Se
"nome" è un array di nomi di intestazione, quindi restituisce true se almeno uno dei
corrispondenze di intestazioni. Utile per verificare se le intestazioni "To:" e "Cc:" corrispondono.
from Restituisce l'indirizzo della busta "da" del messaggio di posta elettronica. Nota che questo è lo stesso
come il nudo "da".
to Restituisce un HeaderBag (una specie di array) con il contenuto di "To" e "Cc"
intestazioni.
to_s Come per convenzione Ruby, restituisce tutte le intestazioni come oggetto "Stringa".
salvare(cassetta postale)
Questo salva il messaggio in una cassetta postale. Puoi specificare la casella di posta come una parola con =
firma davanti ad esso, nel qual caso lo mette in "maildir". Se non usi il
=Nome format, allora è necessario specificare un percorso assoluto. Se non può scrivere il
messaggio al file a cui lo richiedi, tenterà di scriverlo in "spoolfile".
inoltrare (indirizzo)
Questo inoltra il messaggio di posta elettronica a un altro indirizzo di posta elettronica.
tubo (programma)
Questo convoglia il messaggio tramite "programma". "pipe" restituisce il codice di uscita del
programma attraverso il quale è stato reindirizzato il messaggio.
filtro (programma)
Questo reindirizza il messaggio attraverso "programma" e restituisce un nuovo oggetto Gurgitate
contenente la posta filtrata. (Questo è utile per i filtri esterni che modificano la posta elettronica
come, ad esempio, SpamAssassin, che aggiunge un'intestazione di punteggio spam.)
Puoi anche dire
filtro(programma) do
# codice qui
fine
e fornisce al blocco l'oggetto Gurgitate appena creato.
intestazioni
Questo restituisce le intestazioni come un oggetto a sé stante. Questo oggetto ha i suoi metodi:
header[*headernames]
Questo restituisce un HeaderBag (una sottoclasse di array) contenente le intestazioni che hai chiesto
per. È quindi possibile utilizzare l'operatore =~ su questo risultato per abbinare l'espressione regolare RHS
con tutto nella HeaderBag.
Puoi modificare il valore di un'intestazione con "headers[name]=newvalue".
headers.match(nome,regex)
Abbina l'intestazione con il nome "nome" alla regex. Questo è lo stesso di
headers[nome] =~ /regex/.
headers.matches(nomi,regex)
Abbina le intestazioni con i nomi "nomi" contro l'espressione regolare. Questo è lo stesso
as headers[*nomi] =~ /regex/.
intestazioni.da
Restituisce la busta da. Puoi cambiarlo con "headers.from=newaddress"
troppo.
ritorno
Questo dice a "gurgitate-mail" di interrompere l'elaborazione del messaggio di posta elettronica. Se non usi
"return", quindi "gurgitate-mail" continuerà a elaborare di nuovo la stessa posta con il
prossima regola. Se non c'è un "ritorno" alla fine del gurgitate-regole.rb, poi
"gurgitate-mail" salverà il messaggio di posta elettronica nel normale spool di posta.
ceppo(Messaggio)
Questo scrive un messaggio di registro nel file di registro.
SEMPLICE ESEMPI
Ecco alcuni esempi di regole "gurgitate-mail", con spiegazioni:
if from =~ /ebay.com/ allora save("=ebay"); Restituzione; fine
Qualsiasi e-mail da eBay (notifiche automatiche di fine asta, ad esempio, e superamento dell'offerta
avvisi) viene archiviato nella cartella "ebay".
se da =~ / Root@/ quindi save("=root"); Restituzione; fine
Qualsiasi email da root (su qualsiasi host) viene archiviata in una cartella speciale. Utile per gli amministratori di sistema
monitoraggio della posta elettronica di crontab.
if headers.matches(["To","Cc"],"webmaster@") allora
salva ("= webmaster")
ritorno
fine
Qualsiasi e-mail con una riga A: o Cc: di "sysadmin" viene salvata in una cartella "sysadmin". Utile
per le persone con più account di ruolo reindirizzate al loro indirizzo.
if headers["Oggetto"] =~ /\[SPAM\]/ then
salva("=spam")
ritorno
fine
Questa è una sintassi diversa per la corrispondenza dei modelli con le intestazioni. Puoi anche abbinare
più intestazioni tra parentesi quadre.
if headers["Subject","Keywords"] =~ /una brutta parola/ then
save("=imprecare")
ritorno
fine
Cerca "una parolaccia" nelle intestazioni Oggetto e Parole chiave e, se è presente, salva
l'e-mail nella cartella "imprecazioni".
if headers.matches(["To","Cc"],"[email protected]") poi
pipe("|rcvstore +mailing-list")
ritorno
fine
Qualsiasi email a una mailing list viene convogliata tramite "rcvstore" per memorizzarla in una cartella MH.
Che
headers.matches(["A","Cc"],/regex/)
l'idioma accade abbastanza spesso che c'è una scorciatoia per questo:
se a =~ /[email protected]/ poi
pipe("|rcvstore +mailing-list")
ritorno
fine
Instrada la posta alla mailing list tramite "rcvstore".
AVANZATE ESEMPI
Ecco alcuni esempi leggermente più intelligenti per darti un'idea di cosa puoi fare con
"gurgitate-mail". Supponiamo che tu abbia una whitelist email in un file chiamato
$HOME/.amici, in modo da poter determinare se è probabile che alcune email siano spam o meno.
Quindi, se qualcuno nella tua whitelist ti invia un'email, la salvi automaticamente in
la cartella "posta in arrivo":
amici=homedir+"/.amici"
se FileTest.exists?(amici) e FileTest.readable?(amici) allora
File.new(amici).ognuno fa |amico|
se da =~ amico.chomp allora
log "Mail from friend"+friend.chomp
salva("=posta in arrivo")
ritorno
fine
fine
fine
Ok, se qualcuno ti invia un'e-mail, indirizzata specificamente a te (e gurgita-
mail non l'ha già catturato in un'altra forma), allora potrebbe o non potrebbe essere spam: mettilo
in una cartella "grigia":
miei_indirizzi= [ /me@esempio\.com/i,
/me@esempio\.org/i,
/me@esempio\.net/i]; # Ho tre indirizzi email
my_addresses.ogni do |addr|
if headers.matches(["To","Cc"],addr) allora
save("=possibilmente-non-spam")
ritorno
fine
fine
E dopo, se non proviene da qualcuno che conosci e non è indirizzato alla tua email
indirizzo, quindi è probabilmente salva presumere che sia spam:
salva("=spam")
ritorno
Tuttavia, questo può essere migliorato utilizzando un filtro bayesiano; per esempio, Eric Raymond's
programma bogofilter (http://bogofilter.sourceforge.net) può essere addestrato automaticamente e
utilizzato con l'aiuto delle distinzioni bianco/grigio/nero. Prendendo l'esempio sopra, io
regolalo aggiungendo le chiamate a bogofilter:
amici=homedir+"/.amici"
se FileTest.exists?(amici) e FileTest.readable?(amici) allora
File.new(amici).ognuno fa |amico|
se da =~ amico.chomp allora
log "Mail from friend"+friend.chomp
pipe("bogofilter -h") # <-- LINEA AGGIUNTA QUI
salva("=posta in arrivo")
ritorno
fine
fine
fine
"bogofilter -h" insegna a bogofilter che la posta proveniente da persone nella whitelist non deve essere
considerato spam. Ok, alla fine delle regole .gurgitate, cambia
salva("=spam")
ritorno
a
salva("=spam")
pipe("bogofilter -s")
ritorno
Questo addestra "bogofilter" che tutto ciò che non passa il resto del filtro dovrebbe essere
considerato spam. Ora per il bit interessante: cambia il bit tra questi da usare
"bogofilter" per decidere se l'email deve essere considerata spam o meno:
miei_indirizzi= [ /me@esempio\.com/i,
/me@esempio\.org/i,
/me@esempio\.net/i]; # Ho tre indirizzi email
my_addresses.ogni do |addr|
if headers.matches(["To","Cc"],addr) allora
if pipe("bogofilter")==1
poi
log("bogofilter sospetta che potrebbe non essere spam")
save("=possibilmente-non-spam")
altro
log("bogofilter pensa che sia probabilmente spam")
salva("=spam")
fine
ritorno
fine
fine
"bogofilter" ha un codice di uscita "1" se ritiene che il messaggio non sia spam e "0" se è
pensa che il messaggio sia spam.
Spero che questo ti dia un'idea del tipo di cose che puoi usare
"bogofiltro" per.
Usa gurgitate-mail online utilizzando i servizi onworks.net