Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Salve galera!!! trago uma dúvida aqui que está me tirando os cabelos...
-Logica do que estou fazendo: Simplesmente envio de orçamento para mais de um email usando o phpmailer, e o que tenho é uma caixa onde o cliente pode informar até três emails para qual ele pode enviar, desta forma:
box 1:
[select list c todos os emails cadastrados] - // aqui ele pode escolher um email que já foi cadastrado
box 2:
[input type] // aqui ele pode digitar um outro email qualquer.
box 3:
[input type] // aqui é mais um campo adicional caso ele queira enviar para um outro destinatario com cópia.
o codigo phpmailer está enviando direitinho, porém ele só envia se eu preencher os tres box, porem quero ter a opção de preencher só o box 2, ou selecionar um email cadastrado no box 1, ou mesmo prencher box 2 e 3... entendido a logica? vamos ao codigo que estou usando:
****formulario:***
<form>
<label> Emails cadastrados </label>
<select name="destinatarios[]" id="destinatarios[]">
<option value=""> --SELECIONE-- </option>
<option value="fulano@gmail.com">Fulano da Silva</option>
<option value="beltrano@hotmail.com">Beltrano Oliveira</option>
</select>
<label>Outro e-Mail:</label>
<input name="destinatarios[]" type="text"/>
<label>Com cópia para:</label>
<input name="destinatarios[]" type="text"/>
</form>
****phpmailer:***
//Destinatario(s)
$destinatarios = $_POST['destinatarios'];
/Laço do array (envio para varios)/
foreach(array($destinatarios) as $info1){
for($i = 0; $i < count($info1); $i++){
....codigos padroes do php mailer,....
//aqui é q o bixo pega, pq ele nao envia caso nao prencha os tres box acima do form, porém se eu preencher os tres box ele envia para todos certinho;
//Destinatarios / Respostas
$mail->AddAddress("$info1[$i]","Para"); //E-mail e nome do destinatario
$mail->AddReplyTo("$info1[$i]","E-mail para resposta"); // E-mail e nome do remetente (e-mail de resposta)
....codigos padroes do php mailer,....
}//fim da repetição
Agradeço as luzes que forem dada! abraços!
Eentendi, fiz bem assim mais nao executou, deu erro:
//Destinatario(s)
$destinatario = $_POST['destinatarios'];
//Loop dos destinatários
$destinatario = array();
foreach($destinatario as $dest){
//envio
//Destinatarios / Respostas
$mail->AddAddress($dest, "Para"); //E-mail e nome do destinatario
$mail->AddReplyTo($dest, "E-mail para resposta"); // E-mail e nome do remetente (e-mail de resposta)
tentei com aspas tbm mais nao rolou
//Destinatarios / Respostas
$mail->AddAddress("$dest", "Para"); //E-mail e nome do destinatario
$mail->AddReplyTo("$dest", "E-mail para resposta"); // E-mail e nome do remetente (e-mail de resposta)
<?php
//Destinatario(s)
$destinatario = $_POST['destinatarios'];
//Loop dos destinatários
$mail = new PHPMailer;
$mail->IsSMTP();foreach($destinatario as $dest){
$mail->AddAddress($dest); //E-mail e nome do destinatario
}
//envio
//Destinatarios / Respostas
$mail->SetFrom('email@remetente.com.br','nome remetente');
$mail->Subject = 'Assunto';
$mail->Body = 'Mensagem';
$mail->Send();
?>
Editei o código, adapte o que fiz a sua necessidade.
fiz deu certo o envio do array, porém o problema persiste ele só envia se eu preencher todos os campos do form, pq no form tenho tres campos que é justamente o array;
box 1 - select - destinatarios[]
box 2 - input - destinatarios[]
box 3 - input - destinatarios[]
ele só envia se eu enviar para todos, tentei fazer assim pra ver se ele pega só os preenchidos mais deu no mesmo, nao sei se falta algo no codigo;
$destinatario = !empty($_POST['destinatarios']) ? $_POST['destinatarios'] : array();
foreach($destinatario as $dest => $ativo) { //foreach só percorre as taxas que o usuário clicou.
$dest = $_POST['destinatarios'][$dest];
//Destinatarios / Respostas
$mail->AddAddress($dest); //E-mail e nome do destinatario
}
Poste todo o código , inclusive o formulário.
beleza vamos lá:
FORMULARIO:
<form id="form1" name="form1" method="post" action="../phpmailer/mailer_envia_orcamento.php">
<div style="margin-bottom:10px; margin-top:10px;">
<label>e-Mails cadastrados
<input type="hidden" name="id_orcamento" id="id_orcamento" value="<?php echo $row_orcamento_setado['id_orcamento']; ?>" />
</label>
<label for="destinatarios[]"></label>
<select name="destinatarios[]" id="destinatarios[]">
<option value=""> --SELECIONE-- </option>
<option value="marcos_gean@hotmail.com">Marcos Geam</option>
<option value="sac@corpodourado.com">Sac</option>
</select>
</div>
<div style="margin-bottom:10px;">
<label>Outro e-Mail:</label>
<input name="destinatarios[]" type="text" class="span6" id="destinatarios[]" placeholder="e-Mail Principal" style="width:95%;"/>
</div>
<div style="margin-bottom:10px;">
<label>Com cópia para:</label>
<input name="destinatarios[]" type="text" class="span6" id="destinatarios[]" placeholder="*e-Mail Cópia" style="width:95%;"/>
</div>
</form>
CODIGO:
<?
###############################
#
//Conexao
require_once('../Connections/conn_manual.php');
// Define o caminho da classe
include("phpmailer/class.phpmailer.php");
/* ENVIO DO EMAIL *****
*********************/
//Remetentes
$email_loja = "sac@meusite.com.br";
$nomeusuario = "Orçamento";
$assunto_email = utf8_decode("Cotação: 1222");
//Corpo da Mensagem
$HTMLBody = 'Aqui tem um extenso html, que cortei para nao encher demais o post...';
$mail = new PHPMailer();$mail->From = $email_loja; // Remetente
$mail->FromName = utf8_decode($nomeusuario); // Nome do remetente
/AQUI É ONDE ESTÁ O BORÓGODÓ/
//Destinatarios / Respostas
$destinatario = !empty($_POST['destinatarios']) ? $_POST['destinatarios'] : array();
foreach($destinatario as $dest => $ativo) { //foreach só percorre as taxas que o usuário clicou.
$envia = $_POST['destinatarios'][$dest];
$mail->AddAddress($envia); //E-mail e nome do destinatario
}
/*
$mail->AddAddress("$dest", "Para"); //E-mail e nome do destinatario
$mail->AddReplyTo("$dest", "E-mail para resposta"); // E-mail e nome do remetente (e-mail de resposta)*/
/*Envia cópia para administrador
$mail->AddCC("$email_loja","Cc"); // E-mail e nome do destinatario (copia carbono)*/
/*Copia Oculta
$mail->AddBCC("email@teste.com.br","Cco"); // E-mail e nome do destinario (copia carbono oculta)*/
$mail->WordWrap = 50; // Definir quebra de linha
$mail->AddAttachment("anexo/argohost.zip"); // Anexo01
$mail->AddAttachment("imagem/argohost.jpg"); // Anexo 02
$mail->IsHTML(true); // Envia como HTML
$mail->Subject = $assunto_email; // Assunto
$mail->From = $email_loja; //Identificar usuário na caixa de entrada
$mail->Body .= utf8_decode($HTMLBody);
if(!$mail->Send()) // Envia a mensagem
{
echo "A mensagem não pode ser enviada"; // Mensagem de erro
echo "Erro: " . $mail->ErrorInfo;
exit;
}
echo "Mensagem enviada com sucesso para todos os destinatarios!<br>"; // Mensagem de sucesso
//Atraso para novo envio.
sleep(10);
?>tente assim e não altere nada:
<?
//Conexao
require_once('../Connections/conn_manual.php');
// Define o caminho da classe
include("phpmailer/class.phpmailer.php");
if(isset($_POST['destinatarios'])):
//Remetentes
$email_loja = "sac@meusite.com.br";
$nomeusuario = "Orçamento";
$assunto_email = utf8_decode("Cotação: 1222");
//Corpo da Mensagem
$HTMLBody = 'Aqui tem um extenso html, que cortei para nao encher demais o post...';
$mail = new PHPMailer();
$mail->IsSMTP(); // mandar via SMTP
$mail->Host = "mail.locaben.com.br"; // Seu servidor SMTP
$mail->SMTPAuth = true; // Habilita a autenticação via SMTP
$mail->Charset = 'UTF-8'; // codificação UTF-8, a codificação mais usada recentemente
$mail->Username = "locabenc"; // usuário deste servidor SMTP
$mail->Password = "C6etM4t0YCu6"; // senha deste servidor SMTP
$mail->From = $email_loja; // Remetente
$mail->FromName = utf8_decode($nomeusuario); // Nome do remetente
/*AQUI É ONDE ESTÁ O BORÓGODÓ*/
//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
}
/*
$mail->AddAddress("$dest", "Para"); //E-mail e nome do destinatario
$mail->AddReplyTo("$dest", "E-mail para resposta"); // E-mail e nome do remetente (e-mail de resposta)*/
/*Envia cópia para administrador
$mail->AddCC("$email_loja","Cc"); // E-mail e nome do destinatario (copia carbono)*/
/*Copia Oculta
$mail->AddBCC("email@teste.com.br","Cco"); // E-mail e nome do destinario (copia carbono oculta)*/
$mail->WordWrap = 50; // Definir quebra de linha
$mail->AddAttachment("anexo/argohost.zip"); // Anexo01
$mail->AddAttachment("imagem/argohost.jpg"); // Anexo 02
$mail->IsHTML(true); // Envia como HTML
$mail->Subject = $assunto_email; // Assunto
$mail->From = $email_loja; //Identificar usuário na caixa de entrada
$mail->Body .= utf8_decode($HTMLBody);
if(!$mail->Send()) // Envia a mensagem
{
echo "A mensagem não pode ser enviada"; // Mensagem de erro
echo "Erro: " . $mail->ErrorInfo;
exit;
}
echo "Mensagem enviada com sucesso para todos os destinatarios!<br>"; // Mensagem de sucesso
//Atraso para novo envio.
sleep(10);
endif;
?>EURECA!!!
mau rs exatamente isto! parabéns!!! RESOLVIDO!
só uma correção no ultimo codigo q vc postou é q faltou uma chave bem aqui:
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
}
}-->//chave que faltava
MUITO OBRIGADO VC ME DEU A SOLUÇÃO ABRAÇÃO!
Acontece as vezes um esquecimento básico. kkk Abraço.
e na função faz um foreach:
Entendeu a idéia?