Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: rogamer en 19 Diciembre 2013, 14:14 pm



Título: Bucle PHP (send mail)
Publicado por: rogamer en 19 Diciembre 2013, 14:14 pm
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:

Código:
<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.


Título: Re: Bucle PHP (send mail)
Publicado por: #!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
  1. $mail->AddAddress(destino);


Saludos


Título: Re: Bucle PHP (send mail)
Publicado por: rogamer en 19 Diciembre 2013, 14:58 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
  1. $mail->AddAddress(destino);


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

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


Título: Re: Bucle PHP (send mail)
Publicado por: #!drvy en 19 Diciembre 2013, 15:08 pm
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
  1. error_reporting("E_NOTICE");
  2. $resultado = "";
  3. if (isset($_POST["destinatarios"]))
  4. {
  5. $destinatarios = $_POST["destinatarios"];
  6. $destinatarios = explode(", ", $destinatarios);
  7. $email = $_POST["email"];
  8. $mensaje = $_POST["mensaje"];
  9. $adjunto = $_FILES["adjunto"];
  10. require("class.phpmailer.php");
  11. include("class.smtp.php");
  12. $mail = new PHPMailer();
  13.  
  14. $mailer = new PHPMailer();
  15. $mailer->IsSMTP();
  16. $mailer->Host = 'servidor.smtp';
  17. $mailer->SMTPAuth = TRUE;
  18. $mailer->Username = 'usuario.smtp';
  19. $mailer->Password = 'Contraseña SMTP';
  20. $mail->FromName = "Nombre"; //Nombre del remitente
  21. $mail->From = "Correo"; // Correo del remitente (Para mostrar)
  22. $mail->Subject = "Asunto"; //Asunto del email
  23. foreach($destinatarios as $destinatario){
  24.   $mail->AddAddress(trim($destinatario)); //Destinatario
  25. }
  26. $mail->IsHTML(true); // El correo se envía como HTML
  27. $mail->MsgHTML($mensaje); //Mensaje en HTML
  28. //Si el archivo es de tamaño mayor que 0
  29. if ($adjunto["size"] > 0)
  30. {
  31. $mail->AddAttachment($adjunto["tmp_name"], $adjunto["name"]);//adjuntar un archivo al mensaje
  32. }
  33. if($mail->Send())
  34. {
  35. $resultado .= "Enhorabuena el mensaje ha sido enviado con éxito a $destinatario
  36. ";
  37. }
  38.  
  39. else
  40. {
  41. $resultado .= "Lo siento ha habido un error al enviar el mensaje a $destinatario
  42. ";
  43. }
  44. }
  45. }

Saludos


Título: Re: Bucle PHP (send mail)
Publicado por: rogamer en 19 Diciembre 2013, 15:20 pm
Perfecto funcionando, graciass.

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


Título: Re: Bucle PHP (send mail)
Publicado por: Kami en 19 Diciembre 2013, 20:19 pm
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.


Título: Re: Bucle PHP (send mail)
Publicado por: #!drvy en 19 Diciembre 2013, 20:28 pm
Citar
Solo tengo una duda mas, si quiero que el AddAddress sea oculto lo sustituyo por el addBCC y listo no?

Exacto.

Citar
Y 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


Título: Re: Bucle PHP (send mail)
Publicado por: rogamer en 21 Diciembre 2013, 11:31 am
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.