Ir ao conteúdo
  • Cadastre-se

Enviar multiplo emails com phpmailer.


Posts recomendados

Estou com um problema semelhante, tenho um select no html onde o usuário escolhe para qual unidade ele envia o formulário, estou usando dessa forma, mas não estou sabendo chamar o item e não está enviando para nenhum dos endereços, uso locaweb:

 

<?

require_once('class.phpmailer.php');

if(isset($_POST['destinatarios'])):


//Remetentes
$email = AddAddress($dest);
$nomeusuario = "American One Idiomas";


//Corpo da Mensagem
$mailer = new PHPMailer();
$mailer->IsSMTP();
$mailer->SMTPDebug = 1;
$mailer->Port = 587; //Indica a porta de conexão para a saída de e-mails. Utilize obrigatoriamente a porta 587.

$mailer->Host = 'smtp.americanone.com.br'; //Onde em 'servidor_de_saida' deve ser alterado por um dos hosts abaixo:
//Para cPanel: 'localhost';
//Para Plesk 11 / 11.5: 'smtp.dominio.com.br';


//Descomente a linha abaixo caso revenda seja 'Plesk 11.5 Linux'
//$mailer->SMTPSecure = 'tls';


$mailer->SMTPAuth = true; //Define se haverá ou não autenticação no SMTP
$mailer->Charset = 'UTF-8'; // codificação UTF-8, a codificação mais usada recentemente
$mailer->Username = '[email protected]'; //Informe o e-mai o completo
$mailer->Password = 'xxxxxx'; //Senha da caixa postal
$mailer->FromName = utf8_decode($nomeusuario); //Nome que será exibido para o destinatário
$mailer->From = '[email protected]'; //Obrigatório ser a mesma caixa postal indicada em "username"


$mailer->Subject = 'Mensagem via contato do site' .date("H:i"). '-' .date("d/m/Y");
$mailer->Body = "Nome = $nome \n" . "Email = $email \n" . "Telefone = $telefone \n" . "Mensagem = $mensagem \n";


//Destinatarios / Respostas

foreach($_POST['destinatarios'] as $dest) { //foreach só percorre as taxas que o usuário clicou.
if($dest != ''){
$mail->AddAddress($dest); //E-mail e nome do destinatario
}


if(!$mailer->Send())
{
echo "Mensagem não enviada";
echo "Erro: " . $mailer->ErrorInfo; exit;
}
echo "<script>
    alert('Sua mensagem foi enviada, obrigado!');
    window.location.href='http://www.americanone.com.br';</script>";

?>

aqui trecho do html

<form id="form1" name="form1" method="post" action="envio2.php">
                  <div style="margin-bottom:10px; margin-top:10px;">
                    <label>Escolha a unidade que deseja entrar em contato <br/>
                      <input type="hidden" name="unidades" id="unidades" value="<?php echo $row_unidades_setado['unidades']; ?>" />
                    </label>
                    <label for="destinatarios[]"></label>
                    <select name="destinatarios[]" id="destinatarios[]">
                      <option value=""> --UNIDADES-- </option>
                      <option value="[email protected]">American One Contato</option>
                      <option value="[email protected]">American One Novo Hamburgo</option>
                      <option value="[email protected]">American One Bento Gonçalves</option>
                    </select>
                  </div>
                  
                </form>

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Patricia Serafin Olá,  Seja bem vinda em nosso Clube do Hardware.

 

Sobre seu código, não tenho certeza, mas você está tentando enviar mais de um e-mail, através de um array.

Ao invés de criar um array de e-mails,  tente receber um único endereço.

 

Qual a mensagem de erro que dá?

PS: lembro que outros usuários já apresentaram problemas de envio com o phpmailer e a locaweb.

 

Link para o comentário
Compartilhar em outros sites

o erro define que devo citar um e-mail de destino, pode me dar um auxilio, não entendo quase nada de php.

 

o que preciso é incluir no php uma forma de escolha para envio do formulário, o mesmo sem essa opção de escolha funciona bem, a questão é que há duas unidades que querem receber em seu respectivo e-mail o contato do cliente e não um unico e-mail recebendo tudo das duas unidades, não estou sabendo fazer isso.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Patricia Serafin Ainda não entendi o que você quis fazer no código.

Você quer enviar múltiplos e-mails para endereços diferentes?

Quer enviar um mesmo e-mail para mais de um endereço de e-mail?

Essa opção de escolhe precisa ser múltipla? ou seja, poder selecionar mais de um endereço ali da lista?

 

Por favor, dê o máximo de informações relevantes ao seu objetivo para que possamos ajudar com maior eficiência.

Link para o comentário
Compartilhar em outros sites

Obrigada! Vamos lá...

Trata-se de um site para uma escola que possui duas unidades em cidades diferente.

Tenho um formulário básico que contém um select, aqui o usuário escolhe qual unidade quer entrar em contato. O formulário após preenchido será enviado somente para a unidade que o usuário escolheu.

 

Exemplo: Moro em Bento Gonçalves-RS quero entrar em contato com a escola situada em Bento Gonçalves.

Recebendo meu contato a escola de destino entrará em contato comigo.

 

Abaixo HTML:

<form action="php/email.php" method="POST"> 
<p>
Escolha a unidade que deseja entrar contato<br />
<input type="hidden" name="unidades" id="unidades" value="<?php echo $row_unidades_setado['unidades']; ?>" />
<label for="destinatarios[]"></label>
<select name="destinatarios[]" id="destinatarios[]">
<option value=""> --UNIDADES-- </option>
<option value="[email protected]">American One Novo Hamburgo</option>
<option value="[email protected]">American One Bento Gonçalves</option>
</select>

<br />  

<p> 
Nome<br /> 
<input type="text" size="30" name="nome" required> 
</p>   

<p> 
E-mail<br /> 
<input type="text" size="30" name="email" required>		
</p>   

<p> 
Telefone<br /> 
<input type="text" size="35" name="telefone" required> 
</p>   

<p> 
Mensagem<br /> 
<input type="text" cols="1" rows="10" name="mensagem" required> 
</p>  

<p>
<input type="submit" name="BTEnvia" value="Enviar"> 
</p>

</fieldset>
</form>

 

Em um primeiro momento estava enviando apenas para um e-mail, o phpmailer estava funcionando bem.

Este é o código que estava utilizando:

<?php
 
require_once('class.phpmailer.php');

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=utf-8\r\n";

$mailer = new PHPMailer();
$mailer->IsSMTP();
$mailer->SMTPDebug = 1;
$mailer->Port = 587;
 
$mailer->Host = 'smtp.americanone.com.br';

$mailer->SMTPAuth = true;
$mailer->Username = '[email protected]';
$mailer->Password = 'xxxxxx';
$mailer->FromName = 'Contato American One';
$mailer->From = '[email protected]';
$mailer->AddAddress('[email protected]'); 
$mailer->Subject = 'Mensagem via contato do site' .date("H:i"). '-' .date("d/m/Y");
$mailer->Body = "Nome = $nome \n" . "Email = $email \n" . "Telefone = $telefone \n" . "Mensagem = $mensagem \n";

	
if(!$mailer->Send())
{
echo "Mensagem não enviada";
echo "Erro: " . $mailer->ErrorInfo; exit;
}
echo "<script>
    alert('Sua mensagem foi enviada, obrigado!');
    window.location.href='http://www.americanone.com.br';</script>";

?>

 

A escola agora quer/prefere que as unidades recebam somente o que se refere ao seu campo.

Então consultei o que pude na internet sobre o assunto e procurei acrescentar ao código que funcionava algumas opções que encontrei em minha pesquisa, sem sucesso.

 

Preciso de uma solução, não sei como fazer. Pode me ajudar? Caso precise de mais informações estou a disposição.

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Patricia Serafin Acho que consegui captar a vossa mensagem!

Então,   vejo algumas coisas ali, mas não posso dar certeza de que seja a fonte do problema.

 

1) A variável  $email = AddAddress($dest);   De onde vem?  se é do campo e-mail que o usuário digitou precisa ser recebida com $_POST[]

 

2) Aquele foreach, é usado para iterar um vetor. No caso, você não precisa de um vetor porque quer que o e-mail seja enviado somente ao endereço da unidade escolhida.

 

3)O teste de IF  no final, ele testa se o e-mail não foi enviado.  Pelo menos creio que faltou inserir a parte OK dentro do ELSE e não fora do IF.

 

4) A versão do phpmailer que você está usando é bem mais antiga, a nova altera algumas coisas.( recomendo usar a versão mais recente encontrada aqui: https://github.com/PHPMailer/PHPMailer

 

Agora, vamos por partes!

Comente toda a parte do phpmailer  usando o bloco :  /*      */   

 

E façamos os testes iniciais.

Primeiro retire a menção de vetor do formulário deixando desta forma:

 

<form action="php/email.php" method="POST"> 
<p>
Escolha a unidade que deseja entrar contato<br />
<input type="hidden" name="unidades" id="unidades" value="<?php echo $row_unidades_setado['unidades']; ?>" />
<label for="destinatarios"></label>
<select name="destinatarios" id="destinatarios">
<option value=""> --UNIDADES-- </option>
<option value="[email protected]">American One Novo Hamburgo</option>
<option value="[email protected]">American One Bento Gonçalves</option>
</select>

Repare que eu tirei os []  do lado a palavra destinatario.   Uma era porque no ID não se põe vetores!

Com isso,  a escolha sempre será unitária, ou seja,  ou será escolhida a American One Novo Hamburgo ou American One Bento Gonçalves.

 

Teste parte 2:

 

No seu php praticamente todo comentado(para não apagar o código e ele não ser interpretado), receba TODOS os dados do formulário pelo $_POST[]

 

então ficaria assim:

$unidade       = $_POST["destinatarios"];
$nome          = $_POST["nome"];
$email          = $_POST["email"];
$telefone       = $_POST["telefone"];
$mensagem    = $_POST["mensagem"];

Com isso temos, em variáveis os valores digitados e selecionados no formulário.

 

Agora podemos fazer o terceiro teste que é saber se elas possuem o valor.

Então pode-se colocar um "echo" na frente de cada só para ver o valor contido.

 

Se aparecer na tela todos os valores dos campos, já percorreu metade do caminho!

E então podemos ir para próxima parte.

Seguindo as dicas do site que postei do Github que contem uma nova sintaxe,  você monta como será enviado.

 

Fico no aguardo dos resultados dos testes.

Link para o comentário
Compartilhar em outros sites

Bom dia,

 

Então fiz a alteração do php para o indicado, alterei o html conforme orientado e responde com o seguinte erro:

 

Invalid address: (addAnAddress to): Erro: You must provide at least one recipient email address.

O html está dessa forma:

<form action="" method="POST"> 
    <p> 	
        Escolha a unidade que deseja entrar contato<br />
    </p>
			<input type="hidden" name="unidades" id="unidades" value="" />
			<label for="destinatarios"></label>
			<select name="destinatarios" id="destinatarios">
			<option value=""> --UNIDADES-- </option>
            <option value="[email protected]">American One Contato</option>
			<option value="[email protected]">American One Novo Hamburgo</option>
			<option value="[email protected]">American One Bento Gonçalves</option>
			</select>
   
    <br />  
	<p> 
		Nome<br /> 
		<input type="text" size="30" name="nome" required> 
	</p>   
	<p> 
		E-mail<br /> 
		<input type="text" size="30" name="email" required>		
	</p>   
	<p> 
		Telefone<br /> 
		<input type="text" size="35" name="telefone" required> 
	</p>   
	<p> 
		Mensagem<br /> 
		<input type="text" cols="1" rows="10" name="mensagem" required> 
	</p>  
	<p>
          <input type="submit" name="BTEnvia" value="Enviar"> 
	</p>

    </fieldset>
    </form>

O php está dessa forma:

 

<?

	require 'phpmailer/class.phpmailer.php';
	require 'phpmailer/class.smtp.php';


	$mail = new PHPMailer();

	
	$unidade	= $_POST["destinatarios"];
	$nome		= $_POST["nome"];
	$email		= $_POST["email"];
	$telefone	= $_POST["telefone"];
	$mensagem	= $_POST["mensagem"];
	
	$from		= '[email protected]';
	$fromName	= 'American One';
	
	$host		= 'smtp.americanone.com.br';
	$username 	= '[email protected]'; 
	$password 	= 'xxxxxx';
	$port		= '587';
	$secure 	= '';
	
	$mail->isSMTP();
	$mail->Host 		= $host;
	$mail->SMTPDebug 	= 2;
	$mail->SMTPAuth 	= true;
	$mail->Username 	= $username;
	$mail->Password 	= $password;
	$mail->Port 		= $port;
	$mail->SMTPSecure 	= $secure;	
	
	$mail->From 		= $from;
	$mail->FromName 	= $fromName;
	$mail->addReplyTo($from, $fromName);
	
	$mail->addAddress($dest, $fromname);
	
	$mail->IsHTML(true);
	$mail->CharSet = 'utf-8';
	$mail->WordWrap = 70;
	
	$mailer->Subject = 'Mensagem via contato do site' .date("d/m/Y");
	$mailer->Body = "Nome = $nome \n" . "Email = $email \n" . "Telefone = $telefone \n" . "Mensagem = $mensagem \n";
	
	$send = $mail->Send();
	if($send)
		echo 'Sua mensagem foi enviada, obrigado!';
	
	else
		echo 'Erro: ' . $mail->ErrorInfo;
	
	/*echo "<script>
    alert('Sua mensagem foi enviada, obrigado!');
    window.location.href='http://www.americanone.com.br';</script>";*/

?>

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Patricia Serafin Pelo que eu vi ali no  $mail->addAddress($dest, $fromname); 

Não existe esta variável "$dest".

 

Por isso ele dá que o endereço é inválido.

Outra coisa, que é mencionei anteriormente... você está utilizando uma VERSÃO antiga do phpmailer.

Então você precisa entrar lá no site do Github que eu postei no meu post número #06  e baixar novamente a versão MAIS recente do phpmailer, porque algumas coisas mudaram.

 

E este if no final...  sempre acostume-se a colocar delimitador de bloco.   com chaves ou com a sintaxe alternativa. Eu recomendo sempre usar a sintaxe alternativa para não confundir.

 

exemplo:

if($send):
	echo 'Sua mensagem foi enviada, obrigado!';
else:
	echo 'Erro: ' . $mail->ErrorInfo;
endif;

 

Link para o comentário
Compartilhar em outros sites

@DiF  eu baixei no site que mencionou e adaptei um exemplo. mas mesmo assim....:confused:

 

2016-12-12 18:34:27	Invalid address: (addAnAddress Reply-To): 2016-12-12 18:34:27	Invalid address: (addAnAddress to): Erro: You must provide at least one recipient email address.

 

adicionado 2 minutos depois

@DiF dá uma olhada na bagunça kk

<?

require 'phpmailer/PHPMailerAutoload.php';

$mail = new PHPMailer;

$unidade	= $_POST["destinatarios"];
$nome		= $_POST["nome"];
$email		= $_POST["email"];
$telefone	= $_POST["telefone"];
$mensagem	= $_POST["mensagem"];

$mail->	IsSMTP();
$mail-> SMTPDebug = 2;
$mail-> DebugOutput = 'html';

$mail-> Host = "smtp.americanone.com.br";
$mail-> Port = '587';

$mail-> SMTPAuth = true;
$mail-> usuário = "[email protected]";
$mail-> Password = "xxxxxx";

$mail-> setFrom ('[email protected]',' American One Idiomas');
$mail-> addReplyTo ('');
$mail-> addAddress ('');

$mail-> Assunto = 'Mensagem de contato via site American One Idiomas';
$mail-> Body = "Nome = $nome \n" . "Email = $email \n" . "Telefone = $telefone \n" . "Mensagem = $mensagem \n";

$send = $mail->Send();
	if($send){
		echo 'Sua mensagem foi enviada, obrigado!';
	}
	else{
		echo 'Erro: ' . $mail->ErrorInfo;
	}

?>

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderador

@Patricia Serafin Pelo que eu vi:

$mail-> addAddress ('');

Esta linha está vazia.

 

Informe o e-mail na qual para quem você vai mandar!

No caso é este: 

$unidade = $_POST["destinatarios"];

Então seu código completo ficaria:

 

<?php
require 'phpmailer/PHPMailerAutoload.php';

$mail = new PHPMailer;

$unidade	= $_POST["destinatarios"];
$nome		= $_POST["nome"];
$email		= $_POST["email"];
$telefone	= $_POST["telefone"];
$mensagem	= $_POST["mensagem"];

$body = "Nome = $nome <br/> 
         Email = $email </br> 
         Telefone = $telefone <br/> 
         Mensagem = $mensagem <br/>";

$mail->IsSMTP();
$mail->isHTML(true); 

$mail->Host = "smtp.americanone.com.br";
$mail->Port = '587';

$mail->SMTPAuth = true;
$mail->usuário = "[email protected]";
$mail->Password = "xxxxxx";

$mail->setFrom ('[email protected]',' American One Idiomas');
$mail->addReplyTo ('');//esta linha só é requerida se você quer enviar uma resposta ao usuário.. 
$mail->addAddress ($unidade);

$mail->Assunto = 'Mensagem de contato via site American One Idiomas';
$mail->Body = $body;

$send = $mail->Send();
	if($send){
		echo 'Sua mensagem foi enviada, obrigado!';
	}
	else{
		echo 'Erro: ' . $mail->ErrorInfo;
	}

?>

PS:  

O simbolo " ->  " precisa estar colado a palavra.

exemplo de errado:

 

$mail-> isHTML(true);

 

Exemplo de certo:

 

$mail->isHTML(true);

 

Link para o comentário
Compartilhar em outros sites

sim consta class.phpmailer, class.smtp e a PHPMailerAutoLoad.

 

estou lendo a wiki da github diz que neste caso devo acrescentar:

$mail -> SMTPAuth  =  false ; 
$mail -> SMTPSecure  =  false ;

 

adicionado 0 minutos depois

a locaweb exige a porta 587, então alterei em todas as class, estavam com 25

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderador

@Patricia Serafin Este erro só acontece quando testa online?

Testa o mesmo em localhost.

 

Se precisar, faça um novo teste para fazer a autenticação pelo gmail( afim de testes só)

Se funcionar com a autenticação segura do gmail, o problema pode estar no seu host..  na parte de e-mails.

Link para o comentário
Compartilhar em outros sites

@DiF  bom dia!

 

Depois de muito fuçar consegui resolver a questão, estou recebendo o email mas tem um porém.... após clicar no botão enviar aparece o seguinte, como resolvo isso???

 

2016-12-14 12:45:34 Invalid address: (addAnAddress Reply-To): 2016-12-14 12:45:34 CLIENT -> SERVER: EHLO www.americanone.com.br 2016-12-14 12:45:34 CLIENT -> SERVER: STARTTLS 2016-12-14 12:45:34 CLIENT -> SERVER: EHLO www.americanone.com.br 2016-12-14 12:45:35 CLIENT -> SERVER: AUTH LOGIN 2016-12-14 12:45:35 CLIENT -> SERVER: Y29udGF0b0BhbWVyaWNhbm9uZS5jb20uYnI= 2016-12-14 12:45:35 CLIENT -> SERVER: Y250LUFPbmU= 2016-12-14 12:45:35 CLIENT -> SERVER: MAIL FROM: 2016-12-14 12:45:35 CLIENT -> SERVER: RCPT TO: 2016-12-14 12:45:35 CLIENT -> SERVER: DATA 2016-12-14 12:45:35 CLIENT -> SERVER: Date: Wed, 14 Dec 2016 10:45:34 -0200 2016-12-14 12:45:35 CLIENT -> SERVER: To: [email protected] 2016-12-14 12:45:35 CLIENT -> SERVER: From: American One Idiomas 2016-12-14 12:45:35 CLIENT -> SERVER: Subject: 2016-12-14 12:45:35 CLIENT -> SERVER: Message-ID: <[email protected]> 2016-12-14 12:45:35 CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.17 (https://github.com/PHPMailer/PHPMailer) 2016-12-14 12:45:35 CLIENT -> SERVER: MIME-Version: 1.0 2016-12-14 12:45:35 CLIENT -> SERVER: Content-Type: text/html; charset=iso-8859-1 2016-12-14 12:45:35 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit 2016-12-14 12:45:35 CLIENT -> SERVER: 2016-12-14 12:45:35 CLIENT -> SERVER: Nome = Copiersul 
2016-12-14 12:45:35 CLIENT -> SERVER: Email = [email protected] 
2016-12-14 12:45:35 CLIENT -> SERVER: Telefone = 5430552777 
2016-12-14 12:45:35 CLIENT -> SERVER: Mensagem = Teste de validação! Recebe email de envio. 
2016-12-14 12:45:35 CLIENT -> SERVER: 2016-12-14 12:45:35 CLIENT -> SERVER: . 2016-12-14 12:45:35 CLIENT -> SERVER: QUIT Sua mensagem foi enviada, obrigado!

Link para o comentário
Compartilhar em outros sites

<?php
require 'phpmailer/PHPMailerAutoload.php';

$mail = new PHPMailer;

$unidade = $_POST["unidade"];
$nome = $_POST["nome"];
$email = $_POST["email"];
$telefone = $_POST["telefone"];
$mensagem = $_POST["mensagem"];

$body = "Nome = $nome <br/> 
         Email = $email <br/> 
         Telefone = $telefone <br/> 
         Mensagem = $mensagem <br/>";

$mail->IsSMTP();
$mail->isHTML(true); 
$mail->SMTPDebug = 1;

$mail->Host = "pop.americanone.com.br";
$mail->Port = '587';

$mail->SMTPAuth = true;
$mail->Username = "[email protected]";
$mail->Password = "xxxxxx";

$mail->setFrom ('[email protected]',' American One Idiomas');
$mail->addReplyTo ('');//esta linha só é requerida se você quer enviar uma resposta ao usuário.
$mail->addAddress ($unidade);

$mail->Subject = 'Mensagem de contato via site American One Idiomas';
$mail->Body = $body;

$send = $mail->Send();
	if($send){
		echo 'Sua mensagem foi enviada, obrigado!';
	}
	else{
		echo 'Erro: ' . $mail->ErrorInfo;
	}

?>

 

Link para o comentário
Compartilhar em outros sites

@DiF

 

No PHP alterei o seguinte:

 

Entrei em contato com a Locaweb e haviam trocado o host de smtp.americanone.com.br para pop....

$mail->Host = "pop.americanone.com.br";

este trecho estava desta forma:

$mail->setFrom = ('[email protected]',' American One Idiomas');
$mail->addReplyTo = ('');//esta linha só é requerida se você quer enviar uma resposta ao usuário.
$mail->addAddress = ($unidade);

agora ficou assim:

$mail->setFrom ('[email protected]',' American One Idiomas');
$mail->addReplyTo ('');//esta linha só é requerida se você quer enviar uma resposta ao usuário.
$mail->addAddress ($unidade);

 

No Html estava desta forma:

			<input type="hidden" name="unidades" id="unidades" value="" />
			<label for="destinatarios"></label>
			<select name="destinatarios" id="destinatarios">
			<option value=""> --UNIDADES-- </option>

agora ficou assim:

			<input type="hidden" name="unidade" id="unidade" value="" />
			<label for="form_id"></label>
			<select name="unidade" id="unidade">
			<option value="unidade"> --UNIDADES-- </option>

e retirei a linha:

$mail->SMTPDebug = 1;

Está funcionando legal! :thumbsup:

Obrigada meeeesmo!!!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...