# Inbox Preview Text for HTML Emails

> Adds hidden preview text to HTML emails, the short line mail apps show next to the subject, taken from the first sentence of the message so inboxes no longer show stray template text.

- Type: PHP
- Runs: Run everywhere
- Category: [Email](https://wpide.com/library/category/email/)
- Tags: email, html, inbox
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/email-html-preheader/

## Code

```php
add_filter( 'wp_mail', function ( $atts ) {
    $message = (string) $atts['message'];

    if ( ! preg_match( '/<body[^>]*>/i', $message, $body, PREG_OFFSET_CAPTURE ) || false !== stripos( $message, 'preheader' ) ) {
        return $atts;
    }

    $text = trim( preg_replace( '/\s+/', ' ', wp_strip_all_tags( substr( $message, $body[0][1] ) ) ) );
    if ( '' === $text ) {
        return $atts;
    }

    $first = preg_split( '/(?<=[.!?])\s/', $text, 2 );
    $hint  = wp_html_excerpt( $first[0], 110, '…' );
    $span  = '<div class="preheader" style="display:none!important;visibility:hidden;opacity:0;color:transparent;height:0;width:0;max-height:0;max-width:0;overflow:hidden;mso-hide:all;">' . esc_html( $hint ) . str_repeat( '&#847;&zwnj;&nbsp;', 30 ) . '</div>';

    $insert          = $body[0][1] + strlen( $body[0][0] );
    $atts['message'] = substr( $message, 0, $insert ) . $span . substr( $message, $insert );

    return $atts;
}, 60 );
```

## Notes

Only HTML emails with a body tag are changed, and only when they do not already contain preview text.

## How to use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find "Inbox Preview Text for HTML Emails" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
