WordPress.org

Make WordPress Core

Ticket #21659: 21659.diff

File 21659.diff, 2.8 KB (added by iandunn, 6 years ago)
  • src/wp-includes/pluggable.php

     
    248248                        $tempheaders = $headers;
    249249                }
    250250                $headers = array();
    251                 $cc = array();
    252                 $bcc = array();
     251                $cc = $bcc = $reply_to = array();
    253252
    254253                // If it's actually got contents
    255254                if ( !empty( $tempheaders ) ) {
     
    305304                                        case 'bcc':
    306305                                                $bcc = array_merge( (array) $bcc, explode( ',', $content ) );
    307306                                                break;
     307                                        case 'reply-to':
     308                                                $reply_to = array_merge( (array) $reply_to, explode( ',', $content ) );
     309                                                break;
    308310                                        default:
    309311                                                // Add it to our grand headers array
    310312                                                $headers[trim( $name )] = trim( $content );
     
    370372        $phpmailer->Subject = $subject;
    371373        $phpmailer->Body    = $message;
    372374
    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                                         }
     375        // Add any CC, BCC, and Reply-To recipients
     376        $recipient_headers = array(
     377                // map the header names to the corresponding PHPMailer method for adding them to the message
     378                'cc'       => 'AddCc',
     379                'bcc'      => 'AddBcc',
     380                'reply_to' => 'AddReplyTo'
     381        );
     382       
     383        foreach ( $recipient_headers as $recipient_header => $add_method ) {
     384                if ( ! empty( $$recipient_header ) ) {
     385                        foreach ( $$recipient_header as $recipient ) {
     386                                try {
     387                                        // Break $recipient into name and address parts if in the format "Foo <bar@baz.com>"
     388                                        $recipient_name = '';
     389                                        if( preg_match( '/(.*)<(.+)>/', $recipient, $matches ) ) {
     390                                                if ( count( $matches ) == 3 ) {
     391                                                        $recipient_name = $matches[1];
     392                                                        $recipient = $matches[2];
     393                                                }
     394                                        }               
     395                                        call_user_func( array( $phpmailer, $add_method ), $recipient, $recipient_name );
     396                                } catch ( phpmailerException $e ) {
     397                                        continue;
    384398                                }
    385                                 $phpmailer->AddCc( $recipient, $recipient_name );
    386                         } catch ( phpmailerException $e ) {
    387                                 continue;
    388399                        }
    389400                }
    390401        }
    391402
    392         if ( !empty( $bcc ) ) {
    393                 foreach ( (array) $bcc as $recipient) {
    394                         try {
    395                                 // Break $recipient into name and address parts if in the format "Foo <bar@baz.com>"
    396                                 $recipient_name = '';
    397                                 if( preg_match( '/(.*)<(.+)>/', $recipient, $matches ) ) {
    398                                         if ( count( $matches ) == 3 ) {
    399                                                 $recipient_name = $matches[1];
    400                                                 $recipient = $matches[2];
    401                                         }
    402                                 }
    403                                 $phpmailer->AddBcc( $recipient, $recipient_name );
    404                         } catch ( phpmailerException $e ) {
    405                                 continue;
    406                         }
    407                 }
    408         }
    409 
    410403        // Set to use PHP's mail()
    411404        $phpmailer->IsMail();
    412405