WordPress.org

Make WordPress Core

Ticket #5204: email_fix.diff

File email_fix.diff, 2.2 KB (added by filosofo, 7 years ago)
  • wp-includes/pluggable.php

     
    156156                if ( !empty( $tempheaders ) ) { 
    157157                        // Iterate through the raw headers 
    158158                        foreach ( $tempheaders as $header ) { 
    159                                 if ( strpos($header, ':') === false ) 
     159                                if ( strpos($header, ':') === false ) { 
     160                                        if ( false !== stripos( $header, 'boundary=' ) ) { 
     161                                                $header = str_replace('BOUNDARY', 'boundary', $header); 
     162                                                $parts = explode('boundary=', trim( $header ) ); 
     163                                                $boundary = trim( str_replace( array( '\'', '"' ), '', $parts[1] ) ); 
     164                                        } 
    160165                                        continue; 
     166                                } 
    161167                                // Explode them out 
    162168                                list( $name, $content ) = explode( ':', trim( $header ), 2 ); 
    163169 
     
    183189                                        if ( strpos( $content,';' ) !== false ) { 
    184190                                                list( $type, $charset ) = explode( ';', $content ); 
    185191                                                $content_type = trim( $type ); 
    186                                                 $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset ) ); 
     192                                                if ( false !== stripos( $charset, 'charset=' ) ) { 
     193                                                        $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset ) ); 
     194                                                } elseif ( false !== stripos( $charset, 'boundary=' ) ) { 
     195                                                        $boundary = trim( str_replace( array( 'BOUNDARY=', 'boundary=', '"' ), '', $charset ) ); 
     196                                                        $charset = ''; 
     197                                                } 
    187198                                        } else { 
    188199                                                $content_type = trim( $content ); 
    189200                                        } 
     
    243254 
    244255        $content_type = apply_filters( 'wp_mail_content_type', $content_type ); 
    245256 
     257        $phpmailer->ContentType = $content_type; 
     258 
    246259        // Set whether it's plaintext or not, depending on $content_type 
    247260        if ( $content_type == 'text/html' ) { 
    248261                $phpmailer->IsHTML( true ); 
    249         } else { 
    250                 $phpmailer->IsHTML( false ); 
    251         } 
     262        }  
    252263 
    253264        // If we don't have a charset from the input headers 
    254265        if ( !isset( $charset ) ) { 
     
    263274                foreach ( $headers as $name => $content ) { 
    264275                        $phpmailer->AddCustomHeader( sprintf( '%1$s: %2$s', $name, $content ) ); 
    265276                } 
     277                if ( false !== stripos( $content_type, 'multipart' ) && ! empty($boundary) ) { 
     278                        $phpmailer->AddCustomHeader( sprintf( "Content-Type: %s;\n\t boundary=\"%s\"", $content_type, $boundary ) ); 
     279                } 
    266280        } 
    267281 
    268282        do_action_ref_array( 'phpmailer_init', array( &$phpmailer ) );