Bucle PHP (send mail)

Iniciado por rogamer, 19 Diciembre 2013, 14:14 PM

0 Miembros y 2 Visitantes están viendo este tema.

rogamer

Hola muy buenas, os comento necesito ayuda por que he creado una pagina para enviar correos utilizando PHPMailer y el editor CKEDITOR

Pues bien, cuando envió el correo a un destinatario llega un único correo pero cuando pongo dos:
Al  primero llega 2 correos y a la segundo 1
Cuando pongo 3 destinatarios:
Al primero le llega 3 correos al segundo 2 y al tercero 1

Y así sucesivamente, la verdad es que me estoy volviendo un tanto loco, el código es el siguiente:


<head>
<meta charset="utf-8">
<script src="ckeditor.js"></script>
<link href="sample.css" rel="stylesheet">
   <?php
header
('Content-Type: text/html; charset=UTF-8'); 
?>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<?php
error_reporting
("E_NOTICE");
$resultado "";
if (isset(
$_POST["destinatarios"]))
{
$destinatarios $_POST["destinatarios"];
$destinatarios explode(", "$destinatarios);
$email $_POST["email"];
$mensaje $_POST["mensaje"];
$adjunto $_FILES["adjunto"];
require(
"class.phpmailer.php");
include(
"class.smtp.php");
$mail = new PHPMailer();
foreach(
$destinatarios as $destinatario)
{
$mailer = new PHPMailer();
$mailer->IsSMTP();
$mailer->Host 'servidor.smtp';
$mailer->SMTPAuth TRUE;
$mailer->Username 'usuario.smtp';
$mailer->Password 'Contraseña SMTP';
$mail->FromName "Nombre"//Nombre del remitente
$mail->From "Correo"// Correo del remitente (Para mostrar)
$mail->Subject "Asunto"//Asunto del email
$mail->AddAddress(trim($destinatario)); //Destinatario
$mail->IsHTML(true); // El correo se envía como HTML
$mail->MsgHTML($mensaje); //Mensaje en HTML
//Si el archivo es de tamaño mayor que 0
if ($adjunto["size"] > 0)
{
$mail->AddAttachment($adjunto["tmp_name"], $adjunto["name"]);//adjuntar un archivo al mensaje
}
if(
$mail->Send())
{
$resultado .= "Enhorabuena el mensaje ha sido enviado con éxito a $destinatario
"
;
}

else
{
$resultado .= "Lo siento ha habido un error al enviar el mensaje a $destinatario
"
;
}
}
}
?>

<h3>Envio Newsletter</h3>
<form method="post" action="<?php $_SERVER["PHP_SELF"]; ?>" enctype="multipart/form-data" accept-charset="ISO-8859-1">
<table border="0">
<tr>
<td>Archivo:</td>
<td><input type="file" name="adjunto"></td>
</tr>
<tr>
<td>Destinatarios:</td>
<td><input type="text" name="destinatarios" size="100"><br />*Introduzca todos los destinatarios separados por una <strong>coma</strong>, ejemplo: primer-email@correo.com<strong>,</strong> segundo-email@correo.com</td><br />
</tr>
<tr>
<td>Mensaje:</td>
<td><textarea cols="80" id="editor1" name="mensaje" rows="10" lang="es" >
</textarea></td>

<script>

// This call can be placed at any point after the
// <textarea>, or inside a <head><script> in a
// window.onload event handler.

// Replace the <textarea id="editor"> with an CKEditor
// instance, using default configurations.

CKEDITOR.replace( 'editor1' );

</script>
<tr>
<tr>
<td></td><td><input type="submit" value="Enviar"></td>
</tr>
</table>
<b><?php echo $resultado?></b>
</form>
</body>



Os lo agradezco por adelantado, no encuentro ninguna solución.

#!drvy

#1
No hagas el bucle..PHPMailer y mail() ya saben diferenciar múltiples destinatarios cuando son indicados con coma.. osease el bucle ahí es totalmente inútil.

En PHPMailer para añadir multipes destinatarios hay que llamar AddAddress

Código (php) [Seleccionar]
$mail->AddAddress(destino);


Saludos

rogamer

#2
Cita de: @drvy en 19 Diciembre 2013, 14:49 PM
No hagas el bucle..PHPMailer y mail() ya saben diferenciar múltiples destinatarios cuando son indicados con coma.. osease el bucle ahí es totalmente inútil.

En PHPMailer para añadir multipes destinatarios hay que llamar AddAddress

Código (php) [Seleccionar]
$mail->AddAddress(destino);


Saludos
Entonces he de quitar lo relacionado con $destinatarios ¿no? pero si lo quito afecta al formulario que no?

Código (php) [Seleccionar]
$mail->AddAddress(destino); se encuentra en el codigo que he puesto pero desconocia que si lo separas por comas el ya realiza el resto

#!drvy

No lo de que lo reconozca no es cierto.. pense que seria tan listo como para hacerlo ya que la funcion nativa de php (mail) si lo hace pero bueno..

En fin que el codigo quedaria mas o menos asi:
Código (php,23,24,25) [Seleccionar]
error_reporting("E_NOTICE");
$resultado = "";
if (isset($_POST["destinatarios"]))
{
$destinatarios = $_POST["destinatarios"];
$destinatarios = explode(", ", $destinatarios);
$email = $_POST["email"];
$mensaje = $_POST["mensaje"];
$adjunto = $_FILES["adjunto"];
require("class.phpmailer.php");
include("class.smtp.php");
$mail = new PHPMailer();

$mailer = new PHPMailer();
$mailer->IsSMTP();
$mailer->Host = 'servidor.smtp';
$mailer->SMTPAuth = TRUE;
$mailer->Username = 'usuario.smtp';
$mailer->Password = 'Contraseña SMTP';
$mail->FromName = "Nombre"; //Nombre del remitente
$mail->From = "Correo"; // Correo del remitente (Para mostrar)
$mail->Subject = "Asunto"; //Asunto del email
foreach($destinatarios as $destinatario){
   $mail->AddAddress(trim($destinatario)); //Destinatario
}
$mail->IsHTML(true); // El correo se envía como HTML
$mail->MsgHTML($mensaje); //Mensaje en HTML
//Si el archivo es de tamaño mayor que 0
if ($adjunto["size"] > 0)
{
$mail->AddAttachment($adjunto["tmp_name"], $adjunto["name"]);//adjuntar un archivo al mensaje
}
if($mail->Send())
{
$resultado .= "Enhorabuena el mensaje ha sido enviado con éxito a $destinatario
";
}

else
{
$resultado .= "Lo siento ha habido un error al enviar el mensaje a $destinatario
";
}
}
}


Saludos

rogamer

#4
Perfecto funcionando, graciass.

Solo tengo una duda mas, si quiero que el AddAddress sea oculto lo sustituyo por el addBCC y listo no?

Kami

Creo recordar que si usas el AddAddress sale a todos los destinatarios que se han enviado ¿No?

Y esto puede ser tomado por SPAM, incluso puede ser ilegal por la LOPD.

#!drvy

CitarSolo tengo una duda mas, si quiero que el AddAddress sea oculto lo sustituyo por el addBCC y listo no?

Exacto.

CitarY esto puede ser tomado por SPAM, incluso puede ser ilegal por la LOPD.

Depende de que uso le vas a dar. Por ejemplo yo estoy en muchos grupos donde se envían directamente sin BBC.. pero como son grupos privados no hay problema. En fin, todo se reduce al uso que se le va a dar.

Saludos

rogamer

El uso que se le dará sera envió de boletines (publicidad), a nivel legal esta prohibido que se vea las direcciones debido a la LOPD por eso quería asegurarme, no quiero tener problemas.