First, you need to create the following function:
function checkEmailAlreadyExists( $message_id ) {
$posts_with_meta = get_posts( array(
'posts_per_page' => 1, // we only want to check if any exists, so don't need to get all of them
'post_type' => 'my-custom-post-type',
'meta_key' => 'ticket_id',
'meta_value' => $message_id,
'fields' => 'ids', // we don't need it's content, etc.
) );
return ( count( $posts_with_meta ) ) ? true : false;
}
Now you just have to add it to your current code:
$total = $emails->total_msg();
for ( $j=1; $j <= $total; $j++ ) {
$mail = $emails->get( $j );
if ( !empty( $mail['header']->message_id ) && !checkEmailAlreadyExists( $mail['header']->message_id ) ) {
$post_array = array(
'post_content' => $mail['body'],
'post_title' => $mail['header']->subject,
'post_type' => 'my-custom-post-type',
'post_status' => 'publish',
'meta_input' => array(
'from' => $mail['header']->fromaddress,
'email_date' => $mail['header']->Date,
'ticket_id' => $mail['header']->message_id,
),
);
wp_insert_post( $post_array );
}
}