Um esboço muito grosseiro, supondo que você já tenha uma tabela de banco de dados.
Todos os dias, execute um script que calcula todayminusonemonth (resolvido na resposta da Stratton) e executa um
select * from databasetable where expirydate = todayminusonemonth
. Itere sobre o conjunto de resultados, componha uma mensagem com as informações específicas do alvo e envie-a usando a interface de correio do php. É de longe a solução mais fácil para garantir que o script seja executado todos os dias, se isso não for uma opção, uma coluna deve ser adicionada ao banco de dados para indicar que o email foi enviado. Ou pode ser criada uma tabela extra listando todos os dias para os quais os e-mails foram enviados...
Ver? Esta primeira decomposição do problema foi bastante fácil. Agora você pode começar a resolver cada um desses problemas parciais ou procurar informações/como fazer para cada um. Sinta-se à vontade para criar uma nova pergunta com necessidades mais específicas que você possa ter.
Um problema que você pode encontrar é que seu host não permite que scripts cron sejam executados. Uma solução alternativa muito criativa usando um serviço de monitoramento de sites é explicada em Não tenho cron jobs no meu servidor. Qual é uma alternativa para enviar e-mails sem entrada do usuário?