Send email attachments - sendmail function

Asked

Viewed 260 times

0

I am developing a code in which I can send emails to my clients with several attachments, I have already made my code and it works , but in the attachments appears a file that I did not attach, I was wondering if anyone knows how to delete it. My code is this::

public function sendMail($to, $from, $subject, $msg_text, $msg_html, $to_name, $from_name, $bcc, $id_contabilidade_faturacao) {
        for($i=0; $i < count($_FILES['FILE']['name']); $i++){

            $ftype[] = $_FILES['FILE']['type'][$i];
            $fname[] = $_FILES['FILE']['name'][$i];
            $ftmp[] = $_FILES['FILE']['tmp_name'][$i];
            $fsize[] = $_FILES['FILE']['size'][$i];
        }
    // array with filenames to be sent as attachment
        $files = $fname;

        // email fields: to, from, subject, and so on

        $headers = "From: ".$from_name." <".$from.">";

        // boundary 
        $semi_rand = md5(time()); 
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

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

        // multipart boundary 
            $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" . $msg_text . "\n\n"; 
            $message .= "--{$mime_boundary}\n";

            // preparing attachments
            for($x=0;$x<count($files);$x++){
                $tmpFilePath[$x] = $ftmp[$x];
                $newFilePath[$x] = dirname(__FILE__ ).'/import/' . $files[$x];
                move_uploaded_file($tmpFilePath[$x], $newFilePath[$x]);

                $file = fopen($newFilePath[$x],"r");
                $data = fread($file,$fsize[$x]);
                fclose($file);
                $data = chunk_split(base64_encode($data));
                $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$files[$x]\"\n" . 
                "Content-Disposition: attachment;\n" . " filename=\"$files[$x]\"\n" . 
                "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                $message .= "--{$mime_boundary}\n";
            }

            // send

            $ok = @mail($to, $subject, $message, $headers); 
}
  • Use the Phpmailer. It’s the easiest option.

  • The mail function has several problems, mainly between operating systems. I recommend using Switftmailer. It’s a modern, well-written library.

  • I’m using Prestashop 1.6 and had trouble adding more than one attachment to the email, so I changed it because I couldn’t add multiple files if anyone had any idea how to thank you.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.