Eliminare il veccho spam …con uno script

3 08 2009

Premesse

Nelle ultime sperimentazioni fatte su sendmail-dovecot-spamassassin mi sono trovato con cartelle spam stracolme di schifezze ed un dubbio atroce nella testa: “ma adesso tutta sta monnezza come la levo di mezzo?”

o meglio: “e se voglio levarla di mezzo ogni N giorni?”.

Visto che procmail mi sembrava un tantino complicato ho pensato di farci uno scrippettino da mettere in cron

…e visto ke mi piace sperimentare cosa potevo mai scegliere?

Python e le sue librerie

Python risulta sicuramente un linguaggio di scripting versatile e potente e se vi viene in mente di fare qualcosa troverete sicuramente la libreria che fa al caso vostro. Nel mio si tratta di imaplib, un modulo che definisce tre classi, IMAP4, IMAP4_SSL e IMAP4_stream, che incapsulano una connessione ad un server IMAP4.

Mettendoci vicino un paio di righe sul confronto delle date, il gioco è fatto.

Lo script è abbastanza commentato e permette di eliminare i messaggi di posta di un dato utente, ovviamente quando ho un pò di tempo cerco di generalizzarlo per tutti gli utenti del sistema…

#!/usr/bin/python
# Filename: delmail.py

import time
import datetime
import imaplib

# Variabili da impostare
server = '127.0.0.1'
# Numero di giorni di cui tornare indietro
# N = -1 Elimina tutto
N = 2
# Lista con tutti gli utenti del sistema
userList = ['user1 pass1', 'user2 pass2', 'user3 pass3']
# Cartella di spam
dir = 'spam'

# Determina la data fino a cui eliminare le mail
# (es con N=2 elimina tutte le mail piu' vecchie di 2 giorni)
oldDate = datetime.date.today() + datetime.timedelta(days=-N)
oldDate = oldDate.strftime("%d-%b-%Y")
print "Elimino le mail precedenti al ", oldDate

# Analizza le e-mail degli utenti
for user in userList:
  (userName, userPassword) = user.split(' ')
  print "User:", userName, userPassword
  m = imaplib.IMAP4(server)
  m.login(userName, userPassword)
  print m.select(dir)
  try:
    typ, data = m.select(dir)
    # Preleva solo le mail precedenti alla data oldDate
    typ, data = m.search(None, 'BEFORE', oldDate)
    print data[0]
    for num in data[0].split():
      print 'Numero:',num
      typ, data = m.fetch(num, '(FLAGS BODY[HEADER.FIELDS (DATE)])')
      # Modifica il flag in Deleted
      ok, error = m.store(num, 'FLAGS', '(\Deleted)')
      print 'cancellata'

    # Elimina definitivamente le mail flaggate con 'Deleted'
    ok, error = m.expunge()
  finally:
    try:
      m.close()
    except:
      pass
    m.logout()

Mi raccomando fate attenzione all’indentazione, python infatti non utilizzando parentesi necessita di un indentazione precisa.

In seguito riporto alcune opzioni per filtrare opportunamente le mail. Giocando con questi parametri di IMAP è possibile ottenere un risultato più preciso per un eventuale ricerca, che ad esempio si può basare sul mittente, su un certo testo contenuto nella mail, sulle dimensioni della stessa, ecc…

ad esempio usando

typ, data = m.search(None, 'FROM', 'pippo')

si possono filtrare tutte le mail che hanno nel mittente la parola pippo

ALL: tutti i messaggi
ANSWERED: messaggi con il flag settato ad ‘\Answered’
BEFORE: messaggi la cui data risulta precedente ad una specifica data
DELETED: messaggi con il flag settato ad ‘\Deleted’
TEXT: messaggi che contengono uno specifico testo
SUBJECT: messaggi che contengono uno specifico oggetto
TO: messaggi che contengono uno specifico destinatario
FROM: messaggi che hanno come campo FROM una determinata stringa
LARGER: messaggi di dimensioni superiori ad un certo valore in byte
SMALLER: messaggi di dimensioni inferiori rispetto ad un valore dato (in byte)
NEW: messaggi che sono stati inseriti di recente e non ancora letti
NOT: messaggi che non matchano una specifica chiave di ricerca
SEEN: messaggi già letti (con il flag \Seen settato)
SENTBEFORE: messaggi inviati prima di una certa data
SENTSINCE: messaggi inviati dopo una certa data
SINCE: messaggi la cui data è superiore rispetto ad una data specificata
BEFORE: messaggi la cui data è inferiore rispetto ad una data specificata

una più completa descrizione la trovare qui

Annunci

Azioni

Information

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...




%d blogger hanno fatto clic su Mi Piace per questo: