WordPress.org

Make WordPress Core

Ticket #15448: 15448_March2013.diff

File 15448_March2013.diff, 4.5 KB (added by MattyRob, 7 years ago)
  • wp-includes/pluggable.php

     
    191191 * However, you can set the content type of the email by using the
    192192 * 'wp_mail_content_type' filter.
    193193 *
     194 * If $message is an array, the key of each is used to add as an attachment
     195 * with the value used as the body. The 'text/plain' element is used as the
     196 * text version of the body, with the 'text/html' element used as the HTML
     197 * version of the body. All other types are added as attachments.
     198 *
    194199 * The default charset is based on the charset used on the blog. The charset can
    195200 * be set using the 'wp_mail_charset' filter.
    196201 *
     
    206211 *
    207212 * @param string|array $to Array or comma-separated list of email addresses to send message.
    208213 * @param string $subject Email subject
    209  * @param string $message Message contents
     214 * @param string|array $message Message contents
    210215 * @param string|array $headers Optional. Additional headers.
    211216 * @param string|array $attachments Optional. Files to attach.
    212217 * @return bool Whether the email contents were sent successfully.
     
    277282                                                }
    278283                                                break;
    279284                                        case 'content-type':
     285                                                if ( is_array($message) ) {
     286                                                        // Multipart email, ignore the content-type header
     287                                                        break;
     288                                                }
    280289                                                if ( strpos( $content, ';' ) !== false ) {
    281290                                                        list( $type, $charset ) = explode( ';', $content );
    282291                                                        $content_type = trim( $type );
     
    314323        $phpmailer->ClearCustomHeaders();
    315324        $phpmailer->ClearReplyTos();
    316325
     326        $phpmailer->Body= '';
     327        $phpmailer->AltBody= '';
     328
    317329        // From email and name
    318330        // If we don't have a name from the input headers
    319331        if ( !isset( $from_name ) )
     
    360372                }
    361373        }
    362374
     375        // If we don't have a charset from the input headers
     376        if ( !isset( $charset ) )
     377                $charset = get_bloginfo( 'charset' );
     378
     379        // Set the content-type and charset
     380        $phpmailer->CharSet = apply_filters( 'wp_mail_charset', $charset );
     381
    363382        // Set mail's subject and body
    364383        $phpmailer->Subject = $subject;
    365         $phpmailer->Body    = $message;
    366384
    367         // Add any CC and BCC recipients
     385        if ( is_string($message) ) {
     386                $phpmailer->Body = $message;
     387
     388                // Set Content-Type and charset
     389                // If we don't have a content-type from the input headers
     390                if ( !isset( $content_type ) )
     391                        $content_type = 'text/plain';
     392
     393                $content_type = apply_filters( 'wp_mail_content_type', $content_type );
     394
     395                $phpmailer->ContentType = $content_type;
     396
     397                // Set whether it's plaintext, depending on $content_type
     398                if ( 'text/html' == $content_type )
     399                        $phpmailer->IsHTML( true );
     400
     401                // For backwards compatibility, new multipart emails should use
     402                // the array style $message. This never really worked well anyway
     403                if ( false !== stripos( $content_type, 'multipart' ) && ! empty($boundary) )
     404                        $phpmailer->AddCustomHeader( sprintf( "Content-Type: %s;\n\t boundary=\"%s\"", $content_type, $boundary ) );
     405        }
     406        elseif ( is_array($message) ) {
     407                foreach ($message as $type => $bodies) {
     408                        foreach ((array) $bodies as $body) {
     409                                if ($type === 'text/html') {
     410                                        $phpmailer->Body = $body;
     411                                }
     412                                elseif ($type === 'text/plain') {
     413                                        $phpmailer->AltBody = $body;
     414                                }
     415                                else {
     416                                        $phpmailer->AddAttachment($body, '', 'base64', $type);
     417                                }
     418                        }
     419                }
     420        }
     421
     422        // Add any CC and BCC recipients
    368423        if ( !empty( $cc ) ) {
    369424                foreach ( (array) $cc as $recipient ) {
    370425                        try {
     
    404459        // Set to use PHP's mail()
    405460        $phpmailer->IsMail();
    406461
    407         // Set Content-Type and charset
    408         // If we don't have a content-type from the input headers
    409         if ( !isset( $content_type ) )
    410                 $content_type = 'text/plain';
    411 
    412         $content_type = apply_filters( 'wp_mail_content_type', $content_type );
    413 
    414         $phpmailer->ContentType = $content_type;
    415 
    416         // Set whether it's plaintext, depending on $content_type
    417         if ( 'text/html' == $content_type )
    418                 $phpmailer->IsHTML( true );
    419 
    420         // If we don't have a charset from the input headers
    421         if ( !isset( $charset ) )
    422                 $charset = get_bloginfo( 'charset' );
    423 
    424         // Set the content-type and charset
    425         $phpmailer->CharSet = apply_filters( 'wp_mail_charset', $charset );
    426 
    427462        // Set custom headers
    428463        if ( !empty( $headers ) ) {
    429464                foreach( (array) $headers as $name => $content ) {
    430465                        $phpmailer->AddCustomHeader( sprintf( '%1$s: %2$s', $name, $content ) );
    431466                }
    432 
    433                 if ( false !== stripos( $content_type, 'multipart' ) && ! empty($boundary) )
    434                         $phpmailer->AddCustomHeader( sprintf( "Content-Type: %s;\n\t boundary=\"%s\"", $content_type, $boundary ) );
    435467        }
    436468
    437469        if ( !empty( $attachments ) ) {