Respuesta: Enviar mail con archivo adjunto Código PHP: # Validacion de Datos function ValidarDatos($campo){ //Array con las posibles cabeceras a utilizar por un spammer $badHeads = array("Content-Type:", "MIME-Version:", "Content-Transfer-Encoding:", "Return-path:", "Subject:", "From:", "Envelope-to:", "To:", "bcc:", "cc:"); foreach($badHeads as $valor){ if(strpos(strtolower($campo), strtolower($valor)) !== false){ return false; } } return true; } function ReemplazarHeader($campo){ //Array con las posibles cabeceras a utilizar por un spammer $badHeads = array( array(0=>"[ \t]{0,3}Content-Type:[ \t]{1}",1=>" '*Content-Type:*' "), array(0=>"[ \t]{0,3}MIME-Version:[ \t]{1}",1=>" '*MIME-Version:*' "), array(0=>"[ \t]{0,3}Content-Transfer-Encoding:[ \t]{1}",1=>" '*Content-Transfer-Encoding:*' "), array(0=>"[ \t]{0,3}Return-path:[ \t]{1}",1=>" '*Return-path:*' "), array(0=>"[ \t]{0,3}Subject:[ \t]{1}",1=>" '*Subject:*' "), array(0=>"[ \t]{0,3}From:[ \t]{1}",1=>" '*From:*' "), array(0=>"[ \t]{0,3}Envelope-to:[ \t]{1}",1=>" '*Envelope-to:*' "), array(0=>"[ \t]{0,3}(T|t)o:[ \t]{1}",1=>" '*To:*' "), array(0=>"[ \t]{0,3}bcc:[ \t]{1}",1=>" '*bcc:*' "), array(0=>"[ \t]{0,3}cc:[ \t]{1}",1=>" '*cc:*' ") ); foreach($badHeads as $a_badheader){ $campo = eregi_replace($a_badheader[0], $a_badheader[1], $campo); } return $campo; } function CodificarQP ($str) {global $eol; $encoded = ArreglarEOL($str); if (substr($encoded, -(strlen($eol))) != $eol) $encoded .= $eol; $encoded = preg_replace('/([\000-\010\013\014\016-\037\075\177-\377])/e', "'='.sprintf('%02X', ord('\\1'))", $encoded); $encoded = preg_replace("/([\011\040])".$eol."/e", "'='.sprintf('%02X', ord('\\1')).'".$eol."'", $encoded); $encoded = AdaptarTexto($encoded, 74, true); return $encoded; } function ArreglarEOL($str) {global $eol; $str = str_replace("\r\n", "\n", $str); $str = str_replace("\r", "\n", $str); $str = str_replace("\n", $eol, $str); return $str; } function AdaptarTexto($message, $length, $qp_mode = false) { global $eol; $soft_break = ($qp_mode) ? sprintf(" =%s", $eol) : $eol; $message = ArreglarEOL($message); if (substr($message, -1) == $eol) $message = substr($message, 0, -1); $line = explode($eol, $message); $message = ""; for ($i=0 ;$i < count($line); $i++) {$line_part = explode(" ", $line[$i]); $buf = ""; for ($e = 0; $e<count($line_part); $e++) { $word = $line_part[$e]; if ($qp_mode and (strlen($word) > $length)) { $space_left = $length - strlen($buf) - 1; if ($e != 0) { if ($space_left > 20) { $len = $space_left; if (substr($word, $len - 1, 1) == "=") $len--; elseif (substr($word, $len - 2, 1) == "=") $len -= 2; $part = substr($word, 0, $len); $word = substr($word, $len); $buf .= " " . $part; $message .= $buf . sprintf("=%s", $eol); } else {$message .= $buf . $soft_break;} $buf = ""; } while (strlen($word) > 0) { $len = $length; if (substr($word, $len - 1, 1) == "=") $len--; elseif (substr($word, $len - 2, 1) == "=") $len -= 2; $part = substr($word, 0, $len); $word = substr($word, $len); if (strlen($word) > 0) $message .= $part . sprintf("=%s", $eol); else $buf = $part; } } else { $buf_o = $buf; $buf .= ($e == 0) ? $word : (" " . $word); if (strlen($buf) > $length and $buf_o != "") { $message .= $buf_o . $soft_break; $buf = $word; } } } $message .= $buf . $eol; } return $message; } $s_mailer_type = 'mail'; if (!file_exists('E:/php5/PhpCommon/fzo.mail.php') && $s_mailer_type == 'smtp') { $s_mailer_type = 'mail'; } if ($s_mailer_type == 'smtp') { function _fzo_mail( $s_to, $s_subject, $s_message, $s_additional_headers='') { require_once("fzo.mail.php"); global $eol; if (empty($eol)) { $eol = "\n"; } $mail = new SMTP("localhost",'',''); $s_from = '[email protected]'; if (empty($s_from) || $s_from == ('<!--%' . 'email_from_address' . '%-->')) { $s_host = $_SERVER["HTTP_HOST"]; $s_host = ereg_replace("www\.", "", $s_host); $s_from = "no-reply@" . $s_host; } $s_header = $mail->make_header( $s_from, $s_to, $s_subject, '3', '', '' ); $s_additional_headers = trim($s_header) . $eol . $s_additional_headers; // Se envia el correo y se verifica el error $error = $mail->smtp_send($s_from, $s_to, $s_additional_headers, $s_message, '', ''); if ($error == "0") { //echo "E-mail enviado correctamente"; return true; }else {//echo "Error al enviar email: " . $error . "\n"; return false;} } } # Is the OS Windows or Mac or Linux if (strtoupper(substr(PHP_OS,0,3)=='WIN')) { $eol="\r\n"; } elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) { $eol="\r"; } else { $eol="\n"; } $now = date("YmdHis"); $s_mailer_enabled = 'TRUE'; # To Email Address $emailaddress="[email protected]"; $emailaddressfrom="[email protected]"; # Message Subject $emailsubject="email de contacto desde el sitio www.litoralrrhh.com.ar "; # Message Body $body_txt_prefix_data=""; $body_txt_separator_data=": "; $body_txt_sufix_data=$eol; $body_txt_prefix="Datos del Formulario:".$eol; $body_txt_data=""; $body_txt_sufix=$eol."www.litoralrrhh.com.ar"; $body_html_prefix_data = "<tr> <td>"; $body_html_separator_data=": </td><td>"; $body_html_sufix_data="</td> </tr> "; $body_html_prefix="<html> <body> <table> <tr> <td colspan=\"2\">Datos del Formulario:</td> </tr>"; $body_html_data=""; $body_html_sufix=" <tr> <td colspan=\"2\"><br/>www.litoralrrhh.com.ar</td> </tr> </table> </body> </html>"; # Get Data foreach($_POST as $s_name => $s_value) { if (strtolower($s_name) != 'submit') { $s_name = ucwords(str_replace("_"," ",$s_name)); $s_value = stripslashes ($s_value); $body_txt_data.=$body_txt_prefix_data.$s_name.$body_txt_separator_data.$s_value.$body_txt_sufix_data; $body_html_data.=$body_html_prefix_data.$s_name.$body_html_separator_data.$s_value.$body_html_sufix_data; } } # Merge Data $body_txt=$body_txt_prefix.$body_txt_data.$body_txt_sufix; $body_html=$body_html_prefix.$body_html_data.$body_html_sufix; $body_txt = ReemplazarHeader($body_txt); $body_html = ReemplazarHeader($body_html); # Common Headers $headers .= 'From: '.$emailaddressfrom.$eol; $headers .= 'Reply-To: '.$emailaddressfrom.$eol; $headers .= 'Return-Path: '.$emailaddressfrom.$eol; // these two to set reply address $headers .= "X-Mailer: PHP v".phpversion().$eol; // These two to help avoid spam-filters # Boundry for marking the split & Multitype Headers $mime_boundary=md5(time()); $headers .= 'MIME-Version: 1.0'.$eol; # Setup for text OR html $headers .= "Content-Type: multipart/alternative; boundary=\"".$mime_boundary."\"".$eol; $headers .= "Message-ID: <".$now.".TheSystem@".$_SERVER['SERVER_NAME'].">".$eol; $msg = ""; # Text Version $msg .= "--".$mime_boundary.$eol; $msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol; $msg .= "Content-Transfer-Encoding: quoted-printable".$eol.$eol; $msg .= CodificarQP($body_txt).$eol; # HTML Version $msg .= "--".$mime_boundary.$eol; $msg .= "Content-Type: text/html; charset=iso-8859-1".$eol; $msg .= "Content-Transfer-Encoding: quoted-printable".$eol.$eol; $msg .= CodificarQP("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">").$eol; $msg .= CodificarQP($body_html).$eol.$eol; # Setup for attachment $msg .= "Content-Type: multipart/related".$eol; # Attachment $msg .= "--".$mime_boundary.$eol; $msg .= "Content-Type: application/msword; name=\"".$letter."\"".$eol; // sometimes i have to send MS Word, use 'msword' instead of 'pdf' $msg .= "Content-Transfer-Encoding: base64".$eol; $msg .= "Content-Disposition: attachment; filename=\"".$letter."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !! $msg .= $f_contents.$eol.$eol; # Finished $msg .= "--".$mime_boundary."--".$eol.$eol; // finish with two eol's for better security. see Injection. //Ejemplo de llamadas a la funcion if(ValidarDatos($emailaddress) && ValidarDatos($emailsubject) /*&& ValidarDatos($body_txt) && ValidarDatos($body_html)*/){ # SEND THE EMAIL if ($s_mailer_enabled == 'TRUE') { if ($s_mailer_type=='smtp') { $resp = _fzo_mail($emailaddress, $emailsubject, $msg, $headers); } else {$resp = mail($emailaddress, $emailsubject, $msg, $headers); } }else { $resp = false; } } else {$resp = false;} if($resp) {$s_location = "fs_ok_form.html";} else {$s_location = "fs_error_form.html";} header("Location: ./$s_location"); |