Muita gente procura soluções rápidas e ágeis para o envio de emails de aniversariantes automaticamente por email.
A solução que eu vou apresentar aqui, é uma das mais fáceis, é ESTRUTURADA e funciona (BEM e sem erros) tanto no meu site quanto nos sistemas de clientes.
A primeira coisa, criar uma base de dados qualquer (ou usar a que você já tem) e a tabela. No meu caso vou usar uma base já existente, chamada flaviateste e uma tabela chamada aniversariantes.
A estrutura da tabela aniversariantes:
CREATE TABLE `aniversariantes` (
`id` int(11) NOT NULL auto_increment,
`nome` varchar(255) NOT NULL default '',
`email` varchar(255) NOT NULL default '',
`dataniver` date NOT NULL default '0000-00-00',
KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=36 DEFAULT CHARSET=latin1
Insira alguns registros nesta tabela, para que possamos trabalhar com os mesmos.
Agora vamos criar um script PHP que fará a tarefa de selecionar o aniversariante pela data de aniversário e enviar o email.
<?
// dados comuns de conexão
$host = "localhost";
$usuario = "meuusuario";
$senha = "senha";
$base = "flaviateste";
$tabela = "aniversariantes";
Pegamos então q data atual do sistema e quebramos o dia e mes separando-os através do explode na variável $date.
$date = date("Y-m-d");
list($anoatual, $mesatual, $diaatual) = explode("-", $date);
// efetuando a conexão
$con = mysql_connect($host, $usuario, $senha);
mysql_select_db($base);
Selecionamos todos os usuários do banco que atendam o critério de busca
$aniversario = mysql_query("SELECT * FROM $tabela WHERE dataniver > $date")
or die("Não conectou: " . mysql_error());
Efetuamos um loop com as seguintes condições: se o mês atual for igual ao mês atual do aniversário do usuário (gravado no campo dataniver da tabela) e se o dia atual for igual ao dia do aniversário do usuário (gravado no mesmo campo) envia o email de aniversário.
while ($row = mysql_fetch_array($aniversario)) {
list($ano, $mes, $dia) = explode("-", $row[3]);
if ($mesatual == $mes) {
if ($diaatual == $dia) {
mail ($row['email'],"Feliz aniversário","Parabéns pelo seu dia!");
}
}
}
?>
Então temos um script básico que faz o que tem que fazer. Mas e rodá-lo todos os dias?
Aí é que entra o famoso CRON ou crontab para os mais íntimos (e familiarizados com ambientes IX). Nele podemos agendar uma tarefa para ser executada de tempos em tempos.
Tendo posse do terminal da máquina (ou utilize o Cpanel da sua hospedagem, seguindo as instruções) digite:
# crontab -e
E adicione as seguintes linhas no arquivo:
* * * * * php /var/www/homedosite/enviaemailaniversarios.php
O que significa a linha acima? Significa que todos os dias, de todos os meses e de todos os anos * * * * o crontab irá rodar o script php presente na pasta mencionada por você. Note que ali deve sempre ser informado o caminho abosluto do arquivo php.
Agora, para que o Cron saiba que o que você está executando é um arquivo PHP e deve ser interpretado como tal, adicione a seguinte linha ao seu arquivo enviaemailaniversarios.php antes de abrir qualquer tag PHP, ou seja, na primeiríssima linha:
#!/usr/local/bin/php -q
Isso vai informar ao Cron, que para rodar este arquivo agendado, deve ser utilizado o binário do PHP, ou seja, "o exe" do PHP, para que a aplicação seja interpretada corretamente.
É isso, como diria meu pai, não precisa prática nem tampouco habilidade, toda criança brinca e se diverte.
Abraços!