PHP que envía correos electrónicos con archivos adjuntos: el correo electrónico no se envía en absoluto

Después de intentar leer varios artículos sobre el envío de correos electrónicos con archivos adjuntos en PHP (estoy acostumbrado a ASP con VBScript), escribí el código a continuación. Desafortunadamente, no funciona en absoluto. No solo no envía el correo electrónico con el archivo adjunto, sino que el correo electrónico no parece enviarse en absoluto, aunque mi secuencia de comandos dice que sí lo envió. ¿Dónde me he equivocado? No estoy usando un formulario para cargar un archivo. Este es un script estático.

<?php

$EmailTo = "Me@here.com";
$EmailFrom = "You@There.com";
$EmailSubject = "The Email Subject";

$MailBoundary = md5(uniqid(time()));

$Headers = "To: ". $EmailTo . "\r\n";
$Headers .= "From: ". $EmailFrom . "\r\n";
$Headers = "MIME-Version: 1.0\r\n";
$Headers .= "Content-type: multipart/mixed;boundary=\"$MailBoundary \"";
$Headers .= "\r\n\r\n";
$Headers .= "This is a multi-part message in MIME format.";
$Headers .= "\r\n\r\n";

$FileAttachment = "AttachedFile.pdf";
$File = fopen($FileAttachment, "r");
$FileData = fread($File, filesize($FileAttachment));
$FileData = chunk_split(base64_encode($FileData));
$FileName = basename($FileAttachment);

$EmailBody = "--$MailBoundary\r\n";
$EmailBody .= "Content-type: text/html; charset=iso-8859-1\r\n";
$EmailBody .= "Content-transfer-encoding: 8bit\r\n\r\n";

$EmailBody .= "<html>" . chr(13) .
              "<head>" . chr(13) .
              "<style>" . chr(13) .
              ".breg {font-family:arial;font-size:10pt;color:#000000;padding:5px;}" . chr(13) .
              "</style>" . chr(13) .
              "</head>" . chr(13) .
              "<body>" . chr(13) .
              "<div class=" . chr(34) . "breg" . chr(34) . ">" . chr(13) .
              "The message text body goes here" . chr(13) .
              "</div>" . chr(13) .
              "</body>" . chr(13) .
              "</html>";

$EmailBody .= "--$MailBoundary\r\n";


$EmailBody .= "Content-type: " . mime_content_type($File) . "; name=$FileName\r\n";
$EmailBody .= "Content-transfer-encoding:base64\r\n\r\n";
$EmailBody .= $FileData. "\r\n\r\n";

$EmailBody .= " --$MailBoundary--";

if (mail($EmailTo, $EmailSubject, $EmailBody, $Headers))
{
 echo "Email to " . $EmailTo . " has been sent" . chr(13) . "<br />" . chr(13);
}
else
{
 echo "<b>Email to " . $EmailTo . " was not sent</b>" . chr(13) . "<br />" . chr(13);
}

?>

preguntado el 12 de junio de 12 a las 21:06

¿Ha intentado eliminar todas las cosas adicionales y simplemente enviar un correo electrónico mínimo para asegurarse de que la llamada de correo funcione correctamente? Si eso funciona, puede volver a agregar funcionalidad lentamente hasta que encuentre la parte que impide que funcione. -

Dejaría de intentarlo con php mail () tiene muy poca potencia, eche un vistazo a phpmailer u otra calss:

¿Quizás deberías usar la clase PHPMailer en su lugar? google para este -

Sí, puedo enviar un correo electrónico básico. Entonces sé que mail() está funcionando -

No tengo idea si PHPMailer está disponible en el servidor con el que estoy trabajando. -

2 Respuestas

For sending mail with attachment using php mail().Try this code:

<?php

 //If there is no error, send the email
 if(isset($_POST['ur_submit_button_name'])) {
  $EmailTo = "Me@here.com";
  $EmailFrom = "You@There.com";
  $EmailSubject = "The Email Subject";


  $separator = md5(time());

  // carriage return type (we use a PHP end of line constant)
  $eol = PHP_EOL;

  // attachment name
  $filename = "ip.zip";//store that zip file in ur root directory
  $attachment = chunk_split(base64_encode(file_get_contents('ip.zip')));

  // 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)) {
  $mail_sent=true;
  echo "mail sent";
  } else {
  $mail_sent=false;
  echo "Error,Mail not sent";

 }
}

?>

Respondido el 20 de junio de 12 a las 05:06

correo no enviar lo que tenemos que hacer .? - Rishi Shrivastava

¡estupendo! Funcionó para mí solo después de que noté sus comillas dobles alrededor del juego de caracteres: "Content-Type:text/plain; charset=\"iso-8859-1\"".$eol - desbloqueador

Creo que tiene un error en el contenido de su correo electrónico, genere su contenido de correo electrónico con la función imap_mail_compose:

mail('', 'message subject', '', imap_mail_compose(array header, array body)); 

Respondido el 22 de junio de 12 a las 14:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.