WordPress.org

Make WordPress Core

Ticket #21659: 21659.4.diff

File 21659.4.diff, 4.3 KB (added by iandunn, 3 years ago)
  • src/wp-includes/pluggable.php

    diff --git src/wp-includes/pluggable.php src/wp-includes/pluggable.php
    index 8b64359..f12350e 100644
    function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() 
    216216        }
    217217
    218218        // Headers
     219        $cc = $bcc = $reply_to = array();
     220
    219221        if ( empty( $headers ) ) {
    220222                $headers = array();
    221223        } else {
    function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() 
    227229                        $tempheaders = $headers;
    228230                }
    229231                $headers = array();
    230                 $cc = array();
    231                 $bcc = array();
    232232
    233233                // If it's actually got contents
    234234                if ( !empty( $tempheaders ) ) {
    function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() 
    291291                                        case 'bcc':
    292292                                                $bcc = array_merge( (array) $bcc, explode( ',', $content ) );
    293293                                                break;
     294                                        case 'reply-to':
     295                                                $reply_to = array_merge( (array) $reply_to, explode( ',', $content ) );
     296                                                break;
    294297                                        default:
    295298                                                // Add it to our grand headers array
    296299                                                $headers[trim( $name )] = trim( $content );
    function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() 
    335338         *
    336339         * @param string $from_email Email address to send from.
    337340         */
    338         $phpmailer->From = apply_filters( 'wp_mail_from', $from_email );
     341        $from_email = apply_filters( 'wp_mail_from', $from_email );
    339342
    340343        /**
    341344         * Filters the name to associate with the "from" email address.
    function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() 
    344347         *
    345348         * @param string $from_name Name associated with the "from" email address.
    346349         */
    347         $phpmailer->FromName = apply_filters( 'wp_mail_from_name', $from_name );
     350        $from_name = apply_filters( 'wp_mail_from_name', $from_name );
     351
     352        $phpmailer->setFrom( $from_email, $from_name );
    348353
    349354        // Set destination addresses
    350355        if ( !is_array( $to ) )
    351356                $to = explode( ',', $to );
    352357
    353         foreach ( (array) $to as $recipient ) {
    354                 try {
    355                         // Break $recipient into name and address parts if in the format "Foo <bar@baz.com>"
    356                         $recipient_name = '';
    357                         if ( preg_match( '/(.*)<(.+)>/', $recipient, $matches ) ) {
    358                                 if ( count( $matches ) == 3 ) {
    359                                         $recipient_name = $matches[1];
    360                                         $recipient = $matches[2];
    361                                 }
    362                         }
    363                         $phpmailer->AddAddress( $recipient, $recipient_name);
    364                 } catch ( phpmailerException $e ) {
    365                         continue;
    366                 }
    367         }
    368 
    369358        // Set mail's subject and body
    370359        $phpmailer->Subject = $subject;
    371360        $phpmailer->Body    = $message;
    372361
    373         // Add any CC and BCC recipients
    374         if ( !empty( $cc ) ) {
    375                 foreach ( (array) $cc as $recipient ) {
    376                         try {
    377                                 // Break $recipient into name and address parts if in the format "Foo <bar@baz.com>"
    378                                 $recipient_name = '';
    379                                 if ( preg_match( '/(.*)<(.+)>/', $recipient, $matches ) ) {
    380                                         if ( count( $matches ) == 3 ) {
    381                                                 $recipient_name = $matches[1];
    382                                                 $recipient = $matches[2];
    383                                         }
    384                                 }
    385                                 $phpmailer->AddCc( $recipient, $recipient_name );
    386                         } catch ( phpmailerException $e ) {
    387                                 continue;
    388                         }
     362        // Use appropriate methods for handling addresses, rather than treating them as generic headers
     363        $address_headers = compact( 'to', 'cc', 'bcc', 'reply_to' );
     364
     365        foreach ( $address_headers as $address_header => $addresses ) {
     366                if ( empty( $addresses ) ) {
     367                        continue;
    389368                }
    390         }
    391369
    392         if ( !empty( $bcc ) ) {
    393                 foreach ( (array) $bcc as $recipient) {
     370                foreach ( (array) $addresses as $address ) {
    394371                        try {
    395372                                // Break $recipient into name and address parts if in the format "Foo <bar@baz.com>"
    396373                                $recipient_name = '';
    397                                 if ( preg_match( '/(.*)<(.+)>/', $recipient, $matches ) ) {
     374
     375                                if ( preg_match( '/(.*)<(.+)>/', $address, $matches ) ) {
    398376                                        if ( count( $matches ) == 3 ) {
    399377                                                $recipient_name = $matches[1];
    400                                                 $recipient = $matches[2];
     378                                                $address        = $matches[2];
    401379                                        }
    402380                                }
    403                                 $phpmailer->AddBcc( $recipient, $recipient_name );
     381
     382                                switch ( $address_header ) {
     383                                        case 'to':
     384                                                $phpmailer->AddAddress( $address, $recipient_name );
     385                                                break;
     386                                        case 'cc':
     387                                                $phpmailer->AddCc( $address, $recipient_name );
     388                                                break;
     389                                        case 'bcc':
     390                                                $phpmailer->AddBcc( $address, $recipient_name );
     391                                                break;
     392                                        case 'reply_to':
     393                                                $phpmailer->AddReplyTo( $address, $recipient_name );
     394                                                break;
     395                                }
    404396                        } catch ( phpmailerException $e ) {
    405397                                continue;
    406398                        }