在php中发送带有多个附件的电子邮件

I'm using PHP code that have option for attachment in mail. Everything works great when I have one attachment, but when I have two or more I receive only one of them. Also, I have a problem with echo message when mail is sent, I don't receive any message. Here is the code I use:

<?php

if ($_SERVER['REQUEST_METHOD']=="POST"){

  $to="mares.p@hotmail.com";
  $subject="Online Prijava";
  $from = stripslashes($_POST['ime'])."<".stripslashes($_POST['email_adresa']).">";

  if(empty($_POST['ime']) || empty($_POST['email_adresa']))
  {
    $errors .= "
 Greska: nisu uneta sva obavezna polja";
  }

  $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";

  $tmp_name = $_FILES['fotokopija_uplatnice']['tmp_name'];
  $type = $_FILES['fotokopija_uplatnice']['type'];
  $file_name = $_FILES['fotokopija_uplatnice']['name'];
  $size = $_FILES['fotokopija_uplatnice']['size'];

  $message = "PODACI U PSU:

 Razred: " .$_POST['razred']. "

 Boja: " .$_POST['boja']. "

 Tip dlake: " .$_POST['tip_dlake']. "

 Velicina: " .$_POST['velicina']. "

 Pol: " .$_POST['pol']. "

 Visina: " .$_POST['visina']. "

 Tezina: " .$_POST['tezina']. "

 Ime psa: " .$_POST['ime_psa']. "

 Broj pedigra: " .$_POST['broj_pedigrea']. "

 Datum rodjenja: " .$_POST['datum_rodjenja']. "

 Otac: " .$_POST['otac']. "

 Broj pedigrea oca: " .$_POST['broj_pedigrea_oca']. "

 Majka: " .$_POST['majka']. "

 Broj pedigra majke: " .$_POST['broj_pedigra_majke']. "

 Odgajivac: " .$_POST['odgajivac']. "



PODACI O VLASNIKU

 Ime: " .$_POST['ime']. "

 Adresa: " .$_POST['adresa']. "

 Grad: " .$_POST['grad']. "

 Drzava: " .$_POST['drzava']. "

 Telefon: " .$_POST['telefon']. "

 Email adresa: " .$_POST['email_adresa'];

  $headers = "From: $from
";

  if (file_exists($tmp_name)){
    if(is_uploaded_file($tmp_name)){
      $file = fopen($tmp_name,'rb');
      $data = fread($file,filesize($tmp_name));
      fclose($file);
      $data = chunk_split(base64_encode($data));
    }

    $headers .= "MIME-Version: 1.0
" .
      "Content-Type: multipart/mixed;
" .
      " boundary=\"{$mime_boundary}\"";

    $message .= "


This is a multi-part message in MIME format.

" .
      "--{$mime_boundary}
" .
      "Content-Type: text/plain; charset=\"iso-8859-1\"
" .
      "Content-Transfer-Encoding: 7bit

" .
      $message . "

";

    $message .= "--{$mime_boundary}
" .
      "Content-Type: {$type};
" .
      " name=\"{$file_name}\"
" .
      //"Content-Disposition: attachment;
" .
      //" filename=\"{$fileatt_name}\"
" .
      "Content-Transfer-Encoding: base64

" .
      $data . "

" .
      "--{$mime_boundary}--
";
  }

  if (mail($to, $subject, $message, $headers))
  {
    echo '<div><center><h1>Prijava uspesno poslata.</h1></center></div>';
  } else {
    echo '<div><center><h1>Greska prilikom slanja prijave. Molimo pokusajte ponovo.</h1></center></div>';
  }
}

?>

i had a some problem . i solved it using phpmailer

<?php 
require "classes/class.phpmailer.php"; // include the class name
$mail = new PHPMailer();
$mail->isSMTP();    
$mail->SMTPAuth = true;                                 
$mail->Host = 'xx';           
$mail->Username = 'xxxx'; 
$mail->Password = 'xx';
$mail->Port = xxx;
$mail->setFrom('ixx@.123com','ixx@.123com');
$mail->addAddress('ixx@.123com','ixx@.123com');
$mail->AddAttachment("1.jpg"); //Attach a file here
$mail->AddAttachment("2.jpg"); //Attach a file here
$mail->AddAttachment("3.jpg"); //Attach a file here
$mail->AddAttachment("4.jpg"); //Attach a file here
$mail->MsgHTML("<b>Two Attachment. Great Job!.. <br/>"); //Put your body of the message you can place html code here
//send the message, check for errors
$mail->IsHTML(true);
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "SENDING";
}
?>

You can use external SMTP like mandrill or Google SMTP or you can use your server SMTP .

here is a nice tutorial for phpmailler .

http://www.asif18.com/7/php/send-mails-using-smtp-in-php-by-gmail-server-or-own-domain-server/

here is code that work

<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){

$to="mares.p@hotmail.com";
$subject="Online Prijava";
$from = stripslashes($_POST['ime'])."<".stripslashes($_POST['email_adresa']).">";

// generate a random string to be used as the boundary marker
 $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";

// now we'll build the message headers
$headers = "From: $from
" .
 "MIME-Version: 1.0
" .
  "Content-Type: multipart/mixed;
" .
  " boundary=\"{$mime_boundary}\"";

// here, we'll start the message body.
// this is the text that will be displayed
// in the e-mail
  $message = "PODACI U PSU:

 Razred: " .$_POST['razred']. "

 Boja: " .$_POST['boja']. "

 Tip dlake: " .$_POST['tip_dlake']. "

 Velicina: " .$_POST['velicina']. "

 Pol: " .$_POST['pol']. "

 Visina: " .$_POST['visina']. "

 Tezina: " .$_POST['tezina']. "

 Ime psa: " .$_POST['ime_psa']. "

 Broj pedigra: " .$_POST['broj_pedigrea']. "
  
 Datum rodjenja: " .$_POST['datum_rodjenja']. "

 Otac: " .$_POST['otac']. "

 Broj pedigrea oca: " .$_POST['broj_pedigrea_oca']. "

 Majka: " .$_POST['majka']. "

 Broj pedigra majke: " .$_POST['broj_pedigra_majke']. "

 Odgajivac: " .$_POST['odgajivac']. "



PODACI O VLASNIKU

 Ime: " .$_POST['ime']. "

 Adresa: " .$_POST['adresa']. "

 Grad: " .$_POST['grad']. "

 Drzava: " .$_POST['drzava']. "

 Telefon: " .$_POST['telefon']. "

 Email adresa: " .$_POST['email_adresa'];

// next, we'll build the invisible portion of the message body
// note that we insert two dashes in front of the MIME boundary
// when we use it
$message = "This is a multi-part message in MIME format.

" .
  "--{$mime_boundary}
" .
  "Content-Type: text/plain; charset=\"iso-8859-1\"
" .
  "Content-Transfer-Encoding: 7bit

" .
$message . "

";

// now we'll process our uploaded files
foreach($_FILES as $userfile){
  // store the file information to variables for easier access
  $tmp_name = $userfile['tmp_name'];
  $type = $userfile['type'];
  $name = $userfile['name'];
  $size = $userfile['size'];

  // if the upload succeded, the file will exist
  if (file_exists($tmp_name)){

     // check to make sure that it is an uploaded file and not a system file
     if(is_uploaded_file($tmp_name)){

        // open the file for a binary read
        $file = fopen($tmp_name,'rb');

        // read the file content into a variable
        $data = fread($file,filesize($tmp_name));

        // close the file
        fclose($file);

        // now we encode it and split it into acceptable length lines
        $data = chunk_split(base64_encode($data));
     }

     // now we'll insert a boundary to indicate we're starting the attachment
     // we have to specify the content type, file name, and disposition as
     // an attachment, then add the file content.
     // NOTE: we don't set another boundary to indicate that the end of the
     // file has been reached here. we only want one boundary between each file
     // we'll add the final one after the loop finishes.
     $message .= "--{$mime_boundary}
" .
        "Content-Type: {$type};
" .
        " name=\"{$name}\"
" .
        "Content-Disposition: attachment;
" .
        " filename=\"{$fileatt_name}\"
" .
        "Content-Transfer-Encoding: base64

" .
     $data . "

";
   }
}
// here's our closing mime boundary that indicates the last of the message
$message.="--{$mime_boundary}--
";
// now we just send the message
if (mail($to, $subject, $message, $headers))
  echo "Message Sent";
else
  echo "Failed to send";}
?>