Foros del Web » Programando para Internet » PHP »

mail con una imagen adjunta

Estas en el tema de mail con una imagen adjunta en el foro de PHP en Foros del Web. Hola aca estoy buscando que me den una ayudita. Mediante el codigo que pegué mas abajo envio un mail al usuario con sus datos de ...
  #1 (permalink)  
Antiguo 27/01/2010, 19:04
 
Fecha de Ingreso: julio-2009
Mensajes: 311
Antigüedad: 14 años, 9 meses
Puntos: 0
Pregunta mail con una imagen adjunta

Hola aca estoy buscando que me den una ayudita.
Mediante el codigo que pegué mas abajo envio un mail al usuario con sus datos de acceso.
El mail funciona perfectamente , solo no muestra la imagen( aparece el cuadro con la cruz ) que quiero que aparezca en la parte superior del mail con un logo.

No se que tengo mal. He pensado tambien en incorporar la imagen como archivo adunto pero no he encontrado codigo que me sirva de ejemplo para usarlo
Pues lo que encuentro es que el archivo proviene de un formulario que completa el usuario y aca la imagen esta en ele servidor


// Email con el reenvio del password al usuario
$sujeto = "MiSitio.com";
$email="[email protected]";
$email2="[email protected]";
$destinatario= $_POST['email'];
$sheader="From:".$email."\nReply-To:".$email2."\n";
$sheader=$sheader."X-Mailer:PHP/".phpversion()."\n";
$sheader=$sheader."Mime-Version: 1.0\n";
$sheader=$sheader."Content-Type: text/html";
$mensaje =
"<html>
<body>
<table>
<tr><td><img src=\"http://www.MiSitio.com/images/Imagen.gif\" width=\"150\" height=\"47\"></td></tr>
</table>
<head><title><font size=3 color='black'>Misitio.COM</title></head>
<p>Envio del password de su cuenta</center></p>
<p><font size=2 color='black'>Cumpliendo con su pedido le estamos enviando sus datos de acceso .<BR>
a nuestro sitio web. Por favor ingrese en al link de abajo volver a hacer.<BR>
uso de nuestros servicios.</p>
<p>Andres Cr.<br>
Supervisor General</p>
</body>
</html>";
$mensaje.= '<a href="http://www.MiSitio.com/valUsuario.php?emailUsuario='.$_POST['email'].'&passwordUsuario='.$registro["passwordUsuario"].'">Ingrese a su cuenta </a>'."<br>";
$mensaje.= "Datos de su cuenta:"."<BR>";
$mensaje.= $nombre." ".$apellido."<BR>";
$mensaje.= "Usuario: ".$_POST['email']."<BR>";
$mensaje.= "Password:".$password."<BR>";

if(!mail($destinatario, $sujeto, $mensaje, $sheader))
{$mje="NO fue posible enviar el mail con sus datos <br>Comuniquese con uno de nuestros Asesores"; }
else
{
$mje="En su casiilla de correo encontrará un mail con sus datos de acceso";
echo "<meta http-equiv=\"refresh\" content=\"2;URL=index.php?error=$mje\">";
}
?>
  #2 (permalink)  
Antiguo 27/01/2010, 20:40
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: mail con una imagen adjunta

marcos46g:
Enviar imagenes que esten guardadas en el servidor NO es buena idea, ya
que si envias a 1000 usuarios tendrias muchos problemas de conexion.

Lo mas recomendable es que lo envies como adjunto asi ->

$destino = "[email protected]";
$asunto = "Probando envio attachmentes";
$mensaje = "A ver si todo sale bien. Gracias.";
$headers = "From: [email protected]\n";
$headers .= "Reply-To: [email protected]\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"MIME_BOUNDRY\"\n";
$headers .= "This is a multi-part message in MIME format.\n";

$fp = fopen(($_FILES['miarchivo']['tmp_name']),"r");
$str = fread($fp, filesize($_FILES['miarchivo']['tmp_name']));
$str = chunk_split(base64_encode($str));
$fp = fclose($fp);


$message = "--MIME_BOUNDRY\n";
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n";
$message .= "\n";
$message .= "$mensaje";
$message .= "\n";

$message .= "--MIME_BOUNDRY\n";
$message .= "Content-Type: application/octet-stream; name=\"nuevo.txt\"\n";
$message .= "Content-disposition: attachment\n";
$message .= "Content-Transfer-Encoding: base64\n";
$message .= "\n";
$message .= "$str\n";
$message .= "\n";
$message .= "--MIME_BOUNDRY--\n";

if(!mail($destino, $asunto, $message, $headers)) {
exit("Ha ocurrido un error, por favor inténtalo más tarde");
}

Comentarios:

En este caso tenemos un destino que sera el correo del usuario.
Un asunto que ya tu lo designaras.
Un mensaje que deberas diseñar tu mismo!.

Las cabeceras ->
deben contener las dos ultimas lineas donde dice headers.!!!!.

El manejo del archivo ->
En este caso mio, he subido el archivo y lo debo ABRIR, LEER, CODIFICAR Y CERRAR.

El mensaje ->
debe ir dentro de un MIME_BOUNDARY o (fronteras MIME)

El archivo adjunto ->
debera ir en otra MIME_BOUNDARY o (frontera MIME).

Y finalmente se envia.

OJO -> si el archivo reside en el servidor y mas especificamente en el
directorio donde se encuentra el codigo php que enviara el archivo, simplemente se abre como imagen.jpg...

Saludos
Y espero te ayude
Franco

P.S. Todo esto es conforme los estandares generalmente aceptados para el envio de archivos adjuntos via SMTP puerto 25.
  #3 (permalink)  
Antiguo 28/01/2010, 16:51
 
Fecha de Ingreso: julio-2009
Mensajes: 311
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: mail con una imagen adjunta

Cita:
Iniciado por franco190453 Ver Mensaje
marcos46g:
Enviar imagenes que esten guardadas en el servidor NO es buena idea, ya
que si envias a 1000 usuarios tendrias muchos problemas de conexion.

Lo mas recomendable es que lo envies como adjunto asi ->

$destino = "[email protected]";
$asunto = "Probando envio attachmentes";
$mensaje = "A ver si todo sale bien. Gracias.";
$headers = "From: [email protected]\n";
$headers .= "Reply-To: [email protected]\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"MIME_BOUNDRY\"\n";
$headers .= "This is a multi-part message in MIME format.\n";

$fp = fopen(($_FILES['miarchivo']['tmp_name']),"r");
$str = fread($fp, filesize($_FILES['miarchivo']['tmp_name']));
$str = chunk_split(base64_encode($str));
$fp = fclose($fp);


$message = "--MIME_BOUNDRY\n";
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n";
$message .= "\n";
$message .= "$mensaje";
$message .= "\n";

$message .= "--MIME_BOUNDRY\n";
$message .= "Content-Type: application/octet-stream; name=\"nuevo.txt\"\n";
$message .= "Content-disposition: attachment\n";
$message .= "Content-Transfer-Encoding: base64\n";
$message .= "\n";
$message .= "$str\n";
$message .= "\n";
$message .= "--MIME_BOUNDRY--\n";

if(!mail($destino, $asunto, $message, $headers)) {
exit("Ha ocurrido un error, por favor inténtalo más tarde");
}

Comentarios:

En este caso tenemos un destino que sera el correo del usuario.
Un asunto que ya tu lo designaras.
Un mensaje que deberas diseñar tu mismo!.

Las cabeceras ->
deben contener las dos ultimas lineas donde dice headers.!!!!.

El manejo del archivo ->
En este caso mio, he subido el archivo y lo debo ABRIR, LEER, CODIFICAR Y CERRAR.

El mensaje ->
debe ir dentro de un MIME_BOUNDARY o (fronteras MIME)

El archivo adjunto ->
debera ir en otra MIME_BOUNDARY o (frontera MIME).

Y finalmente se envia.

OJO -> si el archivo reside en el servidor y mas especificamente en el
directorio donde se encuentra el codigo php que enviara el archivo, simplemente se abre como imagen.jpg...

Saludos
Y espero te ayude
Franco

P.S. Todo esto es conforme los estandares generalmente aceptados para el envio de archivos adjuntos via SMTP puerto 25.


Muchas gracias por tu aporte.
Solo me queda una duda
donde dice miarchivo debo poner la ruta completa algo asi como
www.misitio.com/imagenes/imagen,jgp
  #4 (permalink)  
Antiguo 28/01/2010, 17:19
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 9 meses
Puntos: 27
Respuesta: mail con una imagen adjunta

Lee algo de phpMailer que es una clase muy sencilla de usar y te va a simplificar el envio de mail.
  #5 (permalink)  
Antiguo 28/01/2010, 20:55
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: mail con una imagen adjunta

marcos46g:
Si colocas el archivo imagen.jpg en el mismo directorio del codigo, simplemente cambias todos eso por "imagen.jpg"; si lo colocas en un subdirectorio que se llame
imagenes entonces cambiaria a "imagenes/imagen.jpg"
Logicamente esa imagen la utilizaras muchas veces y es recomendable ubicarle cerca del codigo principal.
Asimismo, observa esta parte ->
$message .= "Content-Type: application/octet-stream; name=\"nuevo.txt\"\n";
observa que yo lo he puesto porque he subido un archivo de texto y en caso de imagenes debe ser diferente el mime type. Tambien puedes excluir el name ya que yo lo he incluido para cambiar el nombre original del codigo subido por uno de mi escogencia.
Referente el phpmailer, pues es bueno pero mi codigo te pertime manipular los envios a tu antojo; es decir es mucho mas flexible e instruye mas detalladamente.
Finalmente, cualquier duda posteala que con mucho gusto ayudare.
Saludos
Franco
  #6 (permalink)  
Antiguo 08/11/2014, 07:54
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: mail con una imagen adjunta

He seguido los pasos de este post pero no me envia la imagen adjunta correctamente, llega pero sin la imagen, puede ayudarme a ver que me falta?

Código:
<?php
$destino = "[email protected]";
$asunto = "Probando envio attachmentes";
$mensaje = "A ver si todo sale bien. Gracias.";
$headers = "From: [email protected]\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"MIME_BOUNDRY\"\n";
$headers .= "This is a multi-part message in MIME format.\n";

$fp = fopen(($_FILES['http://url.com/imagen.jpg']['tmp_name']),"r");
$str = fread($fp, filesize($_FILES['http://url.com/imagen.jpg']['tmp_name']));
$str = chunk_split(base64_encode($str));
$fp = fclose($fp);


$message = "--MIME_BOUNDRY\n";
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n";
$message .= "\n";
$message .= "$mensaje";
$message .= "\n";

$message .= "--MIME_BOUNDRY\n";
$message .= "Content-Type: application/octet-stream; name=\"imagen.jpg\"\n";
$message .= "Content-disposition: attachment\n";
$message .= "Content-Transfer-Encoding: base64\n";
$message .= "\n";
$message .= "$str\n";
$message .= "\n";
$message .= "--MIME_BOUNDRY--\n";

if(!mail($destino, $asunto, $message, $headers)) {
exit("Ha ocurrido un error, por favor inténtalo más tarde");
}
?>
Gracias por adelantado.

Etiquetas: mail
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 18:53.