O PHPMaileré uma biblioteca de classes desenvolvida em PHP, cuja finalidade é agilizar o processo de criação e envio de E-mails.
Neste post irei descrever de forma breve como implementar um formulário de contacto básico utilizando a classe PHPMailer.
Para o nosso exemplo, criaremos um formulário em HTML com os seguintes campos: Nome, E-mail e Mensagem.
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8" />
<title>Enviando E-mail com PHPMailer</title>
</head>
<body>
<form method="post">
<p><label for="nome">Nome:</label> <input type="text" name="nome" /></p>
<p><label for="email">E-mail:</label> <input type="text" name="email" /></p>
<p><label for="assunto">Assunto:</label> <input type="text" name="assunto" /></p>
<p><label for="mensagem">Mensagem:</label> <textarea name="mensagem"></textarea></p>
<p><input type="submit" name="enviar" value="Enviar Mensagem" /></p>
</form>
</body>
</html>
Uma vez criado o fomulário, adicionamos o codigo PHP necessário para processar os dados e envia-los por E-mail usando um objecto da classe PHPMailer.
Para podermos utilizar o PHPMailer, teremos de baixar (link no final do post) o pacote de classes e descompacta-lo na raiz da página em que estamos a programar o formulário. No exemplo a seguir, o pacote foi descompactado dentro da pasta “classes”.
Nota: O código abaixo deverá ser inserida logo após a tag de abertura do corpo HTML (<body>).
<?php
$isEnviar = (isset($_POST['enviar']));
$isEnviado = false;
$strErro = "";
if ($isEnviar)
{
require_once('classes/PHPMailer_5.2.1/class.phpmailer.php');
$msgPara = "angodev@gmail.com";
$nome = $_POST['nome'];
$emailDe = $_POST['email'];
$assunto = "[Utilizando PHPMailer] - " . $_POST['assunto'];
$mensagem = $_POST['mensagem'];
$corpo = "Acabou de receber uma mensagem enviada utilizando o PHPMailer.\n\nNome: $nome \n\nE-mail: $emailDe\n\nMensagem:\n $mensagem";
try {
$email = new PHPMailer();
$email->CharSet = 'UTF-8'; // Suporte a caracteres especiais...
$email->IsMail();
$email->AddAddress($msgPara); // Endereço de E-mail do Remetente
$email->Subject = $assunto; // Assunto da Mensagem
$email->From = $emailDe; // Endereço de E-mail do Destinatário
$email->FromName = $nome; // Nome do Destinatário
$email->Body = $corpo;
$isEnviado = $email->Send();
if (!$isEnviado){
$strResultado = "Ocorreu um erro: " . $email->ErrorInfo;
} else {
$strResultado = "Mensagem enviada com sucesso!".
}
} catch (phpmailerException $ex){
$strResultado = $strResultado = "Ocorreu um erro: " . $ex->errorMessage();
}
}
?>
Vou tentar explicar de forma breve e por partes o código acima.
Inicializamos algumas variáveis que serão utilizadas para determinar se o formulário foi submetido ou não e mostrar uma mensagem informando se o email foi enviado ou não.
$isEnviar = (isset($_POST['enviar']));
$isEnviado = false;
$strErro = "";
Verificamos se o formulário foi submetido, incluímos a classe PHPMailer e criamos a instância da mesma (classe PHPMailer):
if ($isEnviar)
{
require_once('classes/PHPMailer_5.2.1/class.phpmailer.php');
$email = new PHPMailer();
// ...
Armazenados as informações enviadas através do formulário nas variáveis que utilizaremos para configurar o corpo da mensagem e algumas propriedades do objecto PHPMailer:
$msgPara = "angodev@gmail.com";
$nome = $_POST['nome'];
$emailDe = $_POST['email'];
$assunto = "[Utilizando PHPMailer] - " . $_POST['assunto'];
$mensagem = $_POST['mensagem'];
$corpo = "Acabou de receber uma mensagem enviada utilizando o PHPMailer.\n\nNome: $nome \n\nE-mail: $emailDe\n\nMensagem:\n $mensagem";
Utilizamos o bloco “try-catch” para instanciar o objecto PHPMailer e realizar o envio do E-mail , de forma que possa controlar qualquer erro inesperado que venha acontecer.
Dentro do bloco configuramos as propriedades da mensagem.
try {
$email = new PHPMailer();
$email->CharSet = 'UTF-8'; // Suporte a caracteres especiais...
$email->IsMail();
$email->AddAddress($msgPara); // Endereço de E-mail do Remetente
$email->Subject = $assunto; // Assunto da Mensagem
$email->From = $emailDe; // Endereço de E-mail do Destinatário
$email->FromName = $nome; // Nome do Destinatário
$email->Body = $corpo;
$isEnviado = $email->Send();
if (!$isEnviado){
$strResultado = "Ocorreu um erro: " . $email->ErrorInfo;
} else {
$strResultado = "Mensagem enviada com sucesso!".
}
} catch (phpmailerException $ex){
$strResultado = $strResultado = "Ocorreu um erro: " . $ex->errorMessage();
}
O download a Classe pode ser feita aqui: http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list
O Código completo pode ser encontrado Aqui: http://pastebin.com/wa8KtSHt