WordPress.org

Make WordPress Core

Ticket #15448: 15448_Jan2016.diff

File 15448_Jan2016.diff, 5.1 KB (added by gitlost, 4 years ago)

Refresh of @rmccue/@MattyRob patch 15448_March2013.diff for 4.5.

  • src/wp-includes/pluggable.php

     
    202202 * However, you can set the content type of the email by using the
    203203 * 'wp_mail_content_type' filter.
    204204 *
     205 * If $message is an array, the key of each is used to add as an attachment
     206 * with the value used as the body. The 'text/plain' element is used as the
     207 * text version of the body, with the 'text/html' element used as the HTML
     208 * version of the body. All other types are added as attachments.
     209 *
    205210 * The default charset is based on the charset used on the blog. The charset can
    206211 * be set using the 'wp_mail_charset' filter.
    207212 *
     
    211216 *
    212217 * @param string|array $to          Array or comma-separated list of email addresses to send message.
    213218 * @param string       $subject     Email subject
    214  * @param string      $message     Message contents
     219 * @param string|array $message     Message contents
    215220 * @param string|array $headers     Optional. Additional headers.
    216221 * @param string|array $attachments Optional. Files to attach.
    217222 * @return bool Whether the email contents were sent successfully.
     
    316321                                                }
    317322                                                break;
    318323                                        case 'content-type':
     324                                                if ( is_array($message) ) {
     325                                                        // Multipart email, ignore the content-type header
     326                                                        break;
     327                                                }
    319328                                                if ( strpos( $content, ';' ) !== false ) {
    320329                                                        list( $type, $charset_content ) = explode( ';', $content );
    321330                                                        $content_type = trim( $type );
     
    352361        $phpmailer->ClearCustomHeaders();
    353362        $phpmailer->ClearReplyTos();
    354363
     364        $phpmailer->Body= '';
     365        $phpmailer->AltBody= '';
     366
    355367        // From email and name
    356368        // If we don't have a name from the input headers
    357369        if ( !isset( $from_name ) )
     
    412424                }
    413425        }
    414426
     427        // If we don't have a charset from the input headers
     428        if ( !isset( $charset ) )
     429                $charset = get_bloginfo( 'charset' );
     430
     431        // Set the content-type and charset
     432
     433        /**
     434         * Filter the default wp_mail() charset.
     435         *
     436         * @since 2.3.0
     437         *
     438         * @param string $charset Default email charset.
     439         */
     440        $phpmailer->CharSet = apply_filters( 'wp_mail_charset', $charset );
     441
    415442        // Set mail's subject and body
    416443        $phpmailer->Subject = $subject;
    417         $phpmailer->Body    = $message;
    418444
     445        if ( is_string($message) ) {
     446                $phpmailer->Body = $message;
     447
     448                // Set Content-Type and charset
     449                // If we don't have a content-type from the input headers
     450                if ( !isset( $content_type ) )
     451                        $content_type = 'text/plain';
     452
     453                /**
     454                 * Filter the wp_mail() content type.
     455                 *
     456                 * @since 2.3.0
     457                 *
     458                 * @param string $content_type Default wp_mail() content type.
     459                 */
     460                $content_type = apply_filters( 'wp_mail_content_type', $content_type );
     461
     462                $phpmailer->ContentType = $content_type;
     463
     464                // Set whether it's plaintext, depending on $content_type
     465                if ( 'text/html' == $content_type )
     466                        $phpmailer->IsHTML( true );
     467
     468                // For backwards compatibility, new multipart emails should use
     469                // the array style $message. This never really worked well anyway
     470                if ( false !== stripos( $content_type, 'multipart' ) && ! empty($boundary) )
     471                        $phpmailer->AddCustomHeader( sprintf( "Content-Type: %s;\n\t boundary=\"%s\"", $content_type, $boundary ) );
     472        }
     473        elseif ( is_array($message) ) {
     474                foreach ($message as $type => $bodies) {
     475                        foreach ((array) $bodies as $body) {
     476                                if ($type === 'text/html') {
     477                                        $phpmailer->Body = $body;
     478                                }
     479                                elseif ($type === 'text/plain') {
     480                                        $phpmailer->AltBody = $body;
     481                                }
     482                                else {
     483                                        $phpmailer->AddAttachment($body, '', 'base64', $type);
     484                                }
     485                        }
     486                }
     487        }
     488
    419489        // Add any CC and BCC recipients
    420490        if ( !empty( $cc ) ) {
    421491                foreach ( (array) $cc as $recipient ) {
     
    456526        // Set to use PHP's mail()
    457527        $phpmailer->IsMail();
    458528
    459         // Set Content-Type and charset
    460         // If we don't have a content-type from the input headers
    461         if ( !isset( $content_type ) )
    462                 $content_type = 'text/plain';
    463 
    464         /**
    465          * Filter the wp_mail() content type.
    466          *
    467          * @since 2.3.0
    468          *
    469          * @param string $content_type Default wp_mail() content type.
    470          */
    471         $content_type = apply_filters( 'wp_mail_content_type', $content_type );
    472 
    473         $phpmailer->ContentType = $content_type;
    474 
    475         // Set whether it's plaintext, depending on $content_type
    476         if ( 'text/html' == $content_type )
    477                 $phpmailer->IsHTML( true );
    478 
    479         // If we don't have a charset from the input headers
    480         if ( !isset( $charset ) )
    481                 $charset = get_bloginfo( 'charset' );
    482 
    483         // Set the content-type and charset
    484 
    485         /**
    486          * Filter the default wp_mail() charset.
    487          *
    488          * @since 2.3.0
    489          *
    490          * @param string $charset Default email charset.
    491          */
    492         $phpmailer->CharSet = apply_filters( 'wp_mail_charset', $charset );
    493 
    494529        // Set custom headers
    495530        if ( !empty( $headers ) ) {
    496531                foreach ( (array) $headers as $name => $content ) {
    497532                        $phpmailer->AddCustomHeader( sprintf( '%1$s: %2$s', $name, $content ) );
    498533                }
    499 
    500                 if ( false !== stripos( $content_type, 'multipart' ) && ! empty($boundary) )
    501                         $phpmailer->AddCustomHeader( sprintf( "Content-Type: %s;\n\t boundary=\"%s\"", $content_type, $boundary ) );
    502534        }
    503535
    504536        if ( !empty( $attachments ) ) {