Attaching additional data / text message to a Bitcoin transaction?
The obvious solution would be to require payments to have an OP_RETURN output with an email address encrypted to you. This isn't simple and there isn't a wallet out there that supports something like that, but it's technically feasible.

For the 1 address problem, you can use a deterministic wallet, which can generate as many addresses as you need. You can use BIP47 if you want to get fancy and be able to offer refunds.

I built a web shop example app for Armory a while back that you might want to look at that generates a new address for any transaction. You may want to take a look:

https://github.com/etotheipi/BitcoinArmory/tree/master/webshop