Обсуждение этого вопроса.
stackoverflow.com/questions/166221/how-can-i-uploa...
Еще на эту тему:
habrahabr.ru/post/109079
Для таких задач уже есть плагины. Посмотрите JqueryForm, например.
Ваша задача сводится к следующему:
1. Получить содержимое файла. Для этого используйте событие onchange и FileReader().
2. Формируем запрос и отправляем на сервер. Используйте, например, XMLHttpRequest().
3. Сервер получает запрос и формирует письмо. Это просто, в идеале ничего не должно меняться.
Другой способ для старых браузеров:
1. Создаем скрытый <iframe name="sender"></iframe>
2. У формы добавляем target="sender".
3. Отправляем форму как обычно.
Для гарантированной отправки я бы сделал следующим образом:
В шаблоне сделал бы как для старых браузеров, а потом, если браузер поддерживает все нужные "плюшки", то удалял бы target и вешал бы нужные обработчики.