Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matias Rezende

Formulário de Contato com múltiplos destinatários

Recommended Posts

Pessoal, vejo muita gente procurando formulário de contato com os destinatários podendo ser escolhido pelo usuário. Resolvi então criar um formulário, com múltiplos destinatários, utilizando a classe PHPMailer.

O código é grande, mas é porque tem bastante comentário, para explicar passo a passo o que está sendo feito.

O que temos aqui.

Um formulário de contato, contendo os campos

- Nome *

- E-mail *

- Telefone

- Destinatários (aqui temos um grupo de checkbox, para que o usuário possa selecionar mais de um) *

- Assunto *

- Mensagem *

O formulário conta com validação de e-mail através de Expressão Regular e validação de campos obrigatórios.

Se a validação falhar, os valores preenchidos continuam nos campos.

Também existe a proteção contra Injection.

O envio é autenticado utilizando a classe PHPMailer e os servidores do Gmail.

<?php
/**
* Exemplo de envio autenticado com PhpMailer, utilizando o Gmail, para múltiplos destinatários
*
* Coloque no value de cada checkbox o e-mail a ser enviado.
*
* Neste exemplo, usamos os seguintes e-mails
* - rh@site.com.br
* - adm@site.com.br
* - financeiro@site.com.br
*
* Para que seja possível enviar, tenha certeza que a extensão php_openssl.dll esteja descomentada
* no seu PHP.INI
*
* @author MatiasRezende
* @version 1.0
* @since 2009-09-17
*/

/**
* Aqui testamos se a extensão openssl foi carregada, pois ela é necessária para o envio.
* Caso ela não tenha sido carregada, ou seja, não esteja habilitada, vai encerrar o processamento.
*/
if(!extension_loaded('openssl'))
{
die('A extensão OpenSSL não está habilitada no seu PHP.INI. Habilite-a e tente novamente.');
}


// adicione os emails a serem utilizados
$destinos = array(
'Recursos Humanos' => 'rh@site.com.br',
'Financeiro' => 'financeiro@site.com.br',
'Administração' => 'adm@site.com.br',
);

// Usuário do gmail
$username = 'seuemail@gmail.com';
// Senha do usuário do Gmail
$password = 'suasenha';
// E-mail que vai aparecer como remetente
$from = 'SeuEmail@site.com.br';
// Nome que vai aparecer como remetente
$fromName = 'Seu Nome';

/**
* Início da validação. Estamos validando somente se está setado e escapando aspas.
* Faremos a mesma coisa para todos os campos.
*
*/

$erro = '';
// Testamos se o formulário foi enviado. Necessário para que não exiba mensagem de erro no primeiro
// acesso
if(isset($_POST['enviar']))
{
// Setamos $gpc como get_magic_quotes_gpc. Se existir, terá valor true. Caso contrário, será false
$gpc = get_magic_quotes_gpc();

// Validação campo Nome
if(isset($_POST['Nome']) && !empty($_POST['Nome']))
{
// Aqui estamos verificando se não está habilitado magic_quotes_gpc, escapa as aspas simples com addslashes.
$nome = ($gpc) ? $_POST['Nome'] : addslashes($_POST['Nome']);
}
else
{
$erro .= '- Preencha o Nome.<br/>';
}

// Validação campo E-mail. Validamos também o formato, usando expressão regular
if(isset($_POST['E-mail']) && !empty($_POST['E-mail']))
{
// Aqui estamos verificando se não está habilitado magic_quotes_gpc, escapa as aspas simples com addslashes.
$email = ($gpc) ? $_POST['E-mail'] : addslashes($_POST['E-mail']);

// Aqui validamos se o e-mail é válido, utilizando expressão regular.
if (!preg_match ('/^[A-Za-z0-9]+([_.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_.-][A-Za-z0-9]+)*\\.[A-Za-z0-9]{2,4}$/', $email))
{
$erro .= '- E-mail Inválido.<br/>';
}
}
else
{
$erro .= '- Preencha o E-mail<br/>';
}

// Validação campo Telefone. Como ele não é obrigatório, tiramos o else, que exibe mensagem de erro caso não esteja preenchido
if(isset($_POST['Telefone']) && !empty($_POST['Telefone']))
{
// Aqui estamos verificando se não está habilitado magic_quotes_gpc, escapa as aspas simples com addslashes.
$telefone = ($gpc) ? $_POST['Telefone'] : addslashes($_POST['Telefone']);
}

// Validação campo Destinatário
if(isset($_POST['Destinatario']) && !empty($_POST['Destinatario']))
{
// Aqui estamos verificando se não está habilitado magic_quotes_gpc, escapa as aspas simples com addslashes.
foreach ($_POST['Destinatario'] as $valor)
{
// Aqui adicionamos o radical do e-mail.
$destinatario[] = ($gpc) ? $valor : addslashes($valor);
}
}
else
{
$erro .= '- Selecione pelo menos 1 Destinatario<br/>';
}

// Validação campo Assunto
if(isset($_POST['Assunto']) && !empty($_POST['Assunto']))
{
// Aqui estamos verificando se não está habilitado magic_quotes_gpc, escapa as aspas simples com addslashes.
$assunto = ($gpc) ? $_POST['Assunto'] : addslashes($_POST['Assunto']);
}
else
{
$erro .= '- Preencha o Assunto.<br/>';
}

// Validação campo Mensagem
if(isset($_POST['Mensagem']) && !empty($_POST['Mensagem']))
{
// Aqui estamos verificando se não está habilitado magic_quotes_gpc, escapa as aspas simples com addslashes.
// Adicionamos também a função que troca nova linha por <br/>
$mensagem = ($gpc) ? nl2br($_POST['Mensagem']) : addslashes(nl2br($_POST['Nome']));
}
else
{
$erro .= '- Preencha o Mensagem<br/>';
}
}

/**
* Aqui testamos se o formulário foi enviado e se não existe erro nele.
* Caso seja válido, entramos na rotina de enviar o e-mail
*/
if(isset($_POST['enviar']) && empty($erro))
{
// aqui incluímos a pasta onde está a classe PhpMailer no include_path
set_include_path('PHPMailer'. PATH_SEPARATOR .get_include_path());

// incluímos a classe phpmailer. Não utilizamos a pasta onde ela está porque já incluímos anteriormente
include 'class.phpmailer.php';

/**
* Aqui definimos o corpo do e-mail.
*/
$conteudo = '
<html>
<body>
<h1>Contato enviado pelo site</h1>
<b>Nome</b> - '.$nome.'<br/>
<b>E-mail</b> - '.$email.'<br/>';
if(isset($telefone)) $conteudo .= '<b>Telefone</b> - '.$telefone.'<br/>';
$conteudo .= '<b>Destinatários</b> - '.implode(' , ',$destinatario).'<br/>
<b>Assunto</b>'.$assunto.'<br/>
<b>Mensagem</b>'.$mensagem.'<br/>';

// Instanciamos a classe PHPMailer
$mail = new PHPMailer();
// Aqui definimos o charset do e-mail a ser enviado.
$mail->CharSet = 'UTF-8';
//Definimos que é SMTP
$mail->IsSMTP();
//Definimos que utilizaremos HTML
$mail->IsHTML(true);
// habilitamos autenticação SMTP
$mail->SMTPAuth = true;
// seta o prefixo ssl
$mail->SMTPSecure = 'ssl';
// seta o Gmail como servidor SMTP
$mail->Host = 'smtp.gmail.com';
// seta a porta SMTP
$mail->Port = 465;
// Nome de usuário do Gmail
$mail->Username = $username;
// Senha do usuário do Gmail
$mail->Password = $password;
// Aqui você coloca o e-mail que vai aparecer como remetente
$mail->From = $from;
// Aqui você coloca o nome que vai aparecer como remetente
$mail->FromName = $fromName;
// Aqui vai a variável que tem o assunto, que vem do formulário
$mail->Subject = $assunto;
// Seta o WordWrap
$mail->WordWrap = 50;
// Aqui vai o conteúdo da mensagem a ser enviada
$mail->MsgHTML($conteudo);
// Aqui vai o e-mail da pessoa que enviou o contato, para resposta
$mail->AddReplyTo($email,$nome);
// Aqui varremos o array $destinatario para adicionar os e-mail selecionados
foreach($destinatario as $destino)
{
$mail->AddAddress($destino);
}
// Aqui enviamos o e-mail. Caso apresente algum erro, vai exibi-lo.
if(!$mail->Send())
{
echo 'Erro ao enviar e-mail: ' . $mail->ErrorInfo;
}
else
{
echo 'Sua mensagem foi enviada com sucesso.';
unset($_POST);
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Exemplo de Formulário de Contato</title>
</head>

<body>
<h1>Formulário de Contato</h1>
<form id="contato" name="contato" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">

<label><strong>Nome*</strong><br />
<input type="text" name="Nome" id="Nome" value="<?php echo (isset($_POST['Nome'])) ? $_POST['Nome']: '' ; ?>" /></label><br />
<label><strong>E-mail*</strong><br />
<input type="text" name="E-mail" id="E-mail" value="<?php echo (isset($_POST['E-mail'])) ? $_POST['E-mail']: '' ; ?>" /></label><br />
<label><strong>Telefone</strong><br />
<input type="text" name="Telefone" id="Telefone" value="<?php echo (isset($_POST['Telefone'])) ? $_POST['Telefone']: '' ; ?>" /></label><br />
<strong>Destinatário*</strong><br />
<?php
// aqui fazemos o preenchimento dos e-mail.
foreach ($destinos as $chave => $valor)
{
echo '<label><input type="checkbox" name="Destinatario[]" value="'.$valor.'" id="destinatario_0"';
echo (isset($_POST['Destinatario']) && in_array($valor,$_POST['Destinatario'])) ? 'checked="checked" ' : '' ;
echo '/>'.$chave.'</label><br />';
}
?>
<br />
<label><strong>Assunto*</strong><br />
<input type="text" name="Assunto" id="Assunto" value="<?php echo (isset($_POST['Assunto'])) ? $_POST['Assunto']: '' ; ?>" /></label><br />
<label><strong>Mensagem*</strong><br />
<textarea name="Mensagem" id="Mensagem" cols="45" rows="5"><?php echo (isset($_POST['Mensagem'])) ? $_POST['Mensagem']: '' ; ?></textarea></label><br />
<label><input type="submit" name="enviar" id="enviar" value="Enviar Contato" /></label>
<div id="erro">
<?php
/**
* Aqui testamos. Se a $erro não estiver vazia, significa que temos erro no preenchimento do formulário,
* então exibimos os erros no preenchimento.
* Para formatar a mensagem, formate o #erro no seu CSS.
*/
echo (!empty($erro)) ? 'Foram encontrados erros no preenchimento do formulário<br/>'.$erro : '' ;
?>
</div>
</form>
</body>
</html>

Utilizando a classe PHPMailer, para PHP 5_6. Foi testada com a versão 5.0.2.

http://www.americanone.com.br';</script>";

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.