Foros del Web » Programando para Internet » PHP »

Enviar correo

Estas en el tema de Enviar correo en el foro de PHP en Foros del Web. Hola: Estoy realizando un sitio y me han pedido que en el se de la posibilidad de enviar un Boletín a todos los usuarios que ...
  #1 (permalink)  
Antiguo 28/02/2005, 23:41
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Enviar correo

Hola:
Estoy realizando un sitio y me han pedido que en el se de la posibilidad de enviar un Boletín a todos los usuarios que previamente se hayan suscrito al mismo, pero me han pedido que el diseño de este sea lo más fácil de cambiar. Entonces lo que hice fue una BDatos en la cual puse una tabla llamada template que lo que guardo en la misma es la dirección de la plantilla HTML a usar. Luego lo que hago es obtener el contenido de lo que el cliente quiere que lleve la plantilla y lo sustituyo en la misma haciendo una vista previa de la misma. Este código es un ejemplo del contenido a insertar en la plantilla:
[PHP]
$query = mysql_query("SELECT id_plantilla,direccion FROM plantillas") or die(trigger_error("Error"));
list($id_plantilla, $direccion) = mysql_fetch_assoc($query);
$fp = fopen($direccion,"r");
$html = fread($fp,filesize("$direccion));
fclose($fp);
$html = str_replace("{content}",$textbody,$html);
[/code]
y la variable $textbody sale de un código como este:
Código PHP:
if ($numero >= 1) {
            
// Consulta para obtener todos los tópicos disponibles
            
$qct     $db->sql_query("SELECT * FROM ".$prefix."_topics");
            
$textbody .= "<table width=\"95%\" border=\"0\" cellspacing=\"1\" cellpadding=\"2\" align=\"center\">"
            
."<tr>"
            
."<td colspan=\"6\" width=\"100%\" height=\"20\" bgcolor=\"#6699CC\"><img src=\"".$nukeurl."/modules/".$module_name."/images/boletin/icon_noticias.jpg\" border=\"0\" align=\"absmiddle\">&nbsp;<a href=\"".$nukeurl."/modules.php?name=Topics\"><font size='2' color='#FFFFFF'><b>"._MODBOLETINNEWS_TIT."</b></font></a></td>"
            
."</tr>";
            
$categories = array();
            
$inc 0;
            while(
$fct mysql_fetch_assoc($qct)){
                
$cat =  "<tr><td colspan=\"6\" height=\"20\" bgcolor=\"#F0F8FE\"><img src='".$nukeurl."/images/topics/".$fct['topicimage']."' border=0 width=\"20\" height=\"20\" align='absmiddle' alt=\"".$fct['topictext']."\" class=\"cursor\"><a href=\"".$nukeurl."/modules.php?name=Topics\" title=\"Mostrar todos las noticias por temas\" target=\"_blank\"><b><font size='2' color='#000000'>".$fct['topictext']."</font></b></a></td></tr>";
                
// Obtenemos las noticias de ese Topico
                
$qnt $db->sql_query("SELECT sid, catid, aid, title, topic, hometext from ".$prefix."_stories WHERE (topic=".$fct['topicid'].") ORDER BY time DESC LIMIT 0, $numero");
                
$nnt $db->sql_numrows($qnt);
                for(
$i=0;$i<$nnt;$i++){
                    
$fnt mysql_fetch_assoc($qnt);
                    
$cat .=  "<tr><td colspan=\"6\" height=\"20\" bgcolor=\"#F0F8FE\"><font size='2'><a href=\"".$nukeurl."/modules.php?name=News&file=article&sid=".$fnt['sid']."&mode=&order=0&thold=0\" title=\"Mostrar noticia completa\" target=\"_blank\">".$fnt['title']."</a></font></td></tr>";
                }
                
array_push($categories$cat);
            }
            for(
$i=0;$i<count($categories);$i++){
                
$textbody .= $categories[$i];
            }
        } 
ahora lo que no se es como enviar ese correo usando el código HTML que posee la plantilla, que en este caso es un archivo HTML. Alguna ayuda?

Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 01/03/2005, 06:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Los "motores de gestión de templates" ya existen .. hay muy buenos como Smarty (www.php.net/smarty) y en castellano y fáciles de usar como: NokTemplate (http://www.jpw.com.ar/index.php?lugar=noktpl)

En www.zonaphp.com puedes ver un par de artículos sobre estas dos.

Con esos "motores" .. diseñar una nueva plantilla es cosa de usar un simple editor "HTML" común y donde tengas tu dato "dinámico" llamarlo tipo <

Los motores de templates ya usan sus própios "tags" y aplican expresiones regulares para hacer el "cambio" de tu valor de tu variable "PHP" al que corresponden en la "template" .. además de otras cosas como manejo de "bloques" y cosas así que sean repetitivas ...

Un saludo,
  #3 (permalink)  
Antiguo 01/03/2005, 07:08
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Sip

Cluster eso lo se, la duda mia es por ejemplo como coger el contenido de un archivo cualquiera, añadirlo a una variable ya que contiene valores y luego ese contenido enviarlo por email. Por ejemplo, supon que ya tengo creado el fichero de la plantilla y que se llama email.htm. Ahora ese fichero dentro tiene algo como esto:
[HMTL]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Mi boletin</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY text=#000000 vLink=#0000ff link=#0000ff bgColor=#ffffff>
<CENTER>
<TABLE borderColor=#336699 cellPadding=15 width=400 border=2>
<TBODY>
<TR>
<TD align=middle bgColor=#336699 colSpan=2><div align="center"><FONT face="verdana, arial"
color=#ffffff><FONT size=+1><B><font size="+1">Bolet&iacute;n SIMPRO </font>
</B></FONT></FONT></div></TD>
</TR>

<TR>
<TD height="100%" colSpan=2><table width="100%" border="0">
<tr>
<td scope="col"><div align="left"><font color="#0099CC" size="2" face="Verdana, Arial, Helvetica, sans-serif">{content}</font></div></td>
</tr>
</table> </TD>
</TR>
<TR>
<TD align=middle colSpan=2><FONT face="verdana, arial" color=#336699
size=1>{pie} {ulink}{/ulink}</FONT></TD>
</TR></TBODY>
</TABLE>
</CENTER>
</BODY>
</HTML>
[/HMTL]
ahora en el código mío yo hago esto:
Código PHP:
$textbody "<table width=\"95%\" align=\"center\">"
        
."<tr>"
        
."<td width=\"100%\" height=\"20\" bgcolor=\"#6699CC\"><img src=\"".$nukeurl."/modules/".$module_name."/images/boletin/icon_www.jpg\" border=0 align='absmiddle'>&nbsp;<a href=\"".$nukeurl."/modules.php?name=Downloads\" title=\"Our latest downloads\" target=\"_blank\"><b><font size='3' color='#FFFFFF'>".$moddescargas."&nbsp;"._NBMDOWN."</font></b></a></td>"
        
."</tr>"
        
."</table>\n";

// Consulta para obtener todos los tópicos disponibles
 
$qct     $db->sql_query("SELECT * FROM ".$prefix."_topics");
 
$textbody .= "<table width=\"95%\" border=\"0\" cellspacing=\"1\" cellpadding=\"2\" align=\"center\">"
        
."<tr>"
        
."<td colspan=\"6\" width=\"100%\" height=\"20\" bgcolor=\"#6699CC\"><img src=\"$nukeurl/modules/".$module_name."/images/boletin/icon_noticias.jpg\" border=0 align='absmiddle'>&nbsp;<a href=\"".$nukeurl."/modules.php?name=Topics\"><font size='3' color='#FFFFFF'><b>$modboletin_numero "._NBMNEWS_TIT."</b></font></a></td>"
        
."</tr>";
 
$categories = array();
 
$inc 0;
 while(
$fct mysql_fetch_assoc($qct)){
  
$cat =  "<tr><td colspan=\"6\" height=\"20\" bgcolor=\"#F0F8FE\"><img src='".$nukeurl."/images/topics/".$fct['topicimage']."' border=0 width=\"20\" height=\"20\" align='absmiddle' alt=\"".$fct['topictext']."\" class=\"cursor\">&nbsp;<a href=\"".$nukeurl."/modules.php?name=Topics\" title=\"Mostrar todos las noticias por temas\" target=\"_blank\"><b><font size='3' color='#000000'>".$fct['topictext']."</font></b></a></td></tr>";
  
// Obtenemos las noticias de ese Topico
  
$qnt $db->sql_query("SELECT sid, catid, aid, title, topic, hometext from ".$prefix."_stories WHERE (topic=".$fct['topicid'].") ORDER BY time DESC LIMIT 0, $numero");
  
$nnt $db->sql_numrows($qnt);
  for(
$i=0;$i<$nnt;$i++){
   
$fnt mysql_fetch_assoc($qnt);
   
$cat .=  "<tr><td colspan=\"6\" height=\"20\" bgcolor=\"#F0F8FE\"><a href=\"".$nukeurl."/modules.php?name=News&file=article&sid=".$fnt['sid']."&mode=&order=0&thold=0\" title=\"Mostrar noticia completa\" target=\"_blank\">&nbsp;&nbsp;".$fnt['title']."</a></td></tr>";
  }
  
array_push($categories$cat);
 }
 for(
$i=0;$i<count($categories);$i++){
  
$textbody .= $categories[$i];
 }

//coger template $modboletin_plantilla
$fp   fopen("modules/$module_name/images/plantillas/".$plantilla."/email.htm","r");
$html fread($fp,filesize("modules/$module_name/images/plantillas/".$plantilla."/email.htm"));
fclose($fp);
$html str_replace("{pie}",$modboletin_pie,$html);
$html str_replace("images/",$nukeurl."/modules/$module_name/images/plantillas/".$plantilla."/images/",$html);
$html str_replace("{content}",$textbody,$html); 
lo que quiero saber es como mandar por correo el contenido de la variable $textbody y de la plantilla ya conformado.

Salu2
__________________
Ing. Reynier Pérez Mira
  #4 (permalink)  
Antiguo 01/03/2005, 08:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. eso es otro tema .. (independiente del proceso que hagas .. si usas un sistema de temaplates .. o usas tus própios "str_replace()").

Se supone que en tu $html ya tienes tu página creada (tu e-mail en HTML) despues de aplicar tus "str_replace()" para componer tu plantilla total ..

usa la función mail(), generalo en HTML (con las cabeceras HTTP adecuadas) y en el parámetro "body" (cuerpo) ahí usas tu $html que es tu e-mail en HTML. Ejemplos tienes en las FAQ's de este foro (si usas el buscador salen más) y en la documentación oficial de PHP:

www.php.net/mail

Un saludo,
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 20:47.