Do this in a database. Store a unique id for each link sent (i.e. md5($email . time()); ) using the md5 hash prevents people guessing for someone else's link (by incrementing a numeric value like id=5 as suggested above).
In your db table also have a field for date_clicked which you update when the url is loaded. You could also have a campaign_id or something to track multiple links mailed in the same table, maybe the email address as well, whatever suits your needs.
Then you send a link like :
http://www.someurl.com/somepage.html...23456789abcedf
When the link is loaded you check the db for that hash and whether date_clicked has been set or not. Redirect or load the one time link page based on those conditions and then update the db.