I think I know what’s going on, but I’ll need you to confirm.
With PayPal Standard, they’re using IPN to update the order status to completed based on the payment_status in the IPN message, and the emails are not sent from WooCommerce until the order is Completed. Express Checkout is not doing that for you, and the orders are being left as “Processing” in your system, so the email isn’t getting sent. If you were to manually update those to Completed it would send the email at that point. At least that’s my assumption.
We did not build IPN into this plugin because we created a separate free plugin, PayPal IPN for WordPress, that can be used to do the same thing and a whole lot more.
That plugin basically sets up your WP site as an IPN listener for PayPal so that all data that hits your PayPal account will be sent to the listener and saved accordingly. The plugin has lots of hooks that allow you to trigger your own functions based on the transaction type or payment status of the IPN.
For example, to update your WooCommerce order status the same way PayPal standard does, you would install the IPN plugin and then add this to the functions.php file in your theme (or in your own plugin file.)
function update_wc_order_status($posted) {
$order_id = isset($posted['invoice']) ? str_replace('woo-','',$posted['invoice']) : '';
$order = new WC_Order($order_id);
$order->update_status('completed', 'PayPal IPN updated order to completed.');
}
add_action('paypal_ipn_for_wordpress_payment_status_completed', 'update_wc_order_status', 10, 1);
That would assume that you’re using the invoice prefix option in the Express Checkout settings with the value set to “woo-“. You’ll need to adjust that part to suite your scenario.
That will then update your order to completed based on the IPNs you get, and then your WC emails would be triggered as expected.