Después de dos días dando vueltas como un loco por foros, blogs y manuales, he dado por fin con una función que permite enviar correos electrónicos en formato HTML sin importar el tamaño. En mi caso, cuando tenía que enviar bastantes fotos no enviaba el mensaje, por lo que empecé a investigar y descubrí que el estandar RFC2822 sólo permite 998 caracteres por linea y por lo tanto, dado que enviaba bastantes más caracteres fallaba. Para solucionar este problema basta con incluir la codificación base64 en el header del mensaje :
“Content-Transfer-Encoding: base64\r\n”
y después codificarlo y partirlo en bonitos trozos antes de enviarlo:
chunk_split(base64_encode($content))
La función, que no es mía, la encontré aquí y la explicación al problema aquí. Y aquí la función:
<?php
// Example
$HTML = “<b>This is a test</b>”;
$from = “test@test.com”;
$to = “this@that.com”;
$subject = “I’m sending a test HTML email”;
sendHTMLemail($HTML,$from,$to,$subject);
function sendHTMLemail($HTML,$from,$to,$subject)
{
// First we have to build our email headers
// Set out “from” address
$headers = “From: $from\r\n”;
// Now we specify our MIME version
$headers .= “MIME-Version: 1.0\r\n”;
// Create a boundary so we know where to look for
// the start of the data
$boundary = uniqid(“HTMLEMAIL”);
// First we be nice and send a non-html version of our email
$headers .= “Content-Type: multipart/alternative;”.
“boundary = $boundary\r\n\r\n”;
$headers .= “This is a MIME encoded message.\r\n\r\n”;
$headers .= “–$boundary\r\n”.
“Content-Type: text/plain; charset=ISO-8859-1\r\n”.
“Content-Transfer-Encoding: base64\r\n\r\n”;
$headers .= chunk_split(base64_encode(strip_tags($HTML)));
// Now we attach the HTML version
$headers .= “–$boundary\r\n”.
“Content-Type: text/html; charset=ISO-8859-1\r\n”.
“Content-Transfer-Encoding: base64\r\n\r\n”;
$headers .= chunk_split(base64_encode($HTML));
// And then send the email ….
mail($to,$subject,””,$headers);
}
?>