Отправить вложение файлов из формы с помощью phpMailer и PHP

У меня есть форму на example.com/contact-us.php которая выглядит так (упрощенная):

 <form method="post" action="process.php" enctype="multipart/form-data"> <input type="file" name="uploaded_file" id="uploaded_file" /> <input type="hidden" name="MAX_FILE_SIZE" value="10000000" /> </form> 

В моем файле process.php меня есть следующий код, использующий PHPMailer() для отправки электронной почты:

 require("phpmailer.php"); $mail = new PHPMailer(); $mail->From = me@example.com; $mail->FromName = My name; $mail->AddAddress(me@example.com,"John Doe"); $mail->WordWrap = 50; $mail->IsHTML(true); $mail->Subject = "Contact Form Submitted"; $mail->Body = "This is the body of the message."; 

Электронная почта отправляет тело правильно, но без вложения uploaded_file .

МОЙ ВОПРОС

Мне нужен файл uploaded_file из формы для прикрепления к письму и отправки. Я не забочусь о сохранении файла после того, как скрипт process.php отправит его по электронной почте.

Я понимаю, что мне нужно добавить AddAttachment(); где-то (я предполагаю под линией Body ) для вложения, которое нужно отправить. Но…

  1. Что я делаю в верхней части файла process.php для uploaded_file файла uploaded_file ? Как что-то, используя $_FILES['uploaded_file'] чтобы вытащить файл со страницы contact-us.php?
  2. Что входит в AddAttachment(); для файла, который будет прикреплен и отправлен вместе с электронной почтой, и где этот код должен идти?

Пожалуйста, помогите и сообщите код!

Пытаться:

 if (isset($_FILES['uploaded_file']) && $_FILES['uploaded_file']['error'] == UPLOAD_ERR_OK) { $mail->AddAttachment($_FILES['uploaded_file']['tmp_name'], $_FILES['uploaded_file']['name']); } 

Основной пример также можно найти здесь .

Определение функции для AddAttachment :

 public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') 

Файл не может быть прикреплен с клиентского ПК (загрузить)

В HTML-форме я не добавил следующую строку, поэтому вложение не было:

ENCTYPE = "многочастному / форм-данных"

После добавления вышеприведенной строки в форме (как показано ниже), приложение стало совершенным.

 <form id="form1" name="form1" method="post" action="form_phpm_mailer.php" enctype="multipart/form-data"> 

Вы должны использовать $_FILES['uploaded_file']['tmp_name'] , это путь, в котором PHP хранит загруженный файл (это временный файл, автоматически удаленный PHP при завершении скрипта, если вы не переместили его / скопировали в другом месте).

Предполагая, что ваши настройки на стороне клиента и серверные параметры загрузки верны, вам нечего делать, чтобы «вытащить» загрузку. Это будет просто волшебным образом доступно в этом пути tmp_name.

Обратите внимание, что вам необходимо подтвердить, что загрузка действительно сработала, например

 if ($_FILES['uploaded_file']['error'] === UPLOAD_ERR_OK) { ... attach file to email ... } 

В противном случае вы можете попытаться сделать вложение с поврежденным / частичным / несуществующим файлом.

Используйте этот код для отправки вложения с параметром upload file с помощью html-формы в phpmailer

  <form method="post" action="" enctype="multipart/form-data"> <input type="text" name="name" placeholder="Your Name *"> <input type="email" name="email" placeholder="Email *"> <textarea name="msg" placeholder="Your Message"></textarea> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input type="file" name="userfile" /> <input name="contact" type="submit" value="Submit Enquiry" /> </form> <?php if(isset($_POST["contact"])) { /////File Upload // In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead // of $_FILES. $uploaddir = 'uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); echo '<pre>'; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "File is valid, and was successfully uploaded.\n"; } else { echo "Possible invalid file upload !\n"; } echo 'Here is some more debugging info:'; print_r($_FILES); print "</pre>"; ////// Email require_once("class.phpmailer.php"); require_once("class.smtp.php"); $mail_body = array($_POST['name'], $_POST['email'] , $_POST['msg']); $new_body = "Name: " . $mail_body[0] . ", Email " . $mail_body[1] . " Description: " . $mail_body[2]; $d=strtotime("today"); $subj = 'New enquiry '. date("Ymd h:i:sa", $d); $mail = new PHPMailer(); // create a new object //$mail->IsSMTP(); // enable SMTP $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only ,false = Disable $mail->Host = "mail.yourhost.com"; $mail->Port = '465'; $mail->SMTPAuth = true; // enable $mail->SMTPSecure = true; $mail->IsHTML(true); $mail->Username = "admin@domain.net"; //from@domainname.com $mail->Password = "password"; $mail->SetFrom("admin@domain.net", "Your Website Name"); $mail->Subject = $subj; $mail->Body = $new_body; $mail->AddAttachment($uploadfile); $mail->AltBody = 'Upload'; $mail->AddAddress("recipient@domain.com"); if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo '<p> Success </p> '; } } ?> 

Используйте эту ссылку для справки.

Этот код поможет мне в отправке вложений ….

 $mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']); 

Замените код AddAttachment (…) кодом выше