WordPress.org

Make WordPress Core

Ticket #5204: email_fix_refreshed.5204.diff

File email_fix_refreshed.5204.diff, 2.1 KB (added by filosofo, 6 years ago)
  • wp-includes/pluggable.php

     
    282282                if ( !empty( $tempheaders ) ) { 
    283283                        // Iterate through the raw headers 
    284284                        foreach ( (array) $tempheaders as $header ) { 
    285                                 if ( strpos($header, ':') === false ) 
     285                                if ( strpos($header, ':') === false ) { 
     286                                        if ( false !== stripos( $header, 'boundary=' ) ) { 
     287                                                $parts = preg_split('/boundary=/i', trim( $header ) ); 
     288                                                $boundary = trim( str_replace( array( "'", '"' ), '', $parts[1] ) ); 
     289                                        } 
    286290                                        continue; 
     291                                } 
    287292                                // Explode them out 
    288293                                list( $name, $content ) = explode( ':', trim( $header ), 2 ); 
    289294 
     
    309314                                        if ( strpos( $content,';' ) !== false ) { 
    310315                                                list( $type, $charset ) = explode( ';', $content ); 
    311316                                                $content_type = trim( $type ); 
    312                                                 $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset ) ); 
     317                                                if ( false !== stripos( $charset, 'charset=' ) ) { 
     318                                                        $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset ) ); 
     319                                                } elseif ( false !== stripos( $charset, 'boundary=' ) ) { 
     320                                                        $boundary = trim( str_replace( array( 'BOUNDARY=', 'boundary=', '"' ), '', $charset ) ); 
     321                                                        $charset = ''; 
     322                                                } 
    313323                                        } else { 
    314324                                                $content_type = trim( $content ); 
    315325                                        } 
     
    391401 
    392402        $content_type = apply_filters( 'wp_mail_content_type', $content_type ); 
    393403 
     404        $phpmailer->ContentType = $content_type; 
     405 
    394406        // Set whether it's plaintext or not, depending on $content_type 
    395407        if ( $content_type == 'text/html' ) { 
    396408                $phpmailer->IsHTML( true ); 
    397         } else { 
    398                 $phpmailer->IsHTML( false ); 
    399409        } 
    400410 
    401411        // If we don't have a charset from the input headers 
     
    411421                foreach( (array) $headers as $name => $content ) { 
    412422                        $phpmailer->AddCustomHeader( sprintf( '%1$s: %2$s', $name, $content ) ); 
    413423                } 
     424                if ( false !== stripos( $content_type, 'multipart' ) && ! empty($boundary) ) { 
     425                        $phpmailer->AddCustomHeader( sprintf( "Content-Type: %s;\n\t boundary=\"%s\"", $content_type, $boundary ) ); 
     426                } 
    414427        } 
    415428 
    416429        if ( !empty( $attachments ) ) {