Я работал над созданием формы для загрузки файлов с помощью PHPmailer для отправки в виде вложений.
Наконец-то я получил его, чтобы отправить электронное письмо, но его не отправил вложение. Вот моя форма HTML:
<input type="file" class="fileupload" name="images[]" size="80" />
И вот мой код процессора php:
<?php require("css/class.phpmailer.php"); //Variables Declaration $name = "the Submitter"; $email_subject = "Images Attachment"; $Email_msg ="A visitor submitted the following :\n"; $Email_to = "jonahkatz@yahoo.com"; // the one that recieves the email $email_from = "someone@someone.net"; $attachments = array(); // // //------Check TYPE------\\ uploadFile(); // //==============upload File Function============\\ // function uploadFile() { global $attachments; foreach($_FILES['images']['name'] as $key => $value) { // if(!empty($value)) { $filename = $value; //the Array will be used later to attach the files and then remove them from ser ver ! array_push($attachments, $filename); $dir = "uploads/$filename"; $success = copy($_FILES['images']['tmp_name'][$key], $dir); } // } $dir ="uploads/$filename"; if ($success) { echo " Files Uploaded Successfully<BR>"; SendIt(); // }else { exit("Sorry the server was unable to upload the files..."); } // } // //==== PHP Mailer With Attachment Func ====\\ // function SendIt() { // global $attachments,$name,$Email_to,$Email_msg,$email_subject,$email_from; // $mail = new PHPMailer(); $mail->IsQmail();// send via SMTP $mail->From = $email_from; $mail->FromName = $name; $mail->AddAddress($Email_to); $mail->AddReplyTo($email_from); $mail->WordWrap = 50;// set word wrap //now Attach all files submitted foreach($attachments as $key => $value) { //loop the Attachments to be added ... $mail->AddAttachment("uploads"."/".$value); } $mail->Body = $Email_msg."Name : ".$name"\n"; // $mail->IsHTML(false);// send as HTML $mail->Subject = $email_subject; if(!$mail->Send()) { echo "Message was not sent <p>"; echo "Mailer Error: " . $mail->ErrorInfo; exit; } // echo "Message has been sent"; // after mail is sent with attachments , delete the images on server ... foreach($attachments as $key => $value) {//remove the uploaded files .. unlink("uploads"."/".$value); } // } // ?>
Ive проверено, и файл IS сохраняется в каталоге «uploads». Вот ошибки, которые я получаю:
Files Uploaded Successfully Message was not sent Notice: Undefined property: phpmailer::$ErrorInfo in /usr/home/jak2234/public_html/new_form/phpmailerprocess.php on line 69 Mailer Error:
Если кто-нибудь может обнаружить ошибки или внести какой-то вклад, как это было бы так полезно! Заранее спасибо!
Иона
Ive заменен
foreach($attachments as $key => $value) { //loop the Attachments to be added ... $mail->AddAttachment("uploads"."/".$value);
С
foreach(array_keys($_FILES['files']['name']) as $key) { $source = $_FILES['files']['tmp_name'][$key]; // location of PHP's temporary file for this. $filename = $_FILES['files']['name'][$key]; // original filename from the client $mail->AddAttachment($source, $filename); }
И вот теперь мои новые ошибки:
Notice: Undefined index: files in /usr/home/jak2234/public_html/new_form/phpmailerprocess.php on line 58 Warning: array_keys() expects parameter 1 to be array, null given in /usr/home/jak2234/public_html/new_form/phpmailerprocess.php on line 58 Warning: Invalid argument supplied for foreach() in /usr/home/jak2234/public_html/new_form/phpmailerprocess.php on line 58 Strict Standards: Creating default object from empty value in /usr/home/jak2234/public_html/new_form/phpmailerprocess.php on line 68 Fatal error: Call to undefined method stdClass::IsHTML() in /usr/home/jak2234/public_html/new_form/phpmailerprocess.php on line 70
Как я уже сказал в вашем другом вопросе, первое предупреждение связано с тем, что вы используете $filename
в строке 10 вашего скрипта, не указав сначала значение для него:
$dir ="uploads/$filename"; // $filename has NOT been defined at this point.
Кроме того, для ваших приложений, почему бы просто не сделать:
foreach(array_keys($_FILES['files']['name']) as $key) { $source = $_FILES['files']['tmp_name'][$key]; // location of PHP's temporary file for this. $filename = $_FILES['files']['name'][$key]; // original filename from the client $mail->AddAttachment($source, $filename); }
Нет необходимости делать все копии файлов, создавать свои собственные пути и т. Д. Просто прикрепите временный файл PHP, созданный для вас, и назовите его любым исходным именем файла.
Ваш скрипт намного сложнее, чем нужно.