Função para enviar email em PHP

Publicado em 13/04/2009

por Marcos Elias

A forma mais fácil de mandar emails em PHP é usar a função mail(), que geralmente fica ativa na maioria dos servidores. Ela envia o email usando algum comando como o sendmail ou outro programa, e o envio é feito de forma transparente. Com os recursos básicos do PHP você pode montar o email como quiser, abusando das concatenações de strings e resultados obtidos via POST.

É fácil fazer um script para enviar formulários e emails, sem precisar usar serviços gratuitos que mostram propagandas, deixando estas opções para quem não tem hospedagem paga mesmo.

Você pode fazer 3 páginas para o envio de emails (ou juntar tudo em uma se souber e não se atrapalhar). Para exemplificar, vamos fazer com três. Uma contém o formulário. A outra processa os dados do formulário, monta a mensagem e envia, e a terceira será uma página de resposta, falando que a mensagem foi enviada. São apenas exemplos funcionais, que deverão ser adaptados a cada caso, e deixarei a verificação se o email foi enviado ou não por sua conta.

A página form.php pode ser um formulário comum, mesmo que você já tenha em qualquer página - mesmo que em outra URL ou domínio. A envia.php fará o processamento e envio propriamente dito, e a ok.php exibirá uma mensagem ao usuário. Não vou me focar em mostrar as páginas inteiras, com todas as tags, vamos ao que interessa.

Página com o formulário:

<form name="contato" action="envia.php" method="post">
Nome: <input type="text" name="nome"><br>
E-mail: <input type="text" name="email"><br>
Mensagem: <textarea name="mensagem"></textarea><br>
<input type="submit" value="Enviar">
</form>

O formulário de exemplo tem apenas três campos, você pode adicionar mais se quiser. Veja que no action está indicada a página que receberá e processará os dados do formulário. Se o formulário estiver em outra URL ou até mesmo em outro site, será necessário colocar a URL completa da nova página. O método post envia os dados de forma transparente para o usuário final, caso contrário seria usado o get, onde os dados aparecem na URL. Num formulário isso é desagradável e pode quebrar mensagens longas.

Um elemento importantíssimo das tags dos campos do formulário é o name, que define o nome do item. Você precisará dele para recuperar o valor preenchido pelo usuário. Vamos criar a página que fará isso: envia.php. Crie um novo arquivo vazio, ela não mostrará nada diretamente ao usuário.

No conteúdo ficaria isso (observe os comentários):

<?php
// vamos criar uma variável para conter todo o texto da mensagem a ser enviada
$corpo = "Formulário enviado pelo site" . "\n";
// supondo que você tenha conhecimentos de PHP, o ponto junta as strings, e o \n é uma quebra de linha.
$corpo .= "Nome: " . $_POST["nome"] . "\n";
// na linha acima ajuntamos ao final da variável $corpo o nome digitado pelo usuário, obtido com a $_POST["nome"], e a seguir adicionamos mais uma quebra de linha
$corpo .= "E-mail: " . $_POST["email"] . "\n";
// a mesma coisa, só que adicionamos o email.
$corpo .= "Mensagem: " . $_POST["mensagem"] . "\n";
// na linha acima adicionamos a mensagem. os nomes entre aspas nos colchetes são os nomes dos campos do formulário que desejamos recuperar a informação

// vamos criar um cabeçalho, com as instruções From e Reply-To, para poder responder facilmente às mensagens do seu e-mail:
$cabecalho = "From: seuemail@seudominio.com.etc " . "\r\n" . "Reply-To: " . $_POST["email"] . "\r\n";

// agora chamamos a função mail(), com os parâmetros nessa ordem: destinatário, assunto, mensagem, cabeçalho
mail("seuemail@seudominio.com.br","Contato pelo site",$corpo,$cabecalho);
// supondo que você queira mandar a mensagem para mais de um destinatário, pode adicionar mais linhas com a função mail, enviando a outros departamentos, por exemplo:
mail("financeiro@suaempresa.com.etc","Contato pelo site",$corpo,$cabecalho);

// e finalmente redirecionamos o visitante para uma página dizendo que a mensagem foi enviada:
Header("Location: http://www.seusite.com.etc/ok.php");
?>

É basicamente isso. Sabendo manipular concatenações em PHP você pode montar a mensagem como quiser, incluir e remover mais campos, usar verificadores if para montar o email mudando algumas coisas definidas dependendo de algo selecionado ou não, etc.

Observações:

1 - Se a função mail não estiver ativa, cheque o software de envio no seu sistema. Pode ser o caminho para o sendmail no php.ini, ou mesmo a falta de um servidor de e-mails.

2 - Esta forma de envio de e-mails permite falsificar o remetente, geralmente a mensagem chega, mas vendo o cabeçalho poderá ver que foi enviada de outro lugar. Não use para o mal, caso contrário seu provedor poderá descobrir e cancelar sua conta.

3 - O envio de emails usa processamento, que se feito de uso excessivo, pode prejudicar os sites hospedados no mesmo servidor. Não envie SPAM! Se precisar enviar muitos emails, contrate serviços de SMTP dedicado ou um servidor só para isso.

4 - Alguns emails não foram recebidos por mim dessa forma em endereços de emails hospedados no serviço do Google Apps. Deve ser por verificações de segurança deles quanto à origem dos e-mails ou ao uso do campo "rementente" com outro endereço, ou falta de DNS reverso, sei lá. Mas em outros emails recebi normalmente, no máximo pode acontecer de ir para a caixa de SPAM, mova ou crie regras para manter tais mensagens na sua caixa de entrada.



Nova seção de comentários


Aviso: Os comentários são postados pelos visitantes do site, e não expressam a opinião da produção. Eventuais comentários indesejados, ofensivos ou que firam nossas políticas ou interesses de alguma forma poderão ser removidos sem aviso prévio. Para dúvidas, poste na comu.

Conheça os livros do Carlos E. Morimoto, do Guia do Hardware. Você pode comprar os livros pelo site, e vários dos mais antigos estão disponíveis para leitura na íntegra, como o livro de Hardware.


O produtor do Explorando (Marcos Elias) vive ouvindo música no computador, e sempre gostou de players simples e rápidos. Como os atuais acabam se distanciando dos seus ideais, se lotando de frescuras na interface, ele decidiu montar seu próprio player. Eis o Mondego. Leve, simples, rápido, com busca na playlist, músicas favoritas e vários recursos que tornam o dia-a-dia mais agradável. Saiba mais e baixe já. É grátis! Veja também o review no Baixaki, Superdownloads e Softpedia, três grandes sites.

Mondego Player