Instead of is_user_logged_in(), check for current_user_can( 'edit_posts' )
...otherwise the option will show for any logged in WP user, such as regular users who are logged in but not necessarily an admin user for the site.  Props batmoo.
Check for correct permissions
Ensure the request on PMC_Helpdesk::ajax_process_form() has correct user permissions
admin_bar_menu passes in the Admin Bar object, so it'd be better to interact with that instead of the global
Props batmoo
Use `get_edit_post_link()` building it ourselves. Props batmoo.
Add an error message for `ajax_process_form()`
The only time we'll show an error is if there's a technical problem — e.g., the ajax response doesn't have all the data or proper permissions.  Introduce pmc-helpdesk-form-error filter to make this text filterable.
Force a short width for error and success text
This prevents an issue where the error text causes the menu item's li container to be as wide as the text, 100% of the browser width.
Use PHP_EOL for e-mail line endings
Headers need CR+LF but body doesn't.
Whitespace cleanup
Moving the "Sender" header stuff out of core
It doesn't make sense to try and do this for people using this plugin. Props batmoo.
Use a bogus jQuery element used to sanitize JSON response text
Example: sanitizer.text( "untrusted string" ).html() to convert to escaped text.  There are probably better ways to do this, but this gets around a lot of browser-specific caveats without a lot of effort/testing.