Отправка писем с вложениями на почту без "костылей"

drkrol

Постоялец
Регистрация
6 Мар 2016
Сообщения
112
Реакции
11
Здравствуйте. Несколько лет назад один человек мне помог с формой отправки файлов на почту. Выглядела она довольно просто:
PHP:
    $subject = "Заголовок";
    $mailto = "exam@gmail.com"; // кому отправляем
    $message = "Текст сообщения";
    $separator = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$separator}x";
    $eol = PHP_EOL;
    $filesize = '';

   
    // Заголовки
    $headers = 'From: от кого example@m.ru' . $eol;
    $headers .= 'MIME-Version: 1.0' . $eol;
    $headers .= 'Content-Type: multipart/mixed; boundary=' . $separator . $eol . $eol;
    $headers .= 'Content-Transfer-Encoding: 7bit' . $eol;
    $headers .= 'This is a MIME encoded message.' . $eol . $eol;
   
    // Сообщение
    $headers .= '--' . $separator . $eol;
    $headers .= 'Content-Type: text/plain; charset=utf-8' . $eol;
    $headers .= 'Content-Transfer-Encoding: 8bit' . $eol . $eol;
    $headers .= $message . $eol . $eol;
   
    // Прикрепляем файлы
    $files = $_FILES['fileFF'];
    for($i = 0; $i < count($files['name']); $i++) {
        if(is_uploaded_file($files['tmp_name'][$i])) {
            $file = $files['tmp_name'][$i];
            $filename = $files['name'][$i];
            $filetype = $files['type'][$i];
            $filesize += $files['size'][$i];
           
            $content = chunk_split(base64_encode(file_get_contents($file)));
            $headers .= '--' . $separator . $eol;
            $headers .= 'Content-Type: '.$filetype.'; name=' . $filename . $eol;
            $headers .= 'Content-Transfer-Encoding: base64' . $eol;
            $headers .= 'Content-Disposition: attachment; filename=' . $filename . $eol . $eol;
            $headers .= $content . $eol . $eol;
            $headers .= '--' . $mime_boundary . $eol;
           
        }
    } 
    // Отправка сообщения
if (mail($mailto, $subject, '', $headers)){
echo 'ok';
} else {
echo 'error';
}
И всё это работало до пары, до времени, пока не обновился php. Теперь в новых php использовать $eol нельзя (и еще много чего нельзя), ибо ничего не отправиться. Так как я прикреплении файлов в последнее время особо не нуждался, я просто нашел где-то простую форму, которая работала на последних php.
PHP:
$to      = 'komu';
$subject = 'заголовок';
$message = "text";
$headers = 'From: exam@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

if(mail($to, $subject, $message, $headers)){
    echo "ok";
} else {
    echo "error";
}
Теперь у меня вновь появилась нужда в отправке файлов. Поискав в сети простых форм, я был удивлён, так как одна форма была "лучше" другой. Какие-то костыли, какие-то лишние php файлы, какой-то php mail'er. зачем всё? - непонятно. Подскажите, что к моей простой форме нужно дописать, чтобы работала функция отправки файлов на почту? Пожалуйста не нужно предлагать phpmailer и им подобные. Это всё костыли
 
Дико извиняюсь за сорказм, но Голубями, остальное костыли.

А пофакту, возьми любой популярный костыль и по вырезайте лишнее.
 
Если проблема только в PHP_EOL, то замените просто эту константу на "\r\n", должно заработать.
Кстати зачем переприсваивать эту константу переменной $eol не особо понятно.
 
Если проблема только в PHP_EOL, то замените просто эту константу на "\r\n"
Кстати да, отвлекся на голубей...


В гугле первая строчка по запросу Для просмотра ссылки Войди или Зарегистрируйся
Тут дело, предполагаю, даже не в версии, так как проблема 2011 года была поднята - это раз.
Ну а во вторых, на Для просмотра ссылки Войди или Зарегистрируйся как минимум объявили бы что устарело.
Там сказано, что доступна начиная с версии PHP 5.0.2
Надеюсь, вы обновились не ниже этой версии.
Причина, предположительно, в окружение.
 
Назад
Сверху