Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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']);
} $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/>';
}
} $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);
}
} $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']);
} $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']));
} $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);
} echo 'Erro ao enviar e-mail: ' . $mail->ErrorInfo;
} echo 'Sua mensagem foi enviada com sucesso.';
unset($_POST);
}
}
?><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.
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
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
desculpe a minha ignorancia mas esse codigo todo eu uso em qual arquivo?
exemplo qual o codigo do contato php, e o do enviar php. E o meu html como fica?
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
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?
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.
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
Muito obrigado Matias, vou tentar e coloco aqui depois o resultado.
Valeu
>
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?
Olha, como está na pasta examples, pode excluir a pasta inteira, porque nela só tem exemplos de utilização do PHPMailer.
Carlos Eduardo
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.
>
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
>
>
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.
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);
}
}
?><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',
);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
Amigo, o script ta com algum bug, qdo eu recebo o formulario por email, na parte q deveria vir a mensagem, ta vindo "nome"
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
continuo recebendo o nome em mensagem.
/applications/core/interface/imageproxy/imageproxy.php?img=http://img14.imageshack.us/img14/3382/84992340.jpg&key=7b53358c83e13164488ab361f49d8c1e59cc30d117169eedd793c9d238589c64" alt="Imagem Postada" />
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
Valeu mesmo, tudo ok!
Abraços
eu não estou programando meu site em php, eu posso utilizar esse seu formulário só numa pagina onde vai ter o meu formulário?
outra coisa, aquela parte onde eu coloco meu nome do gmail e a minha senha, tem como usar sem ter q colocar a senha?
>
eu não estou programando meu site em php, eu posso utilizar esse seu formulário só numa pagina onde vai ter o meu formulário?
Pode, desde que o servidor onde o site estiver hospedado tenha suporte a PHP.
>
outra coisa, aquela parte onde eu coloco meu nome do gmail e a minha senha, tem como usar sem ter q colocar a senha?
Aí depende. Se você não colocar usuário e senha, não vai ser autenticado. Agora, se quiser enviar e-mail autenticado pelo Gmail, aí tem que colocar usuário e senha mesmo.
Carlos Eduardo
pra que serve a autenticação do gmail? só pra saber se o email que o cara colocou é verdadeiro?
Na verdade serve para minimizar (senão evitar) que o e-mail seja considerado spam e caia na caixa de lixo eletrônico do recipiente.
Carlos Eduardo
tem como você ensinar a tirar essa linha da verificação?
outra coisa... hj eu utilizo um formulario simples numa pagina em html, uma segunda página em php (que é executada qdo o cara envia o formulario) com os comandos e uma terceira em html q é aquela q diz q o formulario foi enviado corretamente..
no seu formulario tem como eu fazer dessa maneira? pq pra eu adequar o meu site dentro da sua pagina php acho q vai ficar meio dificil...
Então. Pra tirar a autenticação, você tira as seguintes linhas
//Definimos que é SMTP
$mail->IsSMTP();
// 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;
Sobre a questão de adequar, não acredito que você vai ter problemas, porque aqui fica tudo em um arquivo só. Se tentar e não conseguir, posta uma dúvida no fórum principal que o pessoal te ajuda.
Carlos Eduardo
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?