Auto delete voicemails over X days old

Is there anyway of doing this?


I came upon this code some time ago.

Run it at intervals (I run mine weekly) with cron


Script to expire voicemail after a specified number of days

by Steve Creel [email protected]

Directory housing the voicemail spool for asterisk

$dir = “/var/spool/asterisk/voicemail”;

Context for which the script should be running

$context = “default”;

Age (Delete files older than $age days old)

$age = 31;

Age for unheard messages (Defaults to same age for all messages)

Set to 0 to not delete unheard messages

$unheardage = $age;

Delete all files older than $age and $unheardage

(named msg???.??? to get the audio and txt files,

but we don’t delete greetings or the user’s name)

if($age==$unheardage) {

Save time by doing one find if we’re treating everything the same

system(‘find ‘.$dir.’/’.$context.’ -name msg???.??? -mtime +’.$age.’ -exec rm {} ; -exec echo Deleted {} ;’);

} else {

Find everything not in a folder called ‘INBOX’ and delete it after $age days

system(‘find ‘.$dir.’/’.$context.’ -path ‘INBOX’ -prune -o -name msg???.??? -mtime +’.$age.’ -exec rm {} ; -exec echo Deleted {} ;’);

If unheardage is set to 0, we won’t delete any unheard messages

if($unheardage > 0) {

# Delete things that are in a folder called INBOX after $unheardage days
system('find '.$dir.'/'.$context.' -path \'*INBOX*\' -name msg????.??? -mtime +'.$unheardage.' -exec rm {} \; -exec echo Deleted {} \;');


For testing - what number to we start when we renumber?

$start = “0”;

Rename to msg and a 4 digit number, 0 padded.

$fnbase = sprintf “msg%04d”, $start;

Make $dir include the context too