Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Envio masivo boletines con phpmailer smtp gmail

Estas en el tema de Envio masivo boletines con phpmailer smtp gmail en el foro de PHP en Foros del Web. Estoy intentando enviar correos con boletines a suscriptores con phpmailer y el smtp de gmail y me gustaría que me dierais vuestra opinión por si ...
  #1 (permalink)  
Antiguo 05/03/2015, 15:48
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Envio masivo boletines con phpmailer smtp gmail

Estoy intentando enviar correos con boletines a suscriptores con phpmailer y el smtp de gmail y me gustaría que me dierais vuestra opinión por si algo está mal.
El sistema es para tres idiomas


Dos tablas: 1) tbl_boletines y 2) tbl_suscripciones
Existe formulario previo que si es necesario lo puedo poner pero creo se sobreentiende.



<?php
// Conexion
require_once('../Connections/conex_db_teldetv.php');

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

// Viene del formulario - Idioma Boletin: 1 Español, 2 English, 3 Deutsch
$varIdiomaBoletin = "0";
if (isset($_GET["idioma"])) {
$varIdiomaBoletin = $_GET["idioma"];
}
$varNombreBoletin = "0";
if (isset($_GET["nombre_boletin"])) {
$varNombreBoletin = $_GET["nombre_boletin"];
}
// Viene del formulario - Idioma Suscripcion: 1 Español, 2 English, 3 Deutsch
$varIdiomaSuscripcion = "0";
if (isset($_GET["idioma_suscripcion"])) {
$varIdiomaSuscripcion = $_GET["idioma_suscripcion"];
}
// Viene del formulario - $varEnviarSuscripcion = 1 - Enviar
$varEnviarSuscripcion = "0";
if (isset($_GET["enviar_suscripcion"])) {
$varEnviarSuscripcion = $_GET["enviar_suscripcion"];
}

mysql_select_db($database_conex_db_teldetv, $conex_db_teldetv);
$query_ConsultaBoletines = "SELECT * FROM tbl_boletin WHERE tbl_boletin.idioma = '%".$varIdiomaBoletin."%' AND tbl_boletin.idioma = '%".$varNombreBoletin."%'";
$ConsultaBoletines = mysql_query($query_ConsultaBoletines, $conex_db_teldetv) or die(mysql_error());
$row_ConsultaBoletines = mysql_fetch_assoc($ConsultaBoletines);
$totalRows_ConsultaBoletines = mysql_num_rows($ConsultaBoletines);

mysql_select_db($database_conex_db_teldetv, $conex_db_teldetv);
$query_ConsultaSuscripciones = "SELECT * FROM tbl_suscripciones WHERE tbl_suscripciones.idioma_suscripcion = '%".$varIdiomaSuscripcion."%' AND tbl_suscripciones.enviar_suscripcion = '%".$varEnviarSuscripcion."%'";
$ConsultaSuscripciones = mysql_query($query_ConsultaSuscripciones, $conex_db_teldetv) or die(mysql_error());
$row_ConsultaSuscripciones = mysql_fetch_assoc($ConsultaSuscripciones);
$totalRows_ConsultaSuscripciones = mysql_num_rows($ConsultaSuscripciones);

while ($array_ConsultaSuscripciones = mysql_fetch_array($ConsultaSuscripciones))
{
// Adquirimos las variables
$dia=date('d-m-Y');
$hora=date('H:i:s');
$nombre = $array_ConsultaSuscripciones['nombre_suscripcion'];
$email = $array_ConsultaSuscripciones['email_suscripcion'];
$asunto = 'BOLETIN DE MIWEB';

// Idioma Boletin: 1 Español, 2 English, 3 Deutsch
if ($row_ConsultaBoletines['idioma'] = 1):
$body = 'Estimado: $nombre, este boletín ha sido enviado el: $dia a las: $hora horas.<br /><br />'.$row_ConsultaBoletines['codigo_boletin'];
elseif ($row_ConsultaBoletines['idioma'] = 2):
$body = 'Dear: $nombre, this newsletter has been sent: $dia at: $hora hours.<br /><br />'.$row_ConsultaBoletines['codigo_boletin_in'];
elseif ($row_ConsultaBoletines['idioma'] = 3):
$body = 'Liebe: $nombre, dieser Newsletter wurde gesendet: $dia um: $hora Uhr.<br /><br />'.$row_ConsultaBoletines['codigo_boletin_al'];
endif;
/*--------------------------------------------------------------------------------------------*/
require_once('../includes/PHPMailer/class.phpmailer.php');
include('../includes/PHPMailer/class.smtp.php');
/*------------------------------------------------------------------------------------------*/
$mail = new PHPMailer();
$mail->setLanguage('es');
/*------------------------------------------------------------------------------------------*/
$mail->From = '[email protected]';
$mail->FromName = 'Nombredelqueenvia';
$mail->addReplyTo('[email protected]', 'Nombredelqueenvia');
/*------------------------------------------------------------------------------------------*/
$host = 'smtp.gmail.com';
$username = '[email protected]';
$password = 'mipass';
$port = 587;
$secure = 'tls';
/*------------------------------------------------------------------------------------------*/
$mail->isSMTP();
$mail->Host = $host;
$mail->SMTPAuth = true;
$mail->Username = $username;
$mail->Password = $password;
$mail->Port = $port;
$mail->SMTPSecure = $secure;
/*------------------------------------------------------------------------------------------*/
$mail->addAddress($email, $nombre);
/*------------------------------------------------------------------------------------------*/
$mail->isHTML(true);
$mail->CharSet = 'utf-8';
$mail->setWordWrap = 70;
/*------------------------------------------------------------------------------------------*/
$mail->Subject = $asunto;
$mail->Body = $body;
//$mail->MsgHTML($body);
$mail->AltBody = $body;
/*------------------------------------------------------------------------------------------*/
if($mail->Send()) {
?>
<div class="message success">
<h5><strong>¡¡ LOS BOLETINES SE HAN ENVIADO CORRECTAMENTE !!</strong><br /></h5>
</div>
<?php
} else {
?>
<div class="message error">
<h5><strong>¡¡ LOS BOLETINES NO SE HAN ENVIADO CORRECTAMENTE !!</strong></h5>
</div>
<?php
}
}
mysql_free_result($ConsultaBoletines);
mysql_free_result($ConsultaSuscripciones);
?>

Muchas gracias de antemano: Manyblue

Última edición por manyblue; 05/03/2015 a las 15:54
  #2 (permalink)  
Antiguo 05/03/2015, 16:38
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Envio masivo boletines con phpmailer smtp gmail

y cual es el problema ??
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 06/03/2015, 01:15
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Envio masivo boletines con phpmailer smtp gmail

Tengo mis dudas en la parte del While {} y no se si el el corchete de cierra debe ir al final del todo o antes
  #4 (permalink)  
Antiguo 06/03/2015, 02:34
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Envio masivo boletines con phpmailer smtp gmail

Tengo un formulario de contacto que si me lo envía con phpmailer y gmail y está OK.
He probado este y no me envía nada y además no aparece ni se envio correctamente no no se envio correctamente.
Ya sabia yo que algo esta mal por eso era mi pregunta.
Se que con el smtp de gmail no puedo enviar mas de 100 o 500 correos diarios.
Alguna sugerencia ??
Saludos
  #5 (permalink)  
Antiguo 06/03/2015, 04:09
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Envio masivo boletines con phpmailer smtp gmail

tema trasladado a:
http://www.forosdelweb.com/f18/probl...buntu-1121663/
  #6 (permalink)  
Antiguo 07/03/2015, 16:19
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Envio masivo boletines con phpmailer smtp gmail

Me he equivocado y pase este post a otro que tenia por lo que pido mil disculpas y vuelvo a abrir este tema.
Ya me envía los boletines pero solo al último suscriptor de la base de datos ??
Codigo:
Código PHP:
<?php
// Viene del formulario - Idioma Boletin: 1 Español, 2 English, 3 Deutsch
$varIdiomaBoletin "0";
if (isset(
$_GET["idioma"])) {
  
$varIdiomaBoletin $_GET["idioma"];
}
$varNombreBoletin "0";
if (isset(
$_GET["nombre_boletin"])) {
  
$varNombreBoletin $_GET["nombre_boletin"];
}
// Viene del formulario - Idioma Suscripcion: 1 Español, 2 English, 3 Deutsch
$varIdiomaSuscripcion "0";
if (isset(
$_GET["idioma_suscripcion"])) {
  
$varIdiomaSuscripcion $_GET["idioma_suscripcion"];
}
// Viene del formulario - $varEnviarSuscripcion = 1 - Enviar
$varEnviarSuscripcion "0";
if (isset(
$_GET["enviar_suscripcion"])) {
  
$varEnviarSuscripcion $_GET["enviar_suscripcion"];
}

mysql_select_db($database_conex_db_teldetv$conex_db_teldetv);
$query_ConsultaBoletines "SELECT * FROM tbl_boletin WHERE tbl_boletin.idioma LIKE '%".$varIdiomaBoletin."%' AND tbl_boletin.idioma LIKE '%".$varNombreBoletin."%'";
$ConsultaBoletines mysql_query($query_ConsultaBoletines$conex_db_teldetv) or die(mysql_error());
$row_ConsultaBoletines mysql_fetch_assoc($ConsultaBoletines);

mysql_select_db($database_conex_db_teldetv$conex_db_teldetv);
$query_ConsultaSuscripciones "SELECT * FROM tbl_suscripciones WHERE tbl_suscripciones.idioma_suscripcion LIKE '%".$varIdiomaSuscripcion."%' AND tbl_suscripciones.enviar_suscripcion LIKE '%".$varEnviarSuscripcion."%'";
$ConsultaSuscripciones mysql_query($query_ConsultaSuscripciones$conex_db_teldetv) or die(mysql_error());
$row_ConsultaSuscripciones mysql_fetch_assoc($ConsultaSuscripciones);

while (
$rowArraySuscripciones mysql_fetch_array($ConsultaSuscripciones)) {

// Adquirimos las variables
$dia=date("d-m-Y");
$hora=date("H:i:s");
$asunto 'BOLETIN DE MI WEB';
// Idioma Boletin: 1 Español, 2 English, 3 Deutsch
if ($row_ConsultaBoletines['idioma'] = 1):
$body "Estimado: $nombre, este boletín ha sido enviado el: $dia a las: $hora horas.<br /><br />".$row_ConsultaBoletines['codigo_boletin'];
elseif (
$row_ConsultaBoletines['idioma'] = 2):
$body "Dear: $nombre, this newsletter has been sent: $dia at: $hora hours.<br /><br />".$row_ConsultaBoletines['codigo_boletin_in'];
elseif (
$row_ConsultaBoletines['idioma'] = 3):
$body "Liebe: $nombre, dieser Newsletter wurde gesendet: $dia um: $hora Uhr.<br /><br />".$row_ConsultaBoletines['codigo_boletin_al'];
endif;
/*--------------------------------------------------------------------------------------------*/
require_once('../includes/PHPMailer/class.phpmailer.php'); 
include(
'../includes/PHPMailer/class.smtp.php');
/*------------------------------------------------------------------------------------------*/
$mail = new PHPMailer();
$mail->setLanguage('es');
/*------------------------------------------------------------------------------------------*/
$mail->From "[email protected]";
$mail->FromName "Nombredelqueenvia";
$mail->addReplyTo('[email protected]''Nombredelqueenvia');
/*------------------------------------------------------------------------------------------*/
$host 'smtp.gmail.com';
$username '[email protected]';
$password 'mipassgmail';
$port 587;
$secure 'tls';
/*------------------------------------------------------------------------------------------*/
$mail->isSMTP();
$mail->Host $host;
$mail->SMTPAuth true;
$mail->Username $username;
$mail->Password $password;
$mail->Port $port;
$mail->SMTPSecure $secure;
/*------------------------------------------------------------------------------------------*/
$mail->addAddress($rowArraySuscripciones['email_suscripcion'], $rowArraySuscripciones['nombre_suscripcion']);
/*------------------------------------------------------------------------------------------*/
$mail->isHTML(true);
$mail->CharSet 'utf-8';
$mail->setWordWrap 70;
/*------------------------------------------------------------------------------------------*/
$mail->Subject $asunto;
$mail->Body $body;
//$mail->MsgHTML($body);
$mail->AltBody $body;
/*------------------------------------------------------------------------------------------*/
if(!$mail->Send()) {
echo 
"Error al enviar a: " $rowArraySuscripciones["email_suscripcion"] . "<br>";
}
$mail->ClearAddresses();
}
mysql_free_result($ConsultaBoletines);
mysql_free_result($ConsultaSuscripciones);
?>
¿ Alguna sugerencia ?
Mucísimas gracias por vuestra atención y pido de nuevo mil disculpas por trasladar este tema o post.
Un saludo: Manyblue
  #7 (permalink)  
Antiguo 07/03/2015, 17:15
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Envio masivo boletines con phpmailer smtp gmail

Ya existen servicios que hacen esto que requieres investiga sobre ellos.
http://mailchimp.com/
https://mandrill.com/
http://www.mailgun.com/
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #8 (permalink)  
Antiguo 08/03/2015, 02:41
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Envio masivo boletines con phpmailer smtp gmail

Gracias por tu respuesta.
Ya lo se que existen servicios para ello.
Otro más:
https://www.phplist.com/
Pero estava haciendo pruebas y viendo diferentes sistemas hechos por mi (con mail() y phpmailer), así aprendo que es lo interesante.
Hubo un momento que si me mandaba los boletines a los dos suscriptores que tengo en la DB, pero ahora solo me los envia al último registro de gmail. Los dos suscriptores soy yo mismo con dos de mis emails de yahoo (1º) y gmail (2º).
Lo dicho, muchas gracias por tus respuestas.
Un saludo: Manyblue
  #9 (permalink)  
Antiguo 08/03/2015, 14:08
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Envio masivo boletines con phpmailer smtp gmail

Voy mejorando algo.
En la base de datos tengo tres suscriptores, yo mismo, con mis correos de yahoo, hotmail y gmail.
He conseguido que me envíe los boletines a mis correos de yahoo y hotmail pero no al de gmail, primero pongo el codigo y luego explico lo que creo me está pasandome.
Código:
Código PHP:
<?php
// Viene del formulario - Idioma Boletin: 1 Español, 2 English, 3 Deutsch
$varIdiomaBoletin "0";
if (isset(
$_GET["idioma"])) {
  
$varIdiomaBoletin $_GET["idioma"];
}
$varNombreBoletin "0";
if (isset(
$_GET["nombre_boletin"])) {
  
$varNombreBoletin $_GET["nombre_boletin"];
}
// Viene del formulario - Idioma Suscripcion: 1 Español, 2 English, 3 Deutsch
$varIdiomaSuscripcion "0";
if (isset(
$_GET["idioma_suscripcion"])) {
  
$varIdiomaSuscripcion $_GET["idioma_suscripcion"];
}
// Viene del formulario - $varEnviarSuscripcion = 1 - Enviar
$varEnviarSuscripcion "0";
if (isset(
$_GET["enviar_suscripcion"])) {
  
$varEnviarSuscripcion $_GET["enviar_suscripcion"];
}

mysql_select_db($database_conex_db_teldetv$conex_db_teldetv);
$query_ConsultaBoletines "SELECT * FROM tbl_boletin WHERE tbl_boletin.idioma LIKE '%".$varIdiomaBoletin."%' AND tbl_boletin.idioma LIKE '%".$varNombreBoletin."%'";
$ConsultaBoletines mysql_query($query_ConsultaBoletines$conex_db_teldetv) or die(mysql_error());
$row_ConsultaBoletines mysql_fetch_assoc($ConsultaBoletines);
$totalRows_ConsultaBoletines mysql_num_rows($ConsultaBoletines);

mysql_select_db($database_conex_db_teldetv$conex_db_teldetv);
$query_ConsultaSuscripciones "SELECT * FROM tbl_suscripciones WHERE tbl_suscripciones.idioma_suscripcion LIKE '%".$varIdiomaSuscripcion."%' AND tbl_suscripciones.enviar_suscripcion LIKE '%".$varEnviarSuscripcion."%'";
$ConsultaSuscripciones mysql_query($query_ConsultaSuscripciones$conex_db_teldetv) or die(mysql_error());
$row_ConsultaSuscripciones mysql_fetch_assoc($ConsultaSuscripciones);
$totalRows_ConsultaSuscripciones mysql_num_rows($ConsultaSuscripciones);

while (
$rowArray mysql_fetch_array($ConsultaSuscripciones)) {

// Adquirimos las variables
$dia=date("d-m-Y");
$hora=date("H:i:s");
$asunto $row_ConsultaBoletines['nombre_boletin'];
// Idioma Boletin: 1 Español, 2 English, 3 Deutsch
if ($row_ConsultaBoletines['idioma'] = 1):
$body "Este boletín ha sido enviado el: $dia a las: $hora horas.<br /><br />".$row_ConsultaBoletines['codigo_boletin'];
elseif (
$row_ConsultaBoletines['idioma'] = 2):
$body "This newsletter has been sent: $dia at: $hora hours.<br /><br />".$row_ConsultaBoletines['codigo_boletin_in'];
elseif (
$row_ConsultaBoletines['idioma'] = 3):
$body "Dieser Newsletter wurde gesendet: $dia um: $hora Uhr.<br /><br />".$row_ConsultaBoletines['codigo_boletin_al'];
endif;
/*--------------------------------------------------------------------------------------------*/
require_once('../includes/PHPMailer/class.phpmailer.php'); 
require_once(
'../includes/PHPMailer/class.smtp.php');
/*------------------------------------------------------------------------------------------*/
$mail = new PHPMailer();
$mail->setLanguage('es');
/*------------------------------------------------------------------------------------------*/
$mail->From "[email protected]";
$mail->FromName "Nombredelqueenvia";
$mail->addReplyTo('[email protected]''Nombredelqueenvia');
/*------------------------------------------------------------------------------------------*/
$host 'smtp.gmail.com';
$username '[email protected]';
$password 'mipassgmail';
$port 587;
$secure 'tls';
/*------------------------------------------------------------------------------------------*/
$mail->IsSMTP();
$mail->Host $host;
$mail->SMTPAuth true;
$mail->Username $username;
$mail->Password $password;
$mail->Port $port;
$mail->SMTPSecure $secure;
/*------------------------------------------------------------------------------------------------------------*/
$mail->addAddress($rowArray['email_suscripcion'], $rowArray['nombre_suscripcion']);
/*-----------------------------------------------------------------------------------------------------------*/
$mail->isHTML(true);
$mail->CharSet 'utf-8';
$mail->setWordWrap 70;
/*------------------------------------------------------------------------------------------*/
$mail->Subject $asunto;
$mail->Body $body;
//$mail->MsgHTML($body);
$mail->AltBody $body;
/*------------------------------------------------------------------------------------------*/
$mail->Send();
if(!
$mail->Send()) {
echo 
$mail->ErrorInfo;
echo 
"Error al enviar a: " $rowArray["email_suscripcion"] . "<br>";    
}
$mail->ClearAddresses();
}
?>
Pongo esto:
while ($rowArray = mysql_fetch_array($ConsultaSuscripciones)) {
echo $rowArray["email_suscripcion"];
}
justo despues del while y despues del primer corchete y no me lista los tres correos de los tres suscriptores, solo dos, a los dos que me envía el boletin, yahoo y hotmail. El primer registro de la la tabla de suscriptores es el de gmail, los dos siguientes son los de yahoo y hotmail. Se que puedo mandar diariamente a través de gmail unos 100 emails.

Hago esto justo al final de la consulta de suscripciones, despues de: $totalRows_ConsultaSuscripciones = mysql_num_rows($ConsultaSuscripciones);
do {
echo $row_ConsultaSuscripciones['email_suscripcion'];
} while ($row_ConsultaSuscripciones = mysql_fetch_assoc($ConsultaSuscripciones));
y si que me lista los tres correos de los tres suscriptores.
Creo que el problema está en el array.
Alguna sugerencia ??
Pero xD ya me envia más de un boletín.
tengo con phpmailer y el smtp de gmail el envío del formulario de contacto y el email que se le envía al usuario para que cambie su password cuando lo olvida y los dos van como la seda
Muchísimas gracias de antemano y un saludo: manyblue

Última edición por manyblue; 08/03/2015 a las 14:58

Etiquetas: formulario, html, masivo, mysql, phpmailer, select, smtp, sql, tabla, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:40.