Sobre el Upload .. en PHP tienes el Upload HTTP (en las FAQ's tienes ejemplos) y toda la documentación al respecto en:
http://www.php.net/manual/en/features.file-upload.php
Si tienes tu una página HTML donde usas un formulario para que el usuario indique su archivo(s) a subir .. el "Upload" siempre va a aser por "HTTP" .. y dese que llegue el archivo al servidor (lo reciba PHP) y le dés el destino definitivo .. ese "movimiento" del archivo desde el directorio temporal que PHP usa para almacenar temporalmente los archivos que suben por HTTP hacia el destino definitivo que le des .. puede ser por FTP (con las funciones de FTP de PHP, estarías usando a PHP como "cliente FTP") útil si los archivos no van a quedar en el mismo servidor que está PHP corriendo .. Pero, si esos archivos van a quedar en el mismo servidor que ejecuta PHP .. el movimiento se hace con simples "copy()" .. (o mejor move_uploaded_file()) hacia su destino definitivo dentro del sistema de archivos de ese servidor.
------
Sobre mail() .. dicha función envia un email o tantos como remitentes (en el para) uses (separados por comas) .. pero si quieres personalizar el e-mail usa mail() en un bucle cualquiera (como ese while() que pusistes que se supone que obtendrá datos para componer ese e-mail ..)
Un saludo,