PREMESSA
Recentemente mi è stato chiesto di trovare un sistema per eliminare gli oggetti di tipo "link" (comunemente chiamati shortcut)  che un noto software di archiviazione per Exchange sostituisce alle mail archiviate nelle mailbox degli utenti. Quando si implementano questi sistemi di archiviazione, molto spesso si decide di "tirare dentro" anche i vecchi PST degli utenti, con il risultato che il numero di oggetti in una mailbox cresce enormemente dato che il software di mail archiving deve creare un link per ogni mail archiviata e presente nel PST.

IL PROBLEMA
In Exchange, un oggetto di tipo mail (ovvero di classe IPM.Note) ha almeno 3 date:
  • PR_CLIENT_SUBMIT_TIME
  • PR_MESSAGE_DELIVERY_TIME
  • PR_LAST_MODIFICATION_TIME

 

ovvero, il messaggio contiene la data di invio, quella di consegna (di solito di poco diversa da quella di invio) e quella di ultima modifica. I link del software di archiviazione (appartenenti ad una sottoclasse di IPM.Note) presentavano come proprietà di invio e ricezione quelle del messaggio originale, mentre ovviamente la data di ultima modifica era quella della creazione dello shortcut (ovvero quando il messaggio è stato archiviato).

La richiesta ovviamente è che il sistema di pulizia eliminasse gli shortcut relativi a mail più vecchie di un certo tempo e quindi doveva esaminare il PC_CLIENT_SUBMIT_TIME oppure il PR_MESSAGE_DELIVERY_TIME e non il PR_LAST_MODIFICATION_TIME che era ovviamente recentissimo.

Memore del Mailbox Manager di Exchange 5.5 ero sufficientemente sicuro che il sistema avrebbe preso le date "giuste" ignorando quella dell'ultima modifica: potete immaginare la mia sorpresa quando ho verificato che la cosa non sembrava funzionare a dovere, ovvero Exchange, nel calcolo dell'età di un messaggio, usava anche il PR_LAST_MODIFICATION_TIME

SOLUZIONE
Indagando sugli opportuni siti si scopre il fantastico articolo
Q302804 che illustra il meccanismo usato da Exchange 2000 e 2003 per il calcolo dell'età del messaggio: in pratica, il Mailbox Manager  di 2000/2003 elabora un oggetto se tutte e 3 le date sono maggiori del valore "age" specificato nella policy. Questo purtroppo faceva a cazzotti con la richiesta originale, dato che tutti gli shortcut erano recentissimi anche se facevano riferimento a mail di anni precedenti.

Per risolvere il problema è sufficiente dire al mailbox manager di ignorare la data di ultima modifica: se si prosegue nella lettura dell'articolo citato precedentemente si scopre che è possibile cambiare questo comportamento modificando una proprietà della policy in Active Directory (sempre facili le cose , vero?). La proprietà in oggetto si chiama msExchMailboxManagerAgeLimit  especifica come la policy calcolerà l'eta di un messaggio:
 
  • Se la proprietà non è impostata, tutte e  3 le date vengono usate (valore predefinito)
  • Se è impostata a 1 si usano per il calcolo la PR_CLIENT_SUBMIT_TIME e PR_MESSAGE_DELIVERY_TIME
  • Se è impostata a 2 si usano per il calcolo la  PR_MESSAGE_DELIVERY_TIME e PR_LAST_MODIFICATION_TIME
  • Se è impostata a 3 si usa per il calcolo solo la PR_MESSAGE_DELIVERY_TIME (come in Exchange 5.5 - anche qui comunque le cose non erano proprio così lineari - vedi Q289122)

 

Per impostare questo attributo è necessario usare ADSIEDIT, aprire la Configuration Partition, e quindi scendere in Services, poi Microsoft Exchange, poi "Nome Organizzazione", quindi Recipients che contiene appunto l'elenco delle policies: andando a guardare le proprietà della policy, si trova il valore di nostro interesse.

Una nota finale: prima che una mailbox possa essere valutata dal processo mailbox manager, il RUS deve aver girato e "appiccicato" alla mailbox (ovvero all'oggetto utente in AD) il GUID della mailbox manager policy nel campo chiamato msExchPoliciesIncluded.

COMMENTO
Tutto sommato poteva andare peggio! Una volta che documentate bene la cosa (magari sfruttando il campo note della policy stessa) le cose funzionano come previsto.