There shouldn't be anything wrong with the code as far as I can spot, the empty message you received can only have been from an empty form. Are you catching that on the front end at all?
Apart from that, if you experience problems related to receiving filled in forms, try the following:
a) start with commenting out everything from mail() downwards.
b) echo $msg, see what that looks like. If it shows all of your filled in data, it's all good. If not, continue.
c) print_r[$_SERVER['POST']; OR print_r[$_SERVER['GET']; - see below
--> out of curiousity: why check for POST and GET? Surely you define your form at front end as either POST or GET, not randomly or anything? Pick either one and use that as print_r to see what gets through
If that doesn't lead you anywhere, get back with the results of that and possibly the form too. Good luck!