Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему не работает мой код?

Александр Шипилов Ученик (91), на голосовании 1 год назад
подскажите почему код не работает
<form action="ff.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Отправить">
</form>
<?php
$to = ' f@ya.ru ';
$subject = 'Новое сообщение';
$message = $_POST['message'];
$file = $_FILES['file']['tmp_name'];
$filename = $_FILES['file']['name'];
$file_content = file_get_contents($file);
mail($to, $subject, $message,$file_content);

?>
Голосование за лучший ответ
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (263840) 1 год назад
Лучше поискать готовые решения типа этого:


  
// Импортируем классы PHPMailer в глобальное пространство имен
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// Подключаем автозагрузчик Composer
require 'vendor/autoload.php';

// Создаем новый экземпляр PHPMailer
$mail = new PHPMailer(true);

try {
// Устанавливаем почтовик на использование SMTP
$mail->isSMTP();
// Указываем основной и резервный SMTP-серверы
$mail->Host = 'smtp.example.com';
// Включаем SMTP-аутентификацию
$mail->SMTPAuth = true;
// SMTP-имя пользователя
$mail->Username = 'user@example.com';
// SMTP-пароль
$mail->Password = 'secret';
// Включаем шифрование TLS
$mail->SMTPSecure = 'ssl';
// TCP-порт для подключения
$mail->Port = 465;

// Устанавливаем адрес и имя отправителя
$mail->setFrom('from@example.com', 'Mailer');
// Добавляем адрес и имя получателя
$mail->addAddress('to@example.com', 'Receiver');
// Добавляем адрес и имя для ответа
$mail->addReplyTo('reply@example.com', 'Information');

// Устанавливаем формат письма на HTML
$mail->isHTML(true);
// Устанавливаем тему письма
$mail->Subject = 'Here is the subject';
// Устанавливаем тело письма
$mail->Body = 'This is the HTML message body in bold!';
// Устанавливаем альтернативное тело письма для почтовых клиентов без HTML
$mail->AltBody = 'This is the plain text message body';

// Добавляем файл в качестве вложения
$mail->addAttachment('form.txt');

// Отправляем письмо
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
Evgeny Мастер (1475) 1 год назад
Александр, очень сложно сказать почему не работает ваш код, так как вы не дали окружающим информации практически ни о чем.
Не ясно даже чего вы ожидали от этого кода, хотя можно предположить что вы хотели получить по почте некоторый файл, который пользователь мог бы прикрепить через форму онлайн.
Не очень понятно как настроена среда окружения в котором запускается ваш код, какие ошибки генирирует, какие настройки php.ini сделаны.

В спецификации функции mail которую вы используете ::
 mail( 
string $to,
string $subject,
string $message,
array|string $additional_headers = [],
string $additional_params = ""
): bool
Указано что 4 параметром должны идти дополнительные заголовки отправляемого сообщения. И соответственно далеко не любой файл полученный от пользователя может быть использован в качестве заголовка.

Более того, настройки среды в которой выполняется скрипт PHP могут исключить отсылку e-mail сообщений.

Ну и не понятно где вы проверяете состояние отправки формы. И что должно вам отправиться, если пользователь даже не видел и не отправлял форму.
Похожие вопросы