Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/12/2008, 22:58
eduardkorn
 
Fecha de Ingreso: abril-2007
Mensajes: 32
Antigüedad: 17 años
Puntos: 0
Respuesta: Problema con envío de correos

Bueno, ya logré resolver el problema. Lo que pasa es que al escribir el correo y según la especificación del MIME (RFC 2045,2046,2047, si no estoy mal), los boundaries deben tener cierta cantidad de saltos de línea, además de que revise que mis cabeceras estaban mal ubicadas.

Ahi les dejo el codigo para que lo miren e igual ya es funcional, tanto para enviar a otros clientes de correo como al de uno mismo:

$limext="externo";
$limint="interno";
$subject=$asunto; //titulo del correo
$de=$_POST["de"]."@prepara2.com";
if($_FILES["archivo"]){
//cabeceras para enviar correo en formato HTML
$headers = "From: ". $de. "\r\n"; //correo del que lo envia
if($fun=="borrador"){
$headers .= "To: ". $to. "\r\n";
if($_POST["correos_cc"]!="")
$headers .= "Cc: ". $_POST["correos_cc"]. "\r\n";
if($_POST["correos_cco"]!="")
$headers .= "Bcc: ". $_POST["correos_cco"]. "\r\n";
$headers .= "Subject: ". $subject. "\r\n";
}
$headers .= "Delivered-To: ". $de. "\r\n"; //correo del que lo envia
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"".$limext. "\"\r\n"; //datos mixteados
//incia cuerpo del mensaje que se visualiza
$cuerpo="--". $limext . "\r\n";
$cuerpo .= "Content-Type: multipart/alternative; boundary=\"". $limint. "\"\r\n\r\n"; //contenido alternativo: texto o html
$cuerpo .= "--". $limint. "\r\n";
$cuerpo .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
$cuerpo .= "Content-Transfer-Encoding: 8bit\r\n";
$cuerpo .= "Content-Disposition: inline\r\n\r\n";
//Cuerpo o contexto del mensaje, la esencia del correo, el todo ;)
$cuerpo.=stripslashes($_POST["txteditor"]);
$cuerpo .= "\r\n";
$cuerpo .= "--". $limint. "\r\n"; //fin cuerpo mensaje a mostrar
//--------------------REPETIDO-----------------
$cuerpo .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$cuerpo .= "Content-Transfer-Encoding: quoted-printable\r\n";
$cuerpo .= "Content-Disposition: inline\r\n\r\n";
//Cuerpo o contexto del mensaje, la esencia del correo, el todo ;)
$cuerpo.=imap_8bit(stripslashes($_POST["txteditor"]));
$cuerpo .= "\r\n";
$cuerpo .= "--". $limint. "--\r\n\r\n"; //fin cuerpo mensaje a mostrar
//--------------------FIN REPETIDO--------------
//archivos adjuntos
//echo print_r($_FILES["archivo"]["name"])."<br>";
$adj=$_FILES["archivo"];
$total=count($adj["name"]);
//echo "total: ".$total."<br>";
for($cont=0;$cont<$total;$cont++){
if($adj["size"][$cont]>0){
//echo $adj["name"][$cont]." - ".$adj["tmp_name"][$cont]." - ".$adj["type"][$cont]." - ".$adj["size"][$cont]."<br>";
$cuerpo .= "--". $limext. "\r\n";
$cuerpo .= "Content-Type: ". $adj["type"][$cont]. "; name=\"". $adj["name"][$cont]. "\"\r\n"; //envio directo de datos
$cuerpo .= "Content-Transfer-Encoding: BASE64\r\n";
$cuerpo .= "Content-Disposition: attachment; filename=\"". $adj["name"][$cont]. "\"\r\n\r\n";
//lectura del archivo
$fp= fopen( $adj["tmp_name"][$cont], "r" ); //abrimos archivo
$buf= fread( $fp, filesize($adj["tmp_name"][$cont]) ); //leemos archivo completamente
fclose($fp); //cerramos apuntador;
$cuerpo .= chunk_split(base64_encode($buf)). "\r\n";
}
}
$cuerpo .= "--". $limext. "--\r\n\r\n";
}

Bueno, esto es solo para el de adjuntos, por que si se va a enviar sin adjuntos la estructura cambia en base a que ya no se necesita el multipart/mixed.

Gracias de todas formas. Saludos desde Bogotá, Colombia.