WordPress.org

Make WordPress Core

Ticket #4296: wp-mail.fix.diff

File wp-mail.fix.diff, 3.3 KB (added by rob1n, 13 years ago)
  • wp-includes/pluggable.php

     
    171171        extract( apply_filters( 'wp_mail', compact( 'to', 'subject', 'message', 'headers' ) ) );
    172172       
    173173        // Default headers
    174         if ( empty( $headers ) ) {
     174        if ( '' == $headers ) {
    175175                $headers = array(
    176176                        'MIME-Version' => '1.0'
    177177                );
     
    180180                // string headers and an array of headers.
    181181                $tempheaders = (array) explode( "\n", $headers );
    182182                $headers = array();
    183                
    184                 // If it's actually got contents
    185                 if ( !empty( $tempheaders ) ) {
    186                         // Iterate through the raw headers
    187                         foreach ( $tempheaders as $header ) {
    188                                 // Explode them out
    189                                 list( $name, $content ) = explode( ':', trim( $header ), 2 );
    190                                
    191                                 // Cleanup crew
    192                                 $name = trim( $name );
    193                                 $content = trim( $content );
    194                                
    195                                 // Mainly for legacy -- process a From: header if it's there
    196                                 if ( $name == 'From' ) {
    197                                         if ( strpos( '<', $content ) !== false ) {
    198                                                 // So... making my life hard again?
    199                                                 $from_name = substr( $content, 0, strpos( '<', $content ) - 1 );
    200                                                 $from_name = str_replace( '"', '', $from_name );
    201                                                 $from_name = trim( $from_name );
    202                                                
    203                                                 $from_email = substr( $content, strpos( '<', $content ) + 1 );
    204                                                 $from_email = str_replace( '>', '', $from_email );
    205                                                 $from_email = trim( $from_email );
    206                                         } else {
    207                                                 $from_name = trim( $content );
    208                                         }
    209                                 } elseif ( $name == 'Content-Type' ) {
    210                                         if ( strpos( ';', $content ) !== false ) {
    211                                                 list( $type, $charset ) = explode( ';', $content );
    212                                                 $content_type = trim( $content_type );
    213                                                 $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset ) );
    214                                         } else {
    215                                                 $content_type = trim( $content );
    216                                         }
     183        } else {
     184                // We were passed an array of raw headers.
     185                $tempheaders = $headers;
     186                $headers = array();
     187        }
     188       
     189        // If it's actually got contents
     190        if ( !empty( $tempheaders ) ) {
     191                // Iterate through the raw headers
     192                foreach ( $tempheaders as $header ) {
     193                        // Explode them out
     194                        list( $name, $content ) = explode( ':', $header, 2 );
     195                       
     196                        // Cleanup crew
     197                        $name = trim( $name );
     198                        $content = trim( $content );
     199                       
     200                        // Mainly for legacy -- process a From: header if it's there
     201                        if ( $name == 'From' ) {
     202                                if ( strpos( $content, '<' ) !== false ) {
     203                                        // So... making my life hard again?
     204                                        $from_name = substr( $content, 0, strpos( $content, '<' ) - 1 );
     205                                        $from_name = str_replace( '"', '', $from_name );
     206                                        $from_name = trim( $from_name );
     207                                       
     208                                        $from_email = substr( $content, strpos( $content, '<' ) + 1 );
     209                                        $from_email = str_replace( '>', '', $from_email );
     210                                        $from_email = trim( $from_email );
    217211                                } else {
    218                                         // Add it to our grand headers array
    219                                         $headers[trim( $name )] = trim( $content );
     212                                        $from_name = trim( $content );
    220213                                }
     214                        } elseif ( $name == 'Content-Type' ) {
     215                                if ( strpos( ';', $content ) !== false ) {
     216                                        list( $type, $charset ) = explode( ';', $content );
     217                                        $content_type = trim( $type );
     218                                        $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset ) );
     219                                } else {
     220                                        $content_type = trim( $content );
     221                                }
     222                        } else {
     223                                // Add it to our grand headers array
     224                                $headers[$name] = $content;
    221225                        }
    222226                }
    223227        }