Как разрешить ошибку mail(): Multiple or malformed newlines found in additional_header?
<?php
/**
 * Created by PhpStorm.
 * User: Jakim
 * Date: 08.11.2017
 * Time: 3:37
 */
$EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
$boundary     = "--".md5(uniqid(time()));  // любая строка, которой не будет ниже в потоке данных.
$subject_text = 'Тест от меня';
$subject= '=?utf-8?B?' . base64_encode($subject_text) . '?=';
$message = 'текст сообщения';
$headers    = "MIME-Version: 1.0;" . $EOL . "";
$headers   .= "Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"" . $EOL . "";
$headers   .= "From: jakimoff1990@gmail.com\nReply-To: jakimoff1990@gmail.com\n";

$multipart  = "--" . $boundary . $EOL;
$multipart .= "Content-Type: text/html; charset=utf-8" . $EOL . "";
$multipart .= "Content-Transfer-Encoding: base64" . $EOL . "";
$multipart .= $EOL; // раздел между заголовками и телом html-части
$multipart .= chunk_split(base64_encode($message));

#начало вставки файлов

foreach($_FILES["file"]["name"] as $key => $value){
    $filename = $_FILES["file"]["tmp_name"][$key];
    $file = fopen($filename, "rb");
    $data = fread($file,  filesize( $filename ) );
    fclose($file);
    $NameFile = $_FILES["file"]["name"][$key]; // в этой переменной надо сформировать имя файла (без всякого пути);
    $File = $data;
    $multipart .=  "" . $EOL . "--" . $boundary . $EOL . "";
    $multipart .= "Content-Type: application/octet-stream; name=\"" . $NameFile . "\"" . $EOL . "";
    $multipart .= "Content-Transfer-Encoding: base64" . $EOL . "";
    $multipart .= "Content-Disposition: attachment; filename=\"" . $NameFile . "\"" . $EOL . "";
    $multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла
    $multipart .= chunk_split(base64_encode($File));

}

#>>конец вставки файлов

$multipart .= "" . $EOL . "--" . $boundary . "--" . $EOL . "";

if(!mail('jakimoff1990@gmail.com', $subject, $multipart, $headers)){
    echo 'Письмо не отправлено';
} //Отправляем письмо
else{
    echo 'Письмо отправлено';
}
Там немного поменялись у людей заголовки, сам заморочился пока собрал все в кучу.
xtreme: Получается, только в одном месте нужно оставить два $eol подряд? Вот так?// Email header
                $header = "From: " . $user_name . " <" . trim($_POST['contact_user_email']) . ">" . PHP_EOL;
                $header .= "Reply-To: " . trim($_POST['contact_user_email']) . PHP_EOL;
                $header .= "MIME-Version: 1.0" . PHP_EOL;


                $header .= "Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"" . PHP_EOL;
                $header .= "This is a multi-part message in MIME format." . PHP_EOL;
                $header .= "--" . $boundary . PHP_EOL . PHP_EOL;

                // Email content
                // Content-type can be text/plain or text/html
                $header .= "Content-type:text/plain; charset=iso-8859-1" . PHP_EOL;
                $header .= "Content-Transfer-Encoding: 7bit" . PHP_EOL;
                $header .= "$message" . PHP_EOL;
                $header .= "--" . $boundary . PHP_EOL;

                // Attachment
                $header .= "Content-Type: application/xml; name=\"" . $file_name . "\"" . PHP_EOL;
                $header .= "Content-Transfer-Encoding: base64" . PHP_EOL;
                $header .= "Content-Disposition: attachment; filename=\"" . $file_name . "\"" . PHP_EOL;
                $header .= $content . PHP_EOL;
                $header .= "--" . $boundary . "--";
Я добавил еще такую вот функцию и обернул $headers при отправке в нее:function validateMail($str) {
    return str_replace(array('\r\r', '\r\0', '\r\n\r\n', '\n\n', '\n\0', PHP_EOL . PHP_EOL), '', $str);
}
Теперь вместо ошибки просто отображается NULL и сообщение не отправляется. (UPD. Стоял лимит от хостинга в 20 сообщений на внешние ящики. А сам код работал нормально.)
UPD. Ответ на 2ой комментарий.
Честно сказать, вот те письма, что отправлялись без проблем. Как видно тут больше пустых строк и почему-то отправлялось. Опять же, очень странно, что один и тот же код работал какое-то время, а потом резко перестал. :)
UPD. Решение проблемы:
Лучше всего использоваться PHP_EOL вместо \n или \r\n - сама определяется в зависимости от ОС
И разделить headers$header = "From: " . $from . $endl;
               $header .= "Reply-To: " . $user_email . $endl;
                $header .= "MIME-Version: 1.0" . $endl;

                $header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"" . $endl . $endl;
                $emessage = "--" . $uid . "\n";
                $emessage .= "Content-type:text/html; charset=utf-8\n";
                $emessage .= "Content-Transfer-Encoding: 7bit\n\n";
                $emessage .= $message . "\n\n";

                $emessage .= "--" . $uid . "\n";
                $emessage .= "Content-Type: application/octet-stream; name=\"" . $file_name . "\"\n";
                $emessage .= "Content-Transfer-Encoding: base64\n";
                $emessage .= "Content-Disposition: attachment; filename=\"" . $file_name . "\"\n\n";
                $emessage .= $content . "\n\n";

                $emessage .= "--" . $uid . "--";
Отправлять так:mail($to, $subject, $emessage, $header);
У меня проблема была в этом и в том, что на хостинге лимит в 20 сообщений на внешние ящики стоит. :) Капец злой был.