【问题标题】:Sending email with multiple attachments in php在php中发送带有多个附件的电子邮件
【发布时间】:2014-09-25 17:50:06
【问题描述】:

我正在使用具有邮件附件选项的 PHP 代码。当我有一个附件时,一切都很好,但是当我有两个或更多时,我只收到其中一个。另外,发送邮件时回显消息有问题,我没有收到任何消息。这是我使用的代码:

<?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 .= "\n 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:
\n Razred: " .$_POST['razred']. "
\n Boja: " .$_POST['boja']. "
\n Tip dlake: " .$_POST['tip_dlake']. "
\n Velicina: " .$_POST['velicina']. "
\n Pol: " .$_POST['pol']. "
\n Visina: " .$_POST['visina']. "
\n Tezina: " .$_POST['tezina']. "
\n Ime psa: " .$_POST['ime_psa']. "
\n Broj pedigra: " .$_POST['broj_pedigrea']. "
\n Datum rodjenja: " .$_POST['datum_rodjenja']. "
\n Otac: " .$_POST['otac']. "
\n Broj pedigrea oca: " .$_POST['broj_pedigrea_oca']. "
\n Majka: " .$_POST['majka']. "
\n Broj pedigra majke: " .$_POST['broj_pedigra_majke']. "
\n Odgajivac: " .$_POST['odgajivac']. "
\n
\nPODACI O VLASNIKU
\n Ime: " .$_POST['ime']. "
\n Adresa: " .$_POST['adresa']. "
\n Grad: " .$_POST['grad']. "
\n Drzava: " .$_POST['drzava']. "
\n Telefon: " .$_POST['telefon']. "
\n Email adresa: " .$_POST['email_adresa'];

  $headers = "From: $from\r\n";

  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\r\n" .
      "Content-Type: multipart/mixed;\r\n" .
      " boundary=\"{$mime_boundary}\"";

    $message .= "\n\n\nThis is a multi-part message in MIME format.\n\n" .
      "--{$mime_boundary}\n" .
      "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
      "Content-Transfer-Encoding: 7bit\n\n" .
      $message . "\n\n";

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

  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>';
  }
}

?>

【问题讨论】:

    标签: php email mime


    【解决方案1】:

    我遇到了一些问题。我使用 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";
    }
    ?>
    

    您可以使用外部 SMTP,例如 mandrill 或 Google SMTP,也可以使用您的服务器 SMTP。

    这里有一个不错的 phpmailler 教程。

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

    【讨论】:

    • 只能用于附件吗?我对 php 不是很好,大部分代码都是我的朋友写的,他不在这里 atm 所以我卡住了……我不确定我能不能做到:S
    【解决方案2】:

    这是有效的代码

    <?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\r\n" .
     "MIME-Version: 1.0\r\n" .
      "Content-Type: multipart/mixed;\r\n" .
      " 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:
    \n Razred: " .$_POST['razred']. "
    \n Boja: " .$_POST['boja']. "
    \n Tip dlake: " .$_POST['tip_dlake']. "
    \n Velicina: " .$_POST['velicina']. "
    \n Pol: " .$_POST['pol']. "
    \n Visina: " .$_POST['visina']. "
    \n Tezina: " .$_POST['tezina']. "
    \n Ime psa: " .$_POST['ime_psa']. "
    \n Broj pedigra: " .$_POST['broj_pedigrea']. "
      \n Datum rodjenja: " .$_POST['datum_rodjenja']. "
    \n Otac: " .$_POST['otac']. "
    \n Broj pedigrea oca: " .$_POST['broj_pedigrea_oca']. "
    \n Majka: " .$_POST['majka']. "
    \n Broj pedigra majke: " .$_POST['broj_pedigra_majke']. "
    \n Odgajivac: " .$_POST['odgajivac']. "
    \n
    \nPODACI O VLASNIKU
    \n Ime: " .$_POST['ime']. "
    \n Adresa: " .$_POST['adresa']. "
    \n Grad: " .$_POST['grad']. "
    \n Drzava: " .$_POST['drzava']. "
    \n Telefon: " .$_POST['telefon']. "
    \n 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.\n\n" .
      "--{$mime_boundary}\n" .
      "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
      "Content-Transfer-Encoding: 7bit\n\n" .
    $message . "\n\n";
    
    // 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}\n" .
            "Content-Type: {$type};\n" .
            " name=\"{$name}\"\n" .
            "Content-Disposition: attachment;\n" .
            " filename=\"{$fileatt_name}\"\n" .
            "Content-Transfer-Encoding: base64\n\n" .
         $data . "\n\n";
       }
    }
    // here's our closing mime boundary that indicates the last of the message
    $message.="--{$mime_boundary}--\n";
    // now we just send the message
    if (mail($to, $subject, $message, $headers))
      echo "Message Sent";
    else
      echo "Failed to send";}
    ?> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 2021-12-30
      • 2021-09-14
      • 1970-01-01
      • 2014-05-29
      • 2020-11-20
      相关资源
      最近更新 更多