Отправка вложений через php mailer. Почему не отправляются изображения?

Ссылка скопирована
11 марта 2026 1 ответ

Здравствуйте! php mailer не отправляет фотографии через сайт. Подскажите, пожалуйста, в чем тут дело? Может быть, потому что в исходном коде был 1 файл на отправку, а я накопировала 3?
Или в чем-то другом? я уже перепробовала множество решений, но файлы не отправляются. Как не исправить это, подскажите, пожалуйста? Третий день поливаю слезами ноутбук и ругаю себя за то, что залезла в это, но пути назад нет, очень нужна форма)) Еще ничего не стилизовала, ибо жалко время тратить в пустую, если в итоге ничего не работает)

сайт: antik88.ru

я не привожу тут код ,потому что сказала с git стандартный php mail и изменила в нем только адрес почтового ящика и еще количество файлов для загрузки

Отправка вложений через php mailer. Почему не отправляются изображения?

Дополнительно:

Это хостинг? Фото весит больше 2 мб?

  • я не привожу тут код ,потому что сказала с git стандартный php mail и изменила в нем только адрес почтового ящика и еще количество файлов для загрузки

    А без изменения количества файлов все работало?

  • Дмитрий, Да, это хостинг Beget, файл весит 100 кб)
  • ThunderCat, даже с одним файлом ничего не приходит. Как же мне понять, что происходит?
  • Дмитрий, форма для отправки файла, я ее вот тут нашла: https://webref.ru/html/form/enctype
    вроде с ней должно быть все в порядке..
  • Анна, ну первое что приходит в голову, это где то ошиблись в копировании, вот примерчик через mail Форма обратной связи, как сделать с вложением (прикреплением файлов)?
    вот пример загрузки на хост картинок, попробуйте на работу Как загружать несколько изображений php, input file?
  • Дмитрий, Спасибо, буду разбираться, но все дело в моей тупости, я даже не сделала папку на сервере для загрузки файлов, потому что не знала, что она нужна... кошмар)
  • При решении любых задач необходимо применять логику. Желательно не женскую, а формальную. Булеву.
    Если вам "очень нужна форма", то она у вас уже есть. Задача решена.

    Зачем вам в ней файлы - вы понятия не имеете. Но окей, если это такой дамский каприз, и вы жить без файлов не можете, то в любом случае это другая, отдельная задача. Не про формы.

    Эту задачу тоже надо решать с помощью логики.
    Разбивая её на отдельные элементы, приступая к следующему только после того, как выполнили предыдущий.
    При отправке файлов из формы у вас несколько этапов
    1. Отправка отправка одного файла из формы в РНР скрипт.
    2. Отправка файла, гарантированно имеющегося на сервере, на почту.
    3. Если отправка одного файла работает, а нужно больше, то добавить нужное количество и вернуться к п.1

    Вы проверили первый пункт? Зачем вам вообще сейчас phpmailer, если вы даже не знаете, загружены файлы на сервер, или нет? Вы попробовали отправить хотя бы один файл? Если нет, то зачем пытаетесь прыгать через три ступеньки?
    Некорректно спрашивать, почему не отправляются изображения, если вы даже не знаете, есть ли они у вас.

    И еще одно замечание из области логики.
    Писать посторонним людям вопрос "скажите почему мой код не работает, только я вам его не покажу" не очень логично.

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

    • Ипатьев, во-первых я безумно благодарна Вам, что Вы мне помогаете, Ваши ответы для меня бесценны.
      Зачем форма? Есть ссылки на вотсап и телеграмм, но мне кажется, что нужно ориентироваться и на людей, которым удобна форма заявки на сайте. Это сбор контактных данных. К тому же у всех абсолютно всех конкурентов она есть. Наличие формы говорит о том, что сайтом занимались не на коленке, это не просто ссылка на ватсап, как будто мошенники сляпали за 2 минуты, а серьезный сайт.
      Зачем файлы? это не дамский каприз. Мне нужно, чтобы клиенты присылали на оценку подробные фото антиквариата. Там не обойдешься одной фотографией, нужно несколько. Вдруг кто-то не пользуется телеграммом и ватсапом?
      Я не отправила полный код, потому что по количеству символов он сюда не помещается. Идея закинуть его с сторонний сервис типа CodePen посетила меня только сейчас)) Мне очень стыдно за свою тупость, но я должна осилить этот сайт. Я понимаю, что залезла в то, что мне совершенно не по силам. Но все же рассчитываю закончить сайт.
      Последний раз попробую победить эту форму с файлами, и ,если ничего не выйдет, буду создавать образ прогрессивных сайтоделов) без формы))
      Я убрала копированные input и отправила 1 файл весом 100 кб, формата jpg, и ничего не пришло.
      Подскажите, пожалуйста, как понять, в чем тут ошибка?
      https://codepen.io/qggsxsip-the-selector/pen/gOZaOdv
    • я писал выше, подробно, как понять в чем ошибка
    • Ипатьев, спасибо, большое, я буду стараться понять, были они загружены на сервер...
      Хотя мне уже проще принять решение исключить форму совсем)
      Благодарю Вас и хорошего Вам дня :)
    • Во втором примере вы делаете правильно - берете существующий файл и пытаетесь его отправить. Он приходит?
    • Ипатьев, к сожалению, приходит только информация с заполненных полей (имя, телефон, емейл и вопрос из textarea. Но вот на файл и намека нет, совсем ничего. Может быть, я что-то не указала в php mail. Буду искать инструкцию на русском к нему, может что-то надо дописать. Или вчитываться в каждую строчку кода. Или бросить это дело совсем) Мне самой уже противно задавать вопросы из серии "как крутить педали на велосипеде, очень хочу кататься")
    • проблема в том, что вы пытаетесь сразу ехать на одном колесе по канату.
      так никто не делает. никогда.
      люди учатся ездить на велосипеде постепенно
      сначала с дополнительными колесами
      потом по прямой
      потом учатся поворачивать и тормозить
      А вы залезли на канат, и всё удивляетесь - "почему я всё время падаю?"

      Я вам сто раз говорил - если вы учитесь отправлять файлы на почту, то только это и надо делать. А не сто тысяч других полей, и все это отборным говнокодом.
      Только ПОСЛЕ того как у вас получится отправить файл, надо соединять две части кода вместе - ту которая отправляет форму, и ту которая файлы.

      Я только сейчас увидел, что у вас код отправки файла абсолютно бессмысленный, он никогда не выполнится.

    • Ипатьев, я поняла, в чем тут дело! Нужна же папка на сервере! Вроде облачного хранилища, куда будут поступать загруженные с формы файлы! Я создала папку download, ввела данные FTP-аккаунта в php файл, но у меня вопрос: как теперь соединить этот код для файлов и код для отправки имени и телефона? Я же не могу просто взять 2 разных кода и засунуть в один файл. Уже пробовала, не работает, конечно. Вот код для изображений. отдельно он тоже не работает, в нем же не почтового адреса , а я не знаю, куда его вставить:
      <?php  function upload($filename) {  $login="ваш_логин"; $pass="ваш_пароль"; $host="имя_фтп"; $path="путь_к_папке";  $tmp = $_FILES[$filename]['tmp_name']; $aname = $_FILES[$filename]['name'];  $connect = ftp_connect($host); if(!$connect) exit(); $result = ftp_login($connect, $login, $pass); if ($result==false) exit(); if (ftp_chdir($connect, $path)) ftp_put($connect, $aname, $tmp, FTP_BINARY); else exit(); ftp_quit($connect); unlink($tmp);  };  if (isset($filename)) upload('filename')  ?>

      <?php function upload($filename) { $login="ваш_логин"; $pass="ваш_пароль"; $host="имя_фтп"; $path="путь_к_папке"; $tmp = $_FILES[$filename]['tmp_name']; $aname = $_FILES[$filename]['name']; $connect = ftp_connect($host); if(!$connect) exit(); $result = ftp_login($connect, $login, $pass); if ($result==false) exit(); if (ftp_chdir($connect, $path)) ftp_put($connect, $aname, $tmp, FTP_BINARY); else exit(); ftp_quit($connect); unlink($tmp); }; if (isset($filename)) upload('filename') ?>

    • Не нужны вам никакие данные FTP-аккаунта! У вас скрипт УЖЕ выполняется на "FTP-аккаунте"
      Если хотите оставлять файлы на сервере, то данные FTP-аккаунта вам самой понадобятся чтобы эти файлы смотреть.
      А загруженный файл надо только скопировать в папку. Ну или точнее сделать move_uploaded_file
    • Но вы опять скачете через три ступеньки.
      Вам серьезно надо перестать заниматься самодеятельностью, и начать делать так, как я говорю.
      У вас уже есть загруженный файл? В переменной $tmp что-то есть? Судя по коду формы, там ничего не должно быть.
    • Ипатьев, у меня получилось отправить картинку!!!! Да, это был тупой способ подбора рабочего кода, но все-таки)) Правда получилось с некоторой особенностью: сначала приходит письмо без картинки, потом с картинкой)) Но мне это не мешает, я так рада!!!
      Вот с помощью этой чудо-комбинациии все получилсь:
      <form enctype="multipart/form-data" method="post" id="feedback-form">             <label for="nameFF">Имя:</label>             <input type="text" name="nameFF" id="nameFF" required placeholder="например, Иван Иванович Иванов" x-autocompletetype="name" class="w100 border">             <label for="contactFF">Email:</label>             <input type="email" name="contactFF" id="contactFF" required placeholder="например, ivan@yandex.ru" x-autocompletetype="email" class="w100 border">             <label for="fileFF">Прикрепить файл:</label>             <input type="file" name="fileFF[]" multiple id="fileFF" class="w100">             <label for="messageFF">Сообщение:</label>             <textarea name="messageFF" id="messageFF" required rows="5" placeholder="Детали заявки…" class="w100 border"></textarea>             <br>             <input value="Отправить" type="submit" id="submitFF">             </form>

      <form enctype="multipart/form-data" method="post" id="feedback-form"> <label for="nameFF">Имя:</label> <input type="text" name="nameFF" id="nameFF" required placeholder="например, Иван Иванович Иванов" x-autocompletetype="name" class="w100 border"> <label for="contactFF">Email:</label> <input type="email" name="contactFF" id="contactFF" required placeholder="например, ivan@yandex.ru" x-autocompletetype="email" class="w100 border"> <label for="fileFF">Прикрепить файл:</label> <input type="file" name="fileFF[]" multiple id="fileFF" class="w100"> <label for="messageFF">Сообщение:</label> <textarea name="messageFF" id="messageFF" required rows="5" placeholder="Детали заявки…" class="w100 border"></textarea> <br> <input value="Отправить" type="submit" id="submitFF"> </form>

      document.getElementById('feedback-form').addEventListener('submit', function(evt){   var http = new XMLHttpRequest(), f = this;   evt.preventDefault();   http.open("POST", "mail.php", true);   http.onreadystatechange = function() {     if (http.readyState == 4 && http.status == 200) {       alert(http.responseText);       if (http.responseText.indexOf(f.nameFF.value) == 0) { // очистить поле сообщения, если в ответе первым словом будет имя отправителя         f.messageFF.removeAttribute('value');         f.messageFF.value='';       }     }   }   http.onerror = function() {     alert('Извините, данные не были переданы');   }   http.send(new FormData(f)); }, false);

      document.getElementById('feedback-form').addEventListener('submit', function(evt){ var http = new XMLHttpRequest(), f = this; evt.preventDefault(); http.open("POST", "mail.php", true); http.onreadystatechange = function() { if (http.readyState == 4 && http.status == 200) { alert(http.responseText); if (http.responseText.indexOf(f.nameFF.value) == 0) { // очистить поле сообщения, если в ответе первым словом будет имя отправителя f.messageFF.removeAttribute('value'); f.messageFF.value=''; } } } http.onerror = function() { alert('Извините, данные не были переданы'); } http.send(new FormData(f)); }, false);

      <?php if (isset ($_POST['contactFF'])) {   $to = "info@antik88.ru"; // поменять на свой электронный адрес   $from = $_POST['contactFF'];   $subject = "Заполнена контактная форма с ".$_SERVER['HTTP_REFERER'];   $message = "Имя: ".$_POST['nameFF']."nEmail: ".$from."nIP: ".$_SERVER['REMOTE_ADDR']."nСообщение: ".$_POST['messageFF'];   $boundary = md5(date('r', time()));   $filesize = '';   $headers = "MIME-Version: 1.0rn";   $headers .= "From: " . $from . "rn";   $headers .= "Reply-To: " . $from . "rn";   $headers .= "Content-Type: multipart/mixed; boundary="$boundary"rn";   $message=" Content-Type: multipart/mixed; boundary="$boundary"  --$boundary Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit  $message";   for($i=0;$i<count($_FILES['fileFF']['name']);$i++) {      if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {          $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));          $filename = $_FILES['fileFF']['name'][$i];          $filetype = $_FILES['fileFF']['type'][$i];          $filesize += $_FILES['fileFF']['size'][$i];          $message.="  --$boundary Content-Type: "$filetype"; name="$filename" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="$filename"  $attachment";      }    }    $message.=" --$boundary--";    if ($filesize < 10000000) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ     mail($to, $subject, $message, $headers);     echo $_POST['nameFF'].', Ваше сообщение получено, спасибо!';   } else {     echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';   } } ?>

      <?php if (isset ($_POST['contactFF'])) { $to = "info@antik88.ru"; // поменять на свой электронный адрес $from = $_POST['contactFF']; $subject = "Заполнена контактная форма с ".$_SERVER['HTTP_REFERER']; $message = "Имя: ".$_POST['nameFF']."nEmail: ".$from."nIP: ".$_SERVER['REMOTE_ADDR']."nСообщение: ".$_POST['messageFF']; $boundary = md5(date('r', time())); $filesize = ''; $headers = "MIME-Version: 1.0rn"; $headers .= "From: " . $from . "rn"; $headers .= "Reply-To: " . $from . "rn"; $headers .= "Content-Type: multipart/mixed; boundary="$boundary"rn"; $message=" Content-Type: multipart/mixed; boundary="$boundary" --$boundary Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit $message"; for($i=0;$i<count($_FILES['fileFF']['name']);$i++) { if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) { $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i]))); $filename = $_FILES['fileFF']['name'][$i]; $filetype = $_FILES['fileFF']['type'][$i]; $filesize += $_FILES['fileFF']['size'][$i]; $message.=" --$boundary Content-Type: "$filetype"; name="$filename" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="$filename" $attachment"; } } $message.=" --$boundary--"; if ($filesize < 10000000) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ mail($to, $subject, $message, $headers); echo $_POST['nameFF'].', Ваше сообщение получено, спасибо!'; } else { echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.'; } } ?>

    • Ипатьев, Спасибо Вам большое! Прям вот от души благодарю)
    • Ипатьев,

      Отправка вложений через php mailer. Почему не отправляются изображения?

      файл пришел на почту, при открывании картинки она скачивается в папку загрузки на комп, ей присваивается новое имя (1). Не знаю, что будет в дальнейшем, но вроде пока все работает как надо?

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Антон С. Ответ

    Для отправки вложений через PHP mailer, необходимо убедиться, что ваш код корректно обрабатывает и отправляет файлы. В случае, если изображения не отправляются, причина может быть в некорректной обработке вложений или нарушении правил формата файла.

    Вот пример кода на PHP для отправки изображения через PHP mailer:

    isSMTP();
        $mail->Host = 'smtp.example.com';
        $mail->SMTPAuth = true;
        $mail->Username = 'your@example.com';
        $mail->Password = 'yourpassword';
        $mail->SMTPSecure = 'tls';
        $mail->Port = 587;
     
        $mail->setFrom('from@example.com', 'Your Name');
        $mail->addAddress('recipient@example.com', 'Recipient Name');
     
        $mail->isHTML(true);
        $mail->Subject = 'Test';
        $mail->Body = 'This is a test email';
     
        $mail->AddAttachment('/path/to/image.jpg', 'image.jpg');
     
        $mail->send();
        echo 'Message has been sent';
    } catch (Exception $e) {
        echo 'Message could not be sent. Mailer Error: ' . $mail->ErrorInfo;
    }
    ?>

    isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'your@example.com'; $mail->Password = 'yourpassword'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('from@example.com', 'Your Name'); $mail->addAddress('recipient@example.com', 'Recipient Name'); $mail->isHTML(true); $mail->Subject = 'Test'; $mail->Body = 'This is a test email'; $mail->AddAttachment('/path/to/image.jpg', 'image.jpg'); $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo 'Message could not be sent. Mailer Error: ' . $mail->ErrorInfo; } ?>

    Проверьте, что путь к изображению указан правильно и файл существует по указанному пути. Также убедитесь, что размер файла не превышает ограничения почтового сервера.

    Если проблема не решается, возможно, что почтовый сервер блокирует отправку вложений из-за политики безопасности. В этом случае, рекомендуется связаться с администратором сервера или использовать сторонние сервисы для отправки изображений, например, через API почтовых сервисов или облачных хранилищ.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно