Basándonos en el supuesto que la fecha la guardas como tipo 'DATE' en la DB, te presento una posible solución. Código PHP:
<?
$f1=$row['fecha_caduca'];
# $row['fecha_caduca'] = valor obtenido del registro en DB
$fechaDesarmada=split('-',$f1);
$fechaDesarmada[2]-=15;
$f2 = date("Y-m-d", mktime(0, 0, 0, $fechaDesarmada[1], $fechaDesarmada[2], $fechaDesarmada[0]));
echo "<br>Fecha en que caduca: ".$f1;
echo "<br>fecha de aviso: ".$f2;
if(strcmp($f2, date('Y-m-d'))==0){
# ENVIAR CORREO
}
?>
Para implementarla puedes crear un cron, el cual se puede ejecutar todos los días a las 0:01 horas (por ejemplo).