WooCommerce - send custom email on custom order status change

As Xcid's answer indicates, you need to register the email.

In WC 2.2+ I believe you can do this via the following:

add_action( 'woocommerce_order_status_wc-order-confirmed', array( WC(), 'send_transactional_email' ), 10, 10 );

I'd added a filter to WooCommerce 2.3, so when that comes out custom emails will be able to be added to the list of email actions that WooCommerce registers:

// As of WooCommerce 2.3
function so_27112461_woocommerce_email_actions( $actions ){
    $actions[] = 'woocommerce_order_status_wc-order-confirmed';
    return $actions;
}
add_filter( 'woocommerce_email_actions', 'so_27112461_woocommerce_email_actions' );

The hook you need is:

woocommerce_order_status_changed

add_action("woocommerce_order_status_changed", "my_awesome_publication_notification");

function my_awesome_publication_notification($order_id, $checkout=null) {
   global $woocommerce;
   $order = new WC_Order( $order_id );
   if($order->status === 'completed' ) {
      // Create a mailer
      $mailer = $woocommerce->mailer();

      $message_body = __( 'Hello world!!!' );

      $message = $mailer->wrap_message(
        // Message head and message body.
        sprintf( __( 'Order %s received' ), $order->get_order_number() ), $message_body );


      // Cliente email, email subject and message.
     $mailer->send( $order->billing_email, sprintf( __( 'Order %s received' ), $order->get_order_number() ), $message );
     }

   }
}

As you can see here : https://github.com/woothemes/woocommerce/blob/f8a161c40673cb019eb96b04c04a774ca040a15a/includes/abstracts/abstract-wc-order.php#L2097 you can use this hook :

do_action( 'woocommerce_order_status_' . $new_status, $this->id );

with you custom status should give :

add_action( 'woocommerce_order_status_wc-order-confirmed' , array( $this, 'trigger' ) );

I imagine that you also add you custom email to the mailer, if not :

just add :

add_filter( 'woocommerce_email_classes', array($this,'edit_woocommerce_email_classes' ));
function edit_woocommerce_email_classes( $email_classes ) {
    require_once( 'your-email-class.php' );
    $email_classes[ 'WC_Confirmed_Order_Email' ] = new WC_Confirmed_Order_Email();
    return $email_classes;
 }

Edit :

You need to instanciate woocommerce emails before so you can add

add_action( 'init' , 'initiate_woocommerce_email' );

function initiate_woocommerce_email(){
   // Just when you update the order_status on backoffice
   if( isset($_POST['order_status']) ) {
        WC()->mailer();
    }
}