php email attachment

Problemas de archivos adjuntos de correo PHP()



email attachment (4)

Como comenté en la respuesta de @GovindTotla, su solución ha funcionado para mí. Para completar el tema, a continuación se muestra el código de salida de $header con dos archivos adjuntos. Considérelo como una respuesta de ingeniería inversa:

From: [email protected] Reply-To: [email protected] Cc: [email protected] Bcc: [email protected] MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="2527518bb813d2f2847a2adba8b8b47f" This is a multi-part message in MIME format. --2527518bb813d2f2847a2adba8b8b47f Content-type:text/html; charset=iso-8859-1 Content-Transfer-Encoding: 7bit Here comes the message. --2527518bb813d2f2847a2adba8b8b47f Content-Type: application/octet-stream; name="test.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test.txt" U29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5n IGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNv bWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBl bHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21l dGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxz ZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLgo= --2527518bb813d2f2847a2adba8b8b47f Content-Type: application/octet-stream; name="test2.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test2.txt" VGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgc2Vjb25kIGF0dGFjaG1lbnQuIFRoaXMgaXMgdGhl IGNvbnRlbnQgb2YgdGhlIHNlY29uZCBhdHRhY2htZW50LiBUaGlzIGlzIHRoZSBjb250ZW50IG9m IHRoZSBzZWNvbmQgYXR0YWNobWVudC4gVGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgc2Vjb25k IGF0dGFjaG1lbnQuIFRoaXMgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNlY29uZCBhdHRhY2htZW50 LiBUaGlzIGlzIHRoZSBjb250ZW50IG9mIHRoZSBzZWNvbmQgYXR0YWNobWVudC4gVGhpcyBpcyB0 aGUgY29udGVudCBvZiB0aGUgc2Vjb25kIGF0dGFjaG1lbnQuCg== --2527518bb813d2f2847a2adba8b8b47f--

¿Puede alguien ayudarme a averiguar por qué esto sigue devolviendo falso?

$to = "[email protected]"; $from = "Website <[email protected]>"; $subject = "Test Attachment Email"; $separator = md5(time()); // carriage return type (we use a PHP end of line constant) $eol = PHP_EOL; // attachment name $filename = "document.pdf"; //$pdfdoc is PDF generated by FPDF $attachment = chunk_split(base64_encode($pdfdoc)); // main header $headers = "From: ".$from.$eol; $headers .= "MIME-Version: 1.0".$eol; $headers .= "Content-Type: multipart/mixed; boundary=/"".$separator."/"".$eol.$eol; $headers .= "Content-Transfer-Encoding: 7bit".$eol; $headers .= "This is a MIME encoded message.".$eol.$eol; // message $headers .= "--".$separator.$eol; $headers .= "Content-Type: text/html; charset=/"iso-8859-1/"".$eol; $headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol; $headers .= $message.$eol.$eol; // attachment $headers .= "--".$separator.$eol; $headers .= "Content-Type: application/octet-stream; name=/"".$filename."/"".$eol; $headers .= "Content-Transfer-Encoding: base64".$eol; $headers .= "Content-Disposition: attachment".$eol.$eol; $headers .= $attachment.$eol.$eol; $headers .= "--".$separator."--"; // send message if (mail($to, $subject, "", $headers)) { echo "mail send ... OK"; } else { echo "mail send ... ERROR"; }


Estos son los encabezados que uso en mi script

$base = basename($_FILES[''upload''][''name'']); $file = fopen($randname_path,''rb''); $size = filesize($randname_path); $data = fread($file,$size); fclose($file); $data = chunk_split(base64_encode($data)); //boundary $div = "==Multipart_Boundary_x".md5(time())."x"; //headers $head = "From: $from/n". "MIME-Version: 1.0/n". "Content-Type: multipart/mixed;/n". " boundary=/"$div/""; //message $mess = "--$div/n". "Content-Type: text/plain; charset=/"iso-8859-1/"/n". "Content-Transfer-Encoding: 7bit/n/n". "$message/n/n". "--$div/n". "Content-Type: application/octet-stream; name=/"$base/"/n". "Content-Description: $base/n". "Content-Disposition: attachment;/n". " filename=/"$base/"; size=$size;/n". "Content-Transfer-Encoding: base64/n/n". "$data/n/n". "--$div/n"; $return = "-f$from";

http://asdlog.com/Create_form_to_send_email_with_attachment


También me enfrenté a un problema y encontré una buena respuesta. Puede utilizar esta función para múltiples adjuntos.

function mail_attachment($files, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message, $cc, $bcc) { $uid = md5(uniqid(time())); $header = "From: ".$from_name." <".$from_mail.">/r/n"; $header .= "Reply-To: ".$replyto."/r/n"; $header .= "cc : < $cc > /r/n" ; // comma saparated emails $header .= "Bcc : < $bcc >/r/n"; // comma saparated emails $header .= "MIME-Version: 1.0/r/n"; $header .= "Content-Type: multipart/mixed; boundary=/"".$uid."/"/r/n/r/n"; $header .= "This is a multi-part message in MIME format./r/n"; $header .= "--".$uid."/r/n"; $header .= "Content-type:text/html; charset=iso-8859-1/r/n"; $header .= "Content-Transfer-Encoding: 7bit/r/n/r/n"; $header .= $message."/r/n/r/n"; foreach ($files as $filename) { $file = $path.$filename; // path should be document root path. $name = basename($file); $file_size = filesize($file); $handle = fopen($file, "r"); $content = fread($handle, $file_size); fclose($handle); $content = chunk_split(base64_encode($content)); $header .= "--".$uid."/r/n"; $header .= "Content-Type: application/octet-stream; name=/"".$filename."/"/r/n"; // use different content types here $header .= "Content-Transfer-Encoding: base64/r/n"; $header .= "Content-Disposition: attachment; filename=/"".$filename."/"/r/n/r/n"; $header .= $content."/r/n/r/n"; } $header .= "--".$uid."--"; return mail($mailto, $subject, "", $header); }

Espero eso ayude.


$to = "[email protected]"; $from = "Website <[email protected]>"; $subject = "Test Attachment Email"; $separator = md5(time()); // carriage return type (we use a PHP end of line constant) $eol = PHP_EOL; // attachment name $filename = "document.pdf"; //$pdfdoc is PDF generated by FPDF $attachment = chunk_split(base64_encode($pdfdoc)); // main header $headers = "From: ".$from.$eol; $headers .= "MIME-Version: 1.0".$eol; $headers .= "Content-Type: multipart/mixed; boundary=/"".$separator."/""; // no more headers after this, we start the body! // $body = "--".$separator.$eol; $body .= "Content-Transfer-Encoding: 7bit".$eol.$eol; $body .= "This is a MIME encoded message.".$eol; // message $body .= "--".$separator.$eol; $body .= "Content-Type: text/html; charset=/"iso-8859-1/"".$eol; $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol; $body .= $message.$eol; // attachment $body .= "--".$separator.$eol; $body .= "Content-Type: application/octet-stream; name=/"".$filename."/"".$eol; $body .= "Content-Transfer-Encoding: base64".$eol; $body .= "Content-Disposition: attachment".$eol.$eol; $body .= $attachment.$eol; $body .= "--".$separator."--"; // send message if (mail($to, $subject, $body, $headers)) { echo "mail send ... OK"; } else { echo "mail send ... ERROR"; }

Qué he hecho:

  • Separar el cuerpo de los encabezados.
  • eliminado los EOL extra colocados antes de los separadores