do_action won’t work in ajax callback

Note: OP and me resolved the question/issue via chat — and despite the actual problem source is not known for sure, in the actual AJAX callback used by OP, there was actually no (or maybe OP had forgotten to make the) do_action() call. 🙂

Original Revised Answer (for reference):

If you have something like so in your actual code, i.e. the actions are registered properly:

add_action( 'wp_ajax_<your action>', 'my_ajax_callback' );        // for logged-in users
add_action( 'wp_ajax_nopriv_<your action>', 'my_ajax_callback' ); // for all other users

add_action( 'prefix_item_added_to_cart', 'send_email_to_user' );

Then I don’t see why would the callback function is not getting called — unless of course, if the conditional (if ( $cart_id )) returns false.

But what’s that $args in your add_action() call? That parameter should be an integer, which is the callback priority.