Foros del Web » Programando para Internet » PHP »

mandar mail antes de la fecha

Estas en el tema de mandar mail antes de la fecha en el foro de PHP en Foros del Web. Hola amigos webmasters tengo un problema con mi script resulta que nesesito enviar un email de advertencia a todos los registros que les falta 15 ...
  #1 (permalink)  
Antiguo 10/05/2008, 07:00
Avatar de milerweb  
Fecha de Ingreso: enero-2008
Ubicación: Lima peru
Mensajes: 81
Antigüedad: 16 años, 3 meses
Puntos: 1
mandar mail antes de la fecha

Hola amigos webmasters tengo un problema con mi script resulta que nesesito enviar un email de advertencia a todos los registros que les falta 15 dias para su fecha de expiracion (campo date_expire) he logrado restarle 15 dias a la fecha de expiracion pero tengo problemas al enviar el mail cuando pongo la condicion me manda el email a todos no solo a aquellos que cumplan con la condicion aqui les dejo el escript para que me ayuden o si tienen otro escript pasenmelo .

Código PHP:
<?php 
 $conex
=mysql_connect('localhost','user','clave') or die('No se puedo conectar con la base de datos!');

/*
Servidor: aquí debe poner la dirección de su servidor, en la mayoría de las compañías es 'localhost'
Nombre_de_usuario: debe pone su nombre de usuario en el servidor.
Contraseña: su contraseña.
*/

   
mysql_select_db('mibasededatos',$conex);

function 
suma_fechas($fecha,$ndias)
            

{
            

      if (
preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha))
            

              list(
$año,$mes,$dia)=split("/"$fecha);
            

      if (
preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha))
            

              list(
$dia,$mes,$año)=split("-",$fecha);
        
$nueva mktime(0,0,0$mes,$dia,$año) + $ndias 24 60 60;
        
$nuevafecha=date("Y-m-d",$nueva);
            

      return (
$nuevafecha);  
            

}
echo 
'<head>
            

              <title>'
.$_SERVER[PHP_SELF].'</title>
            

      </head>
            

      <html>
            

      <body>'
;


//aqui es donde quiero llamar a la fecha para después sumarle los Días

$date mysql_query ("SELECT dimeq_listings.mail,DATE_FORMAT(dimeq_listings.date_expire, '%d-%m-%Y') AS nfecha,dimeq_listings.selector,dimeq_listings.firmname FROM dimeq_listings where dimeq_listings.membership = 1"$conex) or die( mysql_error() );

 while(
$row2 mysql_fetch_array$date ))
{

$f11=suma_fechas($row2['nfecha'], 0); // aquí le sumo a la fecha 60 días
           
echo '</body>
            

      </html>'
;
 
// tu sabrás como la obtienes, solo asegurate que tenga este formato

$dias15// los días a restar

$fechaenvio date("Y-m-d"strtotime("$f11 -$dias day"));
$fechaactual=strftime"%Y-%m-%d "time() );

   
//elaboramos cadena de emails
echo "Fecha actual ".$fechaactual."<br>";
echo 
"Fecha de envio ".$fechaenvio."<br>";
}

     
$query_Tabla "SELECT dimeq_listings.mail,DATE_FORMAT(dimeq_listings.date, '%d-%m-%Y'),DATE_FORMAT(dimeq_listings.date_expire, '%d-%m-%Y') FROM dimeq_listings where dimeq_listings.membership = 1 ORDER BY userid ASC";
   
$Tabla mysql_query($query_Tabla$conex) or die(mysql_error());

/*
Email: es el nombre del campo que requerimos, si ha seguido nuestras instrucciones creando nuestra misma tabla en la base de datos no debe cambiar esto.
Usuarios: es el nombre de la tabla donde está el campo 'email', si ha seguido nuestras instrucciones creando nuestra misma tabla en base de datos no debe cambiar esto.
*/
 
if ( $fechaactual $fechaenvio) { 
   
//elaboramos cadena de emails
  
$losemails="";
  while (
$row_Tabla=mysql_fetch_assoc($Tabla)) {
   
$losemails.=($row_Tabla['mail'].", ");
   }

  
$largo=strlen($losemails);
   if (
$largo>2)
{
   
//quitamos ultimos ", "
   
$losemails=substr($losemails,0,$largo-2);
}
else
{
   echo 
"No hay destinatarios!";
   die();
};

// se definen los argumentos de mail( ):
$asunto='Prueba de email desde PHP';
$mensaje='<html>
<head>
   <title>Titulo de la Pagina</title>
</head>
<body>
   <p>Esta es una prueba de emails en formato HTML</p>
   Precios de nuestros productos:
   <table>
    <tr>
   <th>PRODUCTO<th>PRECIO<th>PROMOCION</th>
   </tr>
  <tr>
   <td>Refresco Grande</td><td>25,50</td><td>23,00</td>
  </tr>
  <tr>
    <td>Helado Napolitano</td><td>27,50</td><td>25,00</td>
  </tr>
  <tr>
   <td>Patatas</td><td>18,50</td><td>15,00</td>
  </tr>
  </table>
</body>
</html>'
;

/*
Aquí debe poner su email en formato HTML
*/

$envia='[email protected]';
$remite='[email protected]';

/*
Enviante: Nombre del enviante
Email_remitente: email que desea mostrar como remitente.
*/

/// Envío del email:

mail(null$asunto$mensaje"MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1
From: $envia <$remite>
Bcc: $losemails" 
"\r\n") or die("Error al Enviar el Email");
echo 
"Mensaje Enviado con Éxito!"//

   
mysql_free_result($Tabla);
}
else
{
echo 
"no ay mensajes pra enviar a la fecha";
}
   
mysql_close($conex);
?>
  #2 (permalink)  
Antiguo 10/05/2008, 07:19
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 20 años, 11 meses
Puntos: 3
Re: mandar mail antes de la fecha

Porque no lo ejecutas directo del SQL sin tener que hacer calculos?

Código PHP:
SELECT mail,DATE_FORMAT(date_expire'%d-%m-%Y') AS nfechaselectorfirmname FROM dimeq_listings WHERE membership AND date_expire DATE_SUB(CURDATE(),INTERVAL 15 DAY
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
  #3 (permalink)  
Antiguo 10/05/2008, 07:30
Avatar de milerweb  
Fecha de Ingreso: enero-2008
Ubicación: Lima peru
Mensajes: 81
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: mandar mail antes de la fecha

Cita:
Iniciado por el cirujano Ver Mensaje
Porque no lo ejecutas directo del SQL sin tener que hacer calculos?

Código PHP:
SELECT mail,DATE_FORMAT(date_expire'%d-%m-%Y') AS nfechaselectorfirmname FROM dimeq_listings WHERE membership AND date_expire DATE_SUB(CURDATE(),INTERVAL 15 DAY
he echo como dices es buena idea pero no me obota ninguna fecha el interbal que quiere decir que botara los registros que le falten 15 diaas para llegar ala fecha de expiracion? o como
  #4 (permalink)  
Antiguo 10/05/2008, 07:46
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 20 años, 11 meses
Puntos: 3
Re: mandar mail antes de la fecha

si, esa consulta solo te mostrara los registros que le falten 15 dias exactos:

Código PHP:
SELECT mail,DATE_FORMAT(date_expire'%d-%m-%Y') AS nfechaselectorfirmname FROM dimeq_listings WHERE membership AND date_expire DATE_SUB(CURDATE(),INTERVAL 15 DAY
pero si quieres que te de todos los que faltan entre el dia de vencimiento y los 15 dias de intervalo colocas


Código PHP:
SELECT mail,DATE_FORMAT(date_expire'%d-%m-%Y') AS nfechaselectorfirmname FROM dimeq_listings WHERE membership AND date_expire >= DATE_SUB(CURDATE(),INTERVAL 15 DAY
esto significa que si a PEDRO PEREZ le faltan 15 dias para vencese recibira un correo, y si a MARIA MELENDEZ le falta 8 dias recibira tambien un correo...
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
  #5 (permalink)  
Antiguo 10/05/2008, 08:02
Avatar de milerweb  
Fecha de Ingreso: enero-2008
Ubicación: Lima peru
Mensajes: 81
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: mandar mail antes de la fecha

cuando pongo la primera opcion no me bota nada pero cuando pongo la segunda si pero me bota ya todos los registros yo quiero solo los que le faltan 15 dias para llegar al dateexpire .

me explico en mi tabla tengo en el campo date expire asi

2008-08-09 23:59:59
2008-05-30 10:24:38
2008-05-25 10:31:46
9999-12-31 23:59:59
2008-08-09 23:59:59

solo me deveria mostrar el terser registro pero no me muestra nada una ultima ayudadtita porfavor
  #6 (permalink)  
Antiguo 10/05/2008, 10:28
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 20 años, 11 meses
Puntos: 3
Re: mandar mail antes de la fecha

Código PHP:
<?php
 $conex
=mysql_connect('localhost','user','clave') or die('No se puedo conectar con la base de datos!');
/*
Servidor: aquí debe poner la dirección de su servidor, en la mayoría de las compañías es 'localhost'
Nombre_de_usuario: debe pone su nombre de usuario en el servidor.
Contraseña: su contraseña.
*/
 
mysql_select_db('mibasededatos',$conex);
echo 
'<head>

 <title>'
.$_SERVER[PHP_SELF].'</title>

 </head>

 <html>

 <body>'
;
//aqui es donde quiero llamar a la fecha para después sumarle los Días
$date mysql_query ("SELECT mail,DATE_FORMAT(date_expire, '%d-%m-%Y') AS nfecha, selector, firmname FROM dimeq_listings WHERE membership = 1 AND date_expire >= DATE_SUB(CURDATE(),INTERVAL 15 DAY) "$conex) or die( mysql_error() );
 while(
$row2 mysql_fetch_array$date ))
{
// se definen los argumentos de mail( ):
$asunto='Prueba de email desde PHP';
$mensaje='<html>
<head>
 <title>Titulo de la Pagina</title>
</head>
<body>
 <p>Esta es una prueba de emails en formato HTML</p>
 Precios de nuestros productos:
 <table>
 <tr>
 <th>PRODUCTO<th>PRECIO<th>PROMOCION</th>
 </tr>
 <tr>
 <td>Refresco Grande</td><td>25,50</td><td>23,00</td>
 </tr>
 <tr>
 <td>Helado Napolitano</td><td>27,50</td><td>25,00</td>
 </tr>
 <tr>
 <td>Patatas</td><td>18,50</td><td>15,00</td>
 </tr>
 </table>
</body>
</html>'
;
/*
Aquí debe poner su email en formato HTML
*/
$envia='[email protected]';
$remite='[email protected]';
/*
Enviante: Nombre del enviante
Email_remitente: email que desea mostrar como remitente.
*/
/// Envío del email:
mail($row2[mail], $asunto$mensaje"MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1
From: $envia <$remite>
Bcc: $losemails" 
"\r\n") or die("Error al Enviar el Email");
echo 
"Mensaje Enviado con Éxito!"//
}
else
{
echo 
"no ay mensajes pra enviar a la fecha";
}
 
mysql_free_result($date);
 
mysql_close($conex);
?>
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
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 11:04.