First, the Guid.NewGuid().ToString() provides a pretty unique string, you can store that in a database and make sure you known what file should be downloaded when a user hits that url... then send a mail with an url containing that guid http://www.yourwebsite.com/?download=_your-guid_ if the user hits the page you can return the requested file, since you know (int your database) what file to return for this specific string and even monitor that the file download has started.... Then after a certain amount of time disable that unique string or even remove if from your database if you're sure the download will complete succesfully.
.: I love it when a plan comes together :. http://www.zonderpunt.nl