Что вам подсовывают в поле email, нужно обязательно проверять на сервере, проверка на клиенте, это сервис для него не более того.
$subject = "Заполнена контактная форма с ".$_SERVER['HTTP_REFERER']; - на тему почтового отправления не влияет указываемая в заголовках (кстати вы его не передаете) кодировка, и оно может быть отображено почтовым сервером или клиентом как душе угодно, этот параметр нужно кодировать:
$subject = '=?utf-8?b?' . base64_encode("Заполнена контактная форма с ".$_SERVER['HTTP_REFERER']) . '?=';
как подвергают такой кодировке и поле From.
$attachment = chunk_split(base64_encode(file_get_contents($_FILE S['fileFF']['tmp_name'][$i]))); - загрузку файлов нужно не с этого начинать, а с проверки загружен ли файл вообще, то есть нет ли ошибки в ключе $_FILES['fileFF']['error'].
Загружать тело файла функцией file_get_contents() не стоит, открывайте файл на чтение.
if ($filesize < 10000000) { // проверка на общий размер всех файлов. - это нужно проверять до формирования почтового отправления, ибо, если размер превышает допустимое, то впустую будет потрачено и время, и ресурсы, да и пользователя по этому вопросу вы оставляете в неведении. Если у вас РНР версии не ниже 5.5, то это можно сделать функцией
array_column(), если ниже, то использовать это:
function array_column($a, $i, $k=null) {
return array_values(array_diff(array_map(function($a, $b) use($i, $k) {
return $k ? [$b => $a[$i]] : $a[$i];
}, $a, array_keys($a)), [null]));
}
получив ключи 'size' массива $_FILES['fileFF'] и суммируя их значение.
По отправлению на сервер - а что говорит отладчик?