Ir para conteúdo

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.

PHPMailer

 

Extraia os arquivos para uma pasta chamada PHPMailer.

 

Espero que gostem. O código está todo comentado.

 

Comentários, críticas e sugestões são bem vindas.

 

Carlos Eduardo

 

EDIT - Seguindo a sugestão do João Batista Neto, fiz algumas alterações no código.

 

EDIT2 - 06/11/2009 - Fiz uma nova versão do script, que agora, ao selecionar um checkbox, pode enviar para mais de um e-mail.

Link para a nova versão (que está abaixo neste mesmo tópico) - http://forum.imasters.com.br/index.php?/topic/363321-formulario-de-contato-com-multiplos-destinatarios/page__view__findpost__p__1421431

Compartilhar este post


Link para o post
Compartilhar em outros sites

fala matias td bem?

olha o que deu !!! ;)

 

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/clinicac/public_html/class.smtp.php on line 41

Obs: usei os arquivos para versão de php 4.3.7 sera esse o problema? se eu trocar por esta que você está disponibiizando ai será que vai ter alguma diferença?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, é possível que o problema seja este, tanto que o erro é no arquivo

/home/clinicac/public_html/class.smtp.php

Isto acontece por causa dos parâmetros de visibilidade (public, private, protected) que não existiam no PHP 4.

 

Tenta atualizar o teu PHP para 5 > e usar a última versão do PHPMailer. E o pior é que eu não tenho nem como te ajudar no PHP 4, porque não tenho esta versão aqui para testar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso, está tudo em um arquivo só, para que, no momento da validação não precise enviar os dados por $_SESSION. É só para facilitar o entendimento mesmo.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postou Hoje, 14:16

Neste caso, está tudo em um arquivo só, para que, no momento da validação não precise enviar os dados por $_SESSION. É só para facilitar o entendimento mesmo.

 

Carlos Eduardo

 

Obrigado pela resposta. Este arquivo pode ter qualquer nome?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como ser mais explicativo. Quanto ao uso dos arquivos como serão e quantos serão, como que eu farei para que funcione. Não entendi como ele pode ser um arquivo só. Por favor ajude-me

Preciso de um formulario em que eu possa ao preencher selecionar em um dropdown em qual setor (email) o formulario será entregue. Acho q é esse só não sei como usa-lo.

Obrigado aguardo resposta.

Desculpe a minha ignorancia, mas essa coisa de ter que selecionar o setor me quebrou se fosse um form normal tava tranquilo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você vai fazer.

Copia este código que está ali em cima e cola em um arquivo. Pode salvar com qualquer nome.

Além disto, baixa o arquivo ZIP deste link. http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php5_6/PHPMailer%20v5.0.2/PHPMailer_v5.0.2.zip/download.

Extraia o conteúdo dele em uma pasta chamada PHPMailer (exatamente como está aqui).

 

Execute. Na primeira execução, ou seja, antes de enviar os dados, vai exibir o formulário. Se todos os campos forem preenchidos corretamente, vai enviar o e-mail para o(s) destinatário(s) selecionado(s). Caso não preencha todos os campos obrigatórios, ou caso o e-mail não seja válido, não vai enviar o e-mail e vai exibir as mensagem de erro abaixo, além de manter os dados preenchidos no formulário.

 

// 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',
        );

Nesta parte do código, você vai colocar os dados dos e-mails que poderão ser escolhidos. Na primeira parte (aonde está Recursos Humanos) vai o título, e na segunda parte vai o e-mail relativo àquele título.

 

De resto, leia os comentários dentro do código. Está bem explicado.

 

Caso tente e não consiga, poste a sua dúvida no fórum principal que poderemos te ajudar.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado Matias, vou tentar e coloco aqui depois o resultado.

Valeu

 

Olá, pessoal seguinte usei esse script em um site e funfou perfeitamente...mas depois de algums dias a pagina está infectada e parece-me que o arquivo PHPMailer/examples/index.html tem algum script malicioso...mas como sou leigo nao sei que linha posso deletar.

 

gostaria de saber se esse script é confiavel? e como posso identificar qual a linha maliciosa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matias, primeiramente parabéns pelo tutorial, foi de grande utilidade.

Tenho uma dúvida.

 

As mensagens que eu recebo estão vindo com o e-mail do gmail.

Outra dúvida seria, como eu posso adicionar dois emails em um mesmo departamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As mensagens que eu recebo estão vindo com o e-mail do gmail.

 

Isto acontece porque você está enviando com a autenticação do gmail. Você pode fazer a autenticação pelo seu provedor ou enviar sem autenticação.

 

Outra dúvida seria, como eu posso adicionar dois emails em um mesmo departamento.

 

Como assim? Seria algo como, ao selecionar um checkbox ele enviar para 2 ou mais e-mail?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

As mensagens que eu recebo estão vindo com o e-mail do gmail.

 

Isto acontece porque você está enviando com a autenticação do gmail. Você pode fazer a autenticação pelo seu provedor ou enviar sem autenticação.

 

Outra dúvida seria, como eu posso adicionar dois emails em um mesmo departamento.

 

Como assim? Seria algo como, ao selecionar um checkbox ele enviar para 2 ou mais e-mail?

 

Carlos Eduardo

 

Isso, exatamente selecionar um checkbox e enviar para 2 e-mails diferentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... achei interessante a idéia. Fiz a modificação no código.

<?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.1
* @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' => array(
				'email1@email.com.br',
				'email2@email.com.br',
				'email3@email.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)
       {
       	if(is_array($destino))
       	{
       		foreach ($destino as $destinoArray)
       		{
       			$mail->AddAddress($destinoArray);
       		}
       	}
       	else
       	{
			$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>

 

O que foi modificado.

 

// adicione os emails a serem utilizados 
$destinos = array(
                'Recursos Humanos' => array(
					'email1@email.com.br',
					'email2@email.com.br',
					'email3@email.com.br'),
                'Financeiro'       => 'financeiro@site.com.br',
                'Administração'    => 'adm@site.com.br',
        );
Quando for marcado Recursos Humanos, vai enviar para os emails que estão dentro do array que está ali.

 

A outra parte que foi mudado é aqui.

        // Aqui varremos o array $destinatario para adicionar os e-mail selecionados
        foreach($destinatario as $destino)
        {
                // testa se é um array. Se for, joga dentro de um foreach. Se não for, apenas adiciona o endereço.
        	if(is_array($destino))
        	{
        		foreach ($destino as $destinoArray)
        		{
        			$mail->AddAddress($destinoArray);
        		}
        	}
        	else
        	{
				$mail->AddAddress($destino);
        	}    
        }

Acho que agora vai.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste ponto é onde vai o conteúdo do e-mail.

        /**
         * 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/>';

Veja se está correto.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está esta parte do seu código?

 

        /**
         * 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/>';

E esta

        // 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/>';   
        }

Carlos Eduardo

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.