Função Mail do PHP
Hoje recordei-me que ao usar a função mail do php, na sua forma normal sempre me deu algumas dores de cabeça, e não é porque ela não funcione bem, tem a ver com o facto de poderem ocorrer alguns problemas inesperados e que na maioria das situações, nós como utilizadores normais podemos não nos dar conta.
Os problemas de que falo são, em primeiro lugar o email ir para ao correio não solicitado ou ao spam de alguns servidores de email globais, tal como o gmail, yahoo ou hotmail. No meu caso testei esta função para estes 3 de forma a garantir que passavam sem problemas nos filtros, e sendo que estes são sem dúvida os maiores, e os mais “complicados” em relação ao SPAM, podemos quase garantir que um email, ou sistema de newsletter que passe correctamente os filtros destes 3 sistemas, garantidamente passara em qualquer outro.
Então cá vai.
O uso normal da função tal como podem ver no www.php.net poderia ser o seguinte:
<?php $Name = "O Nome"; //nome de quem envia $email = "email@dominio.com"; //O email de envio $recipient = "PessoaQueRecebe@endereco.com"; //O email de quem recebe $mail_body = "Aqui vai o texto do email..."; //corpo do email $subject = "Assunto para rever"; //Assunto $header = "From: ". $Name . " <" . $email . ">"; //Campos Opcionais mail($recipient, $subject, $mail_body, $header); //Comando de envio ?>
Aqui começa o problema
Uma das coisas importantes a adicionar nos cabeçalhos (header) da mensagem é o Reply to, esta é uma das regras de controlo de SPAM da maioria dos servidores, logo deve ser devidamente colocado.
Então no código mencionado adicionaria a seguinte linha:
$header = "From: ". $Name . " <" . $email . ">"; //Campos Opcionais - Esta já cá estava $header .= "Reply-To: O Seu Nome <email@dominio.com>"; //O nome e email que esta a usar para o envio
Outra linha Importante a adicionar é o tipo de Conteúdo/ formato do email e então teriamos mais a seguinte linha (por exemplo):
$header .= "Content-type: text/html";
Podemos ainda adicionar mais ao Header que é o tipo de caracteres, etc, mas isso não me vou alongar aqui, quero referir apenas os pontos básicosque dizem respeito aos filtros de SPAM.
Por fim, uma situação que é de extrema importancia, para que tudo fique certinho, tem a ver com uma situação que, a não ser que você faça a gestão de um servidor proprio, será dificil de notar. E isto tem a ver com os emails devolvidos. Por alguma razão, os emails tipicos que se recebe a notificar que um determinado utilizador não existe, ou que tem a caixa de correio cheia, etc, deveriam ser devolvidos ao email que estamos a definir em Reply-to, mas como referi, mas isso não acontece, e o que tambem pode influenciar no SPAM, porque o email, mesmo colocado com todos os parametros certinhos vai nos headear com as definições da conta por defeito do servidor, geralmente um nobody@servidor.com e, claro está que os emails de erro serão devolvidos a este endereço e não ao endereço que definimos acima.
Para resolver esta situação o que devemos fazer é acrescentar um pequeno codigo à linha (comando mail) de envio do email:
mail($recipient, $subject, $mail_body, $header, "-f email@dominio.com"); //Comando de envio correcto
Ou, seja acrescenta-mos um 5º parametro a seguir ao $header, com ”-f email@dominio.com”, este será o email no qual serão entregues as mensagens de erro, mais uma vez na minha opinião deverá ser o mesmo definido, anteriormente como quem envia.
Posto isto junto tudo e aqui fica o exemplo completo:
<?php $Name = "O Nome"; //nome de quem envia $email = "email@dominio.com"; //O email de envio $recipient = "PessoaQueRecebe@endereco.com"; //O email de quem recebe $mail_body = "Aqui vai o texto do email..."; //corpo do email $subject = "Assunto para rever"; //Assunto $header = "From: ". $Name . " <" . $email . ">"; //Campos Opcionais $header .= "Reply-To: O Seu Nome <email@dominio.com>"; //O nome e email que esta a usar para o envio $header .= "Content-type: text/html"; mail($recipient, $subject, $mail_body, $header, "-f email@dominio.com"); //Comando de envio ?>
Envie um comentário