Foros del Web » Programando para Internet » PHP »

Mensaje del e-mail adjunto

Estas en el tema de Mensaje del e-mail adjunto en el foro de PHP en Foros del Web. Hola a todos. Estoy tratando de enviar un mail pero deseo meter el mensaje en un archivo en lugar de meterlo en una variable. Traté ...
  #1 (permalink)  
Antiguo 17/09/2003, 21:05
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Pregunta Mensaje del e-mail adjunto

Hola a todos.

Estoy tratando de enviar un mail pero deseo meter el mensaje en un archivo en lugar de meterlo en una variable.

Traté de hacer esto:

mail($admin,"ASUNTO",include('mensaje.php'),"Conte nt-Type: text/html; charset=iso-8859-1\nFROM: DRCYBER <$usuario>");

Claro, eso no funciona, ya que cuando se ejecuta la función include simplemente me muestra en pantalla el archivo "mensaje.php".

¿Cómo hago para que el texto del mensaje sea el contenido de un archivo?

Mil gracias de antemano.
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #2 (permalink)  
Antiguo 18/09/2003, 02:39
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Hola,

¿El mensaje tiene codigo PHP o es solo HTML? Si es solo HTML, podrias leerlo en una variable con:
Código PHP:
$mensaje=implode("",file("mensaje.php"));
mail($admin,"ASUNTO",$mensaje,"Content-Type: text/html; charset=iso-8859-1\nFROM: DRCYBER <$usuario>"); 
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 18/09/2003, 08:03
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
El mensaje tiene código PHP también. ¿Lo hago igual?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #4 (permalink)  
Antiguo 18/09/2003, 08:09
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 22 años, 4 meses
Puntos: 5
Bien, si lo que quieres enviar es un archivo, por ejemplo una pagina web, te recomiendo una cosa, abres el archivo y lo recorres, generas una variable que contenga el archivo y lo envias, por ejemplo:

Código PHP:
$archivo file("archivo.html");
$mensaje "";
foreach(
$archivo as $linea) {
$mensaje .= $linea;
}
mail("[email protected]""titulo"$mensaje"Content-Type: text/html;"); 
Esta claro que si pretendes enviar un binario no podras hacerlo u archivos similares.

Saludillos!!!
__________________
Usuario registrado de Linux #288725
  #5 (permalink)  
Antiguo 18/09/2003, 08:11
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
No, de esta forma enviarias el codigo fuente. La unica forma que se me ocurre es usar el buffer de salida para "capturar" el HTML generado por ese PHP. Mira ob_start() (www.php.net/ob_start).

Bueno, quizas hay otro metodo. ¿Ese mensaje.php es completo? Es decir, que si pones en el navegador www.tusitio.com/mensaje.php genera el HTML que quieres enviar. Si es asi, y tu servidor tiene activados los fopen wrappers (www.php.net/wrappers), podrias hacerlo asi:
Código PHP:
$mensaje=implode("",file("http://www.tusitio.com/mensaje.php"));
mail($admin,"ASUNTO",$mensaje,"Content-Type: text/html; charset=iso-8859-1\nFROM: DRCYBER <$usuario>"); 
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 18/09/2003, 08:33
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 22 años, 4 meses
Puntos: 5
Es verdad tienes razon jeje ps haces un:
Código PHP:
ob_start();
echo 
$mensaje;
$mensaje ob_get_contents();
ob_end_clean();
mail("",""$mensaje,"cabecera"); 
__________________
Usuario registrado de Linux #288725
  #7 (permalink)  
Antiguo 18/09/2003, 19:15
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
El mensaje.php solo tiene algunas llamadas a PHP al estilo: <?php echo $x ?>. Simplemente llamadas a variables pequeñas.

¿Lo hago como dices josemi? ¿o como epplestun?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #8 (permalink)  
Antiguo 19/09/2003, 00:40
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 22 años, 4 meses
Puntos: 5
Si es todo PHP podrias hacer uso de eval() en vez de echo() pero en principio lo queyo te dijefuncionaria, es decir:

Código PHP:
$archivo file("archivo.php");
$mensaje "";
foreach(
$archivo as $linea) {
$mensaje .= $linea
}
ob_start();
echo 
$linea;
$mensaje ob_get_contents();
ob_end_clean();
mail("[email protected]""titulo"$mensaje"Content-Type: text/html\n"); 
Saludillos!!
__________________
Usuario registrado de Linux #288725
  #9 (permalink)  
Antiguo 19/09/2003, 13:07
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Josemi, como lo dices tu es mucho más fácil. El problema es que no me interpreta las llamadas a PHP que tiene el mensaje.

¿Cómo le hago?. El método de epplestun es demasiado largo y complicado.

Tiene que haber una función que recorra el archivo y lo meta en una variable intacto.
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #10 (permalink)  
Antiguo 19/09/2003, 13:31
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Bueno, de donde estan definidas las varibles que sacas con el echo en mensaje.php. Si se definen antes en el script que tiene el email, tienes que hacer el include() con el ob_start(). Si las defines dentro del propio mensaje.php, quizas haciendo file("http://www.tusitio.com/mensaje.php") sirve.

Pero tampoco creo que sea muy largo el metodo de epplestun:
Código PHP:
ob_start();
include(
"mensaje.php");
$mensaje ob_get_contents();
ob_end_clean();
mail("",""$mensaje,"cabecera"); 
Son 4 lineas. Y encima cortitas.

Otra solucion seria que meterias todo lo que es la generacion del HTML de mensaje.php dentro de una funcion que devolviese el codigo HTML (en lugar de echo añadirlo en una variable). Pero supongo que lo habras hecho asi para poder usar un editor HTML para crear el mensaje.

Prueba el codigo que te doy y nos cuentas.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #11 (permalink)  
Antiguo 19/09/2003, 14:08
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
El procedimiento se ejecuta bien, interpretando todo el code PHP. Pero, traté de meterlo todo en una función asi:

Código PHP:
function send($var) {
    
ob_start();
    include(
"mails/$var");
    
$mensaje ob_get_contents();
    
ob_end_clean();
    return 
$mensaje;

Y luego, para probar hice:

Código PHP:
echo send('sol_logo.php'); 
Y no me interpreta las llamadas a la BD, como por ejemplo:
echo $row[nombre];

En cambio si hago:

Código PHP:
ob_start();
include(
"mails/sol_logo.php");
$mensaje ob_get_contents();
ob_end_clean();

echo 
$mensaje
si funciona perfecto. ¿Qué estoy haciendo mal?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #12 (permalink)  
Antiguo 19/09/2003, 14:20
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Pues que estas poniendo el codigo de mensaje.php dentro de una funcion. Y ese codigo dentro de la funcion no tiene acceso a las variables definidas fuera de la funcion (ambito global). Revisa http://www.php.net/manual/en/languag...bles.scope.php

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #13 (permalink)  
Antiguo 19/09/2003, 14:23
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Dios mio... entonces voy a tener que manejarlo independientemente... DIOS !!!... son varias llamadas iguales.

Bueno, mil gracias.
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #14 (permalink)  
Antiguo 19/09/2003, 16:39
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
¿Creen que pueda usar la función "file_get_contents()"?. Es una función de PHP 4.3.X...

Lo podría usar asi:

Código PHP:
$url="mails/sol_logo.php";
$mensaje file_get_contents($url,'r');
mail(......$mensaje....); 
No lo puedo probar porque no he bajado PHP 4.3. ¿Creen que funcione?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #15 (permalink)  
Antiguo 19/09/2003, 16:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
(si te fijas en los comentarios de los usuarios de esa funcion: file_get_contents() .. ) tienes una alternativa para otras versiones inferiores de PHP ... usa file() y algunas cosas más ..


A todo esto ... ¿por qué no usas ..?:

Código PHP:
$html=implode('',file($url)); 
en $html tendrás tu página (código HTML/javascript/etc generado) par que lo mandes en mail() en su "body" ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 19/09/2003 a las 16:56
  #16 (permalink)  
Antiguo 19/09/2003, 18:00
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
drcyber, una cosa es coger el codigo fuente del fichero (el contenido), y otra cosa ejecutar un codigo PHP y recoger el HTML generado.

Cluster, te hago un resumen. El fichero que contiene el mensaje contiene codigo PHP que hace referencia a variables creadas en el script principal. Con lo que hay que ejecutar el mensaje.php dentro del entorno principal del script que envia el email. Por eso con tu codigo solo cogeria el codigo fuente PHP. Todavia le faltaria ejecutarlo.

Mira, drcyber, otra solucion seria modificar tus ficheros de mensaje.php para que en lugar de generar la salida directamente al navegador, la mandes a una variable. Tendrias que modificar todos los mensajes. Claro que por alguna oscura razon no puedas hacerlo.

Incluso si el codigo PHP de mensaje.php son simples echos, podrias tomar un enfoque tipo plantilla.

Salduos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #17 (permalink)  
Antiguo 19/09/2003, 18:14
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Cluster, haciendo un implode no me interpreta las llamadas a PHP que tiene el mensaje. ¿Por qué será?

¿Crees que funcione con file_get_contents()?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #18 (permalink)  
Antiguo 19/09/2003, 18:17
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Cluster, haciendo un implode no me interpreta las llamadas a PHP que tiene el mensaje. ¿Por qué será?

¿Crees que funcione con file_get_contents()? Lo único que me interesa es comprimir al máximo el procedimiento, ya que debo llamarlo varias veces y no es nada cómodo llamar 12 veces esto:

Código PHP:
ob_start();
include(
"mails/sol_logo.php");
$mensaje ob_get_contents();
ob_end_clean(); 
Tampoco puedo meter eso dentro de una función porque no me toma en cuenta algunas variables. ¿Qué me recomiendas?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #19 (permalink)  
Antiguo 19/09/2003, 18:22
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Ohh ok josemi. Respondiste todo. Perooooo... no puedo aplicar un enfoque tipo plantilla porque el texto de cada mensaje es totalmente distinto uno de otro y son aprox 11 mensajes, llamando a variables distintas que vienen del script principal y de la BD.
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #20 (permalink)  
Antiguo 19/09/2003, 20:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
(ok, josemi .. ahora ya ví lo que necesita .. drcryber) ..

mm si el problema principal es que no te ejecuta el código y te entrega el "HTML" como para que lo puedas recoger con las funciones de control de buffer de PHP .. intenta usar llamadas relativas tipo http:// (si tienes los wrappers externos activados).

Código PHP:
function nose($algo){
ob_start();
include(
"http://www.nose.tal/mails/$algo");
$mensaje ob_get_contents();
ob_end_clean();
return 
$mensaje;


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 19/09/2003 a las 20:14
  #21 (permalink)  
Antiguo 19/09/2003, 21:27
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Es lo mismo. Al meter todo en una función, procesa las variables tipo $_POST o $_GET pero los array de BD tipo "row[campo]" no los procesa.

josemi dijo: Pues que estas poniendo el codigo de mensaje.php dentro de una funcion. Y ese codigo dentro de la funcion no tiene acceso a las variables definidas fuera de la funcion (ambito global).

Por lo tanto no funciona.
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #22 (permalink)  
Antiguo 19/09/2003, 21:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
ok .. pues entonces PASALE como un parámetro más a esa función tu $row ...

funcition nose($nose,$row){}

sólo asegurate de usar el mismo nombre de variable ($row) en todos esos códigos que llamas vía include() ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #23 (permalink)  
Antiguo 19/09/2003, 21:53
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Igualmente no funciona ... quedó:

Código PHP:
function send($var,$row) {
    
ob_start();
    include(
"mails/$var");
    
$mensaje ob_get_contents();
    
ob_end_clean();
    return 
$mensaje;

Y cuando hago un "echo send('sol_logo.php');" no me procesa los $row.

Pero si saco todo de la función, si funciona. ¿Qué me recomiendas?
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #24 (permalink)  
Antiguo 19/09/2003, 21:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
O_o'

Pero, .. como va a funcionar? .. No le has pasado la variable $ROW a tu funcion ..!!

Código PHP:
function send($var,$row) {
    
ob_start();
    include(
"mails/$var");
    
$mensaje ob_get_contents();
    
ob_end_clean();
    return 
$mensaje;
}

echo 
send('sol_logo.php',$row); 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #25 (permalink)  
Antiguo 19/09/2003, 22:03
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 21 años, 8 meses
Puntos: 2
Jejejeje... bueno... pero no te enojes. =)

Funcionó perfecto todo !!!... ahora si terminé la página por completo. Cuando la suba al server les aviso para que la vean. MIL GRACIAS.

Gracias Cluster, josemi y epplestun. Se las debo !

PD: esto va para las FAQ's.
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
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 13:46.