Which isn't completely valid html, but the main problem is that email's CSS affects all the other elements on the page, my best idea is to somehow make an iframe with PHP (is this possible without a further request), or somehow strip out all the CSS and HTML from the document.

Does anyone know how to get around this problem? How do gmail and other web clients do it?
Happy to look into client side solutions such as Javascript/jQuery & Ajax

Why don't you pick out the elements you want to keep, like the body itself by php and drop the rest ? You certainly will need a switch to apply different rules for a set of basic email content layouts: But you gain the freedom to implement specific and reliable rules for each layout.