Cita: Solo se me ocurre con cronjobs, pero le veo muchos problemas e inconvenientes como por ejemplo tendria que ejecutarlo cada dia de lo contrario tendria un marge de error no quiero que pase de un año y dos dias tiene que ser al año justo,
Te estás ahogando en un vaso de agua...
Por supuesto que debe ser ejecutado todos los días. Lo que en todo caso debes tener es un modo de validar el tiempo pasado, tal que en la consulta te devuelva todos los que cumplen un año en ese día y enviar los e-mails sólo a esos.
No tiene mucho misterio, pero dependerá de tu modelo de datos si puedes obtener esa info. Como no has posteado
nada, no te podemos decir si con lo que tienes se puede o no.