Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, tenho um formulário de e-mail que utilizo para envio a classe phpmailer, acontece que estou com uma duvida, tenho em meu forma uma caixa select que escolho de acordo com o departamento que a pessoa quer contato um e-mail de destino diferente, acontece que no phpmailer eu tenho que autenticar com usuário e senha para que chegue ao destino, e se eu uso um swicht para selecionar os destinatários de acordo com o departamento eu consigo fazer isso com o phpmailer em um único arquivo ao invés de fazer um script de envio autentica para cada área?
Estou usando assim o form. para envio mais queria que enviasse de acordo com o que pessoa escolhe no select do form.
<?php
require('mailer/class.phpmailer.php');
$nome =($_POST['nomeForm']);
$email = ($_POST['emailForm']);
$assunto = ($_POST['assuntoForm']);
$mensagem = ($_POST['mensagemForm']);
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Port = 587;
$mail->Host = 'mail.uol.com.br';
$mail->Username = 'contato@uol.com.br';
$mail->Password = '****';
$mail->SetFrom('contato@ul.com.br');
$mail->AddAddress('contato@uol.com.br', 'Contato Site');
$mail->AddReplyTo($email,$nome);
$mail->Subject = $assunto;
$mail->MsgHTML("
Nome: ".$nome."<br />
Mensagem: ".$mensagem."<br />
");
if($mail->Send()){
echo "<script type='text/javascript'>
alert ('Mensagem enviada com sucesso!');
window.location = 'contato.html';
</script>" ;
}else {
echo $mail->ErrorInfo;
}
?>
Na verdade eu fiz assim, mas não funciona.
<?php
require('mailer/class.phpmailer.php');
$nome =($_POST['nomeForm']);
$email = ($_POST['emailForm']);
$assunto = ($_POST['assuntoForm']);
$mensagem = ($_POST['mensagemForm']);
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Port = 587;
$mail->Host = 'mail.dominio.com.br';
$mail->Username = 'contato@dominio.com.br';
$mail->Password = '*****';
$mail->SetFrom('contato@dominio.com.br');
$mail->AddAddress('$departamento');
$mail->AddReplyTo($email,$nome);
$mail->Subject = $assunto;
$mail->MsgHTML("
Nome: ".$nome."<br />
Mensagem: ".$mensagem."<br />
");
switch($departamento)
{
case '1':
$departamento = 'email1@dominio.com.br';
break;
case '2':
$departamento = 'email2@dominio.com.br';
break;
case '3':
$departamento = 'email3@dominio.com.br';
break;
}
if($mail->Send()){
echo "<script type='text/javascript'>
alert ('Mensagem enviada com sucesso!');
window.location = 'contato.html';
</script>" ;
}else {
echo $mail->ErrorInfo;
}
?>Na verdade eu já havia testado da maneira que colocou acima, e mesmo assim ele não esta conseguindo pegar o destinatário, dá o mesmo erro. As aspas foi vacilo mesmo.
var_dump($departamento)
Vê se está enviando o valor correto. Reitero que o [inline]addAddress[/inline] deve vir depois do switch, dando certo ou não.
Mesmo erro.
Invalid address: Invalid address: You must provide at least one recipient email address. You must provide at least one recipient email address.
O que o [inline]var_dump[/inline] que te pedi retorna?
Está vindo Null por isso.
Car acho que deu certo havia esquecido de setar o nome para select no form. obrigado.
Cara estou fazendo algo errado?
Meu código está assim:
<?php header('Content-Type: text/html; charset=UTF-8; '); ?><?php// chamada da classe phpmailerrequire_once('mailer/class.phpmailer.php');echo " POST: <pre>"; print_r($_POST); echo "</pre>";switch($destinatario){case 'email1@email.com.br': $destinatario = 'email1@email.com.br';break;case 'email2@email.com.br': $destinatario = 'email2@email.com.br';break;case 'email3@email.com.br': $destinatario = 'email3@email.com.br';break;}// resgatando os dados passados pelo form$nomeusuario = $_POST['nome'];$emailusuario = $_POST['email'];$assunto = $_POST['assunto'];$mensagem = $_POST['mensagem'];$data = date("d/m/y"); //hidden$hora = date("H:i"); //hidden$ip = $_SERVER['REMOTE_ADDR']; //hidden$navegador = $_SERVER['HTTP_USER_AGENT']; //hidden// faço a chamada da classe$Email = new PHPMailer();$Email->IsSMTP(); // set mailer to use SMTP$Email->SMTPAuth = true; // turn on SMTP authentication$Email->Host = "smtp.email.com.br";$Email->Username = "emaildequemenvia@email.com.br";$Email->Password = "*****";$Email->IsMail(); // ativa o envio de e-mails em HTML, se false, desativa.$Email->Mailer = "smtp";// na classe, há a opção de idioma, setei como br$Email->SetLanguage("br");// esta chamada diz que o envio será feito através da função mail do php. Você mudar para sendmail, qmail, etc// se quiser utilizar o programa de email do seu unix/linux para enviar o email//$Email->IsMail(); // ativa o envio de e-mails em HTML, se false, desativa.$Email->IsHTML(true); // email do remetente da mensagem$Email->From = "emaildequemenvia@email.com.br"";// nome do remetente do email$Email->FromName = $nomeusuario;// Endereço de destino do emaail, ou seja, pra onde você quer que a mensagem do formulário vá?$Email->AddAddress("$departamento", "Email.");// informando no email, o assunto da mensagem$Email->Subject = $assunto; // Define o texto da mensagem (aceita HTML)$Email->Body .= "<B>E-mail enviado de: $email<BR></b>";$Email->Body .= "Mensagem: $mensagem<BR><BR>Dados do contato<br>Data: $data<br>Hora: $hora<br>Ip: $ip<br>Navegador: $navegador";if(!$Email->Send()) { echo "<h2>A mensagem não foi enviada. </h2><p><br>"; echo "Erro: " . $Email->ErrorInfo;}else{ echo "<h2>Opa email enviado com sucesso.</h2>";}echo "<br /> <a href='contato.html'>Voltar</a>"; ?>
E o array está me retornando:
Array
(
[nome] => Mauro
[=> maurohpg@hotmail.com](mailto:)
[[assunto] => Teste de formulário](mailto:)
[[departamento] => email1@email.com.br](mailto:)
[[mensagem] => Teste](mailto:)
Invalid address: You must provide at least one recipient email address.
$Email->AddAddress("$departamento", "Email.");
>
Cara estou fazendo algo errado?
Isso aqui:
>
switch($destinatario)
Não era pra ser [inline]switch($departamento)[/inline]??
>
$Email->From = "emaildequemenvia@email.com.br"";
Até o syntax highlighter do próprio fórum pegou as aspas duplicadas ali no fim da linha.
>
$Email->AddAddress("$departamento", "Email.");
Adicione a seguinte linha antes disso aí:var_dump("Agora, neste exato momento, vou tentar adicionar {$departamento} como um destinatário...");E corrija até que a mensagem retorne corretamente.
Cara fiz assim $Email->AddAddress ($_POST['destinatario'] , 'Contato'); e deu certo.
Você tem que chamar isso aqui...
$mail->MsgHTML(" depois de definir o valor de [inline]$departamento[/inline]switch($departamento) {
$mail->MsgHTML(" PS.: Você não precisa envolver o destinatário em aspas se o valor estiver numa variável:...
}
$mail->addAddress($departamento); // ao invés de addAddress('$departamento')