This is more just a note on the philosophy rather than the technique.
If you did this, I would make sure to set some limits on it so that it only sent out emails when you were outside those limits.
For example, if you're CPU is spiking to 100% frequently, I would send out the email. However, if there's no problems with the CPU, I would explicitly, intentionally not send the email.
If you get a daily email from your database, you're going to start ignoring them after a while. But if you only get them when there's something that you think you should check for, you're more likely to look at the emails.
Also, I'd make those limits configurable (and possibly even make flags so that specific queries can be turned on or off).
Regarding your question of multiple selects inside a single email, it sounds like there are two options:
Get the results for each query and format them into a string that contains everything you want.
Merge all the different results into a single query and then set your @query to that. (Alternatively, sticking all the results into a temporary table and querying the temp table.)
It is possible, I should note, to stick a query in the @query as well as sticking the results of a second query in the @body (per here and here), but that only allows you two statements.
I would try option one inside of a stored procedure. The trick would be formatting the table into the string. However, it's the most likely to work correctly.
Best Answer
You might check the on duty schedule for that particular operator. Did this alert happen while the operator was not on duty?
Is SQL Agent set to use Database Mail and a specified Mail Profile for the Alert System? (Right Click SQL Server Agent > Properties > Alert System)
These are two things that I can immediately think of that could cause this behavior.
Hope this can help.