Подтвердить что ты не робот

Отправить вложение файлов из формы с помощью 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     = [email protected];
$mail->FromName = My name;
$mail->AddAddress([email protected],"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 script отправит его по электронной почте.

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

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

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

4b9b3361

Ответ 1

Try:

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')

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

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

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

Ответ 4

Используйте этот код для отправки вложения с параметром файла загрузки с использованием формы 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("Y-m-d 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 = "[email protected]"; //[email protected]
            $mail->Password = "password";
            $mail->SetFrom("[email protected]", "Your Website Name");
            $mail->Subject = $subj;
            $mail->Body    = $new_body;

            $mail->AddAttachment($uploadfile);

            $mail->AltBody = 'Upload';
            $mail->AddAddress("[email protected]");
             if(!$mail->Send())
                {
                echo "Mailer Error: " . $mail->ErrorInfo;
                }
                else
                {

                echo '<p>       Success              </p> ';

                }

        }



?>

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

Ответ 5

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

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

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