It isn't really possible to give a definitive answer without detailed usage and load patterns on your server, but some ideas that might be of use to you:
It is likely that not every one will open their email at the same instant - so you can probably presume that those 10k hits will be distributed over some time. Also, I presume that the emails are all being sent at once to give people an equal opportunity at whatever you are offering.
For the architecture aspect:
I would recommend Amazon's Linux as the operating system - it is fairly stripped down, has a low memory footprint, includes fairly recent packages in its repository, and performs well. Favour a 32-bit operating system for the instances with under 3GB of RAM.
I would suggest nginx over Apache for a high load server with FastCGI (using php-fpm). This should allow you to handle more concurrent connections than Apache, with lower resource usage. Definitely setup an opcode cache (e.g. APC) if your content is highly dynamic.
Cache whatever content you can - especially if all your visitors are going to be seeing the same thing (e.g. a coupon/advertisement). Varnish is a good option (although, if you go with nginx, it does have the ability to do some caching, although it does not offer the options of Varnish). Depending on the nature of your content, you may even consider generating a static copy and serving it off S3/Cloudfront.
If possible, you may want to consider putting your database on a separate server so that you can use autoscaling to scale your webserver if demand exceeds your expectations. You may also want to use spot instances to complement your main server(s).
You may find it beneficial to offload some of the content (e.g. images) to Cloudfront - depending on the bottlenecks of your setup, this could greatly reduce the network and disk usage of your server (keeping in mind that small instances have 'moderate' I/O). If you have a disk bottleneck, you may consider setting up multiple EBS volumes in a RAID to improve performance.
Also, keep in mind that it is fairly easy to scale vertically from a small instance to a large instance on EC2 (although, the typical approach does have a couple minutes of downtime, this can probably be avoided).
As @uesp suggested, you definitely want to load test your server. If you have many different pages that will be accessed, you can setup a URL list and have siege randomly access these - which will offer somewhat realistic indications of performance.