Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Почему с формы на почту приходит пустой файл?


Автор: Steisi1982 19.1.2020, 21:40
Что не так с моим кодом? С формы приходит письмо с вложенным файлом. Название и расширение файла верные, но файл пустой и весит 0кб
Код

if (isset($_POST['email'])) {
    $surname = $_POST['surname'];
    $name = $_POST['name'];
    $workName = $_POST['workname'];
    $tel = $_POST['tel'];
    $email = $_POST['email'];
    $age = $_POST['age'];
    $sity = $_POST['sity'];
    $mailto = "[email protected]";
    $from_mail = "[email protected]";
    $replyto = "[email protected]";
    $from_name = "My site`s service";
    $subject = 'Сообщение с сервиса';
    $subject= '=?utf-8?B?' . base64_encode($subject) . '?=';
    $message = "Фамилия:".$surname.".<br/>
        Имя: ".$name. ".<br/>
        Название работы: ".$workName. ".<br/>
        Телефон: ".$tel. ".<br/>
        E-mail: ".$email. ".<br/>
        Возраст: ".$age. ".<br/>
        Населенный пункт: ".$sity."<br/>
        Дополнительная информация для адресата может быть здесь<br/>";
    $filename = $_FILES["file"]["name"];
    $content = chunk_split(base64_encode(file_get_contents($_FILES["file"]["tmp_name"])));
    $uid = md5(uniqid(time()));
    $header = "From: " . $from_name . " <" . $from_mail . ">\r\n";
    $header .= "Reply-To: " . $replyto . "\r\n";
    $header .= "MIME-Version: 1.0\r\n";    
    $header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n";
    $body = "This is a multi-part message in MIME format.\r\n";
    $body .= "--" . $uid . "\r\n";
    $body .= "Content-type:text/html; charset=utf-8\n";
    $body .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $body .= "<div>" . $message . "</div>\r\n\r\n";
 
    $body .= "--" . $uid . "\r\n";
    $body .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"\r\n"; // use different content types here
    $body .= "Content-Transfer-Encoding: base64\r\n";
    $body .= "Content-Disposition: attachment; filename=\"" . $filename . "\"\r\n\r\n"; // For Attachment
    $body .= $content . "\r\n\r\n";
    $body .= "--" . $uid . "--";
    if (mail($mailto, $subject, $body, $header)) {
    echo "<p>Письмо успешно отправлено</p>"; // or use booleans here
    } else {
    echo "<p>Письмо не удалось отправить</p><pre>";
    print_r(error_get_last());
    echo '</pre>';
    }
}

Автор: ksnk 20.1.2020, 13:58
Это не антиспам срабатывает ? Если письмо уходит на mail.ru или gmail - там можно посмотреть исходное письмо. В нем тоже не будет вложения?
Если работает антиспам - в письмо будут добавлены какие-то дополнительные заголовки

Автор: Steisi1982 20.1.2020, 19:18
Цитата(ksnk @ 20.1.2020,  13:58)
Это не антиспам срабатывает ? Если письмо уходит на mail.ru или gmail - там можно посмотреть исходное письмо. В нем тоже не будет вложения?
Если работает антиспам - в письмо будут добавлены какие-то дополнительные заголовки

Я новичок и в этом не разбираюсь пока. Что именно нужно смотреть в исходном файле и в каком его месте?

Автор: igorold 24.1.2020, 14:54
А в теге формы есть параметр enctype="multipart/form-data"?

Автор: Bodyan 3.11.2020, 20:21
    $content = chunk_split(base64_encode(file_get_contents($_FILES["file"]["tmp_name"])));

Проблема в base64_encode

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)