Как отправить несколько вложений в одну почту в php

Я хотел бы узнать о прикреплении нескольких вложений в одной почте и отправке. Пожалуйста, обратитесь к моему следующему ооду. В этом только один файл прикрепляется. Это второй файл. Первый файл совсем не рассматривается для прикрепления. Но файл создается правильно в указанном пути.

$filename=array($filenamee1 ,$filenamee2); for($x=0;$x<count($filename);$x++){ echo $path.$filename[$x]; $file = $path.$filename[$x]; $file_size = filesize($file); $handle = fopen($file, "r"); $content = fread($handle, $file_size); fclose($handle); $content = chunk_split(base64_encode($content)); $uid = md5(uniqid(time())); $name = basename($file); $header = "From: ".$from_name." <".$from_mail.">\r\n"; $header .= "cc: ".$mailtoCC."\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; $header .= "This is a multi-part message in MIME format.\r\n"; $header .= "--".$uid."\r\n"; $header .= "Content-type:text/html; charset=iso-8859-1\r\n"; $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; $header .= $message."\r\n\r\n"; $header .= "--".$uid."\r\n"; $header .= "Content-Type: application/octet-stream; name=\"".$filename[$x]."\"\r\n"; $header .= "Content-Transfer-Encoding: base64\r\n"; $header .= "Content-Disposition: attachment; filename=\"".$filename[$x]."\"\r\n\r\n"; $header .= $content."\r\n\r\n"; $header .= "--".$uid."--"; } if (mail($mailto, $subject, "", $header)) { echo "<br>mail sent Successfully... OK"; } else { echo "<br>mail send ... ERROR!"; } 

Следуя принципам повторного использования, вы можете использовать https://github.com/PHPMailer/PHPMailer

 <?php require 'PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup server $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'jswan'; // SMTP username $mail->Password = 'secret'; // SMTP password $mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted $mail->From = 'from@example.com'; $mail->FromName = 'Mailer'; $mail->addAddress('josh@example.net', 'Josh Adams'); // Add a recipient $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the HTML message body <b>in bold!</b>'; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; exit; } echo 'Message has been sent'; 

Источник: Как подключить два или несколько файлов и отправить почту в PHP

Это то, что я придумал для нескольких файлов с файлом имени файла формы:

 for($ct=0;$ct<count($_FILES['userfile']['tmp_name']);$ct++) { $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['userfile']['name'][$ct])); $filename =$_FILES['userfile']['name'][$ct]; if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) { $mail->addAttachment($uploadfile, $filename); } } if ($mail->send()) { echo "Sent"; } else { echo "Mailer Error: " . $mail->ErrorInfo; } 

Для тех, кто хочет отправить несколько файлов, используя phpMailer и несколько входных файлов. Я присоединился и использовал два вышеуказанных кода @Rishi и @Matheno для достижения этого результата, которые динамически добавляют вложения, выбранные пользователем.

В имени вашего входного файла не забудьте поставить скобки:

 <input type="file" multiple="multiple" name="attach_file[]" /> 

В файле отправки php:

Вместо:

 $mail->addAttachment('/var/tmp/file.tar.gz'); 

Использование:

 for($ct=0;$ct<count($_FILES['attach_file']['tmp_name']);$ct++){ $mail->AddAttachment($_FILES['attach_file']['tmp_name'][$ct],$_FILES['attach_file']['name'][$ct]); }