К Кодерисимо добавлю что файл отправить "как будто через форму" можно используя multipart/form-data, если нужно к емейлу прикрепить все совсем просто - fopen, fwrite, fclose, mail($headers = ....file);
Если идет отправка на другой скрипт - используйте multipart/form-data или curl. У всех свои косяки - curl имеет свойство повисать, поитогу время от времени второй запрос не доходит, потому что первый все еще висит, поэтому нужно делать несколько запросов через while пока не исчерпается лимит или пока не будет получен ответ.
multipart в свою очередь сложнее в написании - нужно определить разделитель, а потом тупо отправлять контент как строку, разделяя каждый файл разделителем, переносом строки, потом контент, потом 2 переноса, а строку - закодированную любым способом - у принимающего скрипта появится массив $_FILES.
Стоит отметить, что действительно, как мне и пояснили на тостере - отправка данных через multipart/form-data не сделает отправку гарантированной в 100% случаев - это всего лишь позволит в случае успешного запроса автоматически закинуть файл во временную папку, так что ничто не мешает отправить данные в виде json - если это текстовый файл, а не уже закодированный бинарник.
Другой вопрос если задачей является сохранить инфу из формы в эксель, в этом случае вам не нужно отправлять файл, вам нужно отправить данные скрипту, который из данных сделает файл.
Но можете поизвращаться с отправкой сразу файла, еслли хочется помучаться.