Missing global ?
global $post;
No global variable available if you are using publish_post action hook!
Ref : http://hungred.com/how-to/tutorial-post-id-publishpost-action-hook-wordpress/
Update 2 :
or try this
$author = get_userdata($post->post_author);
So you can use $author
where you will 😀