Make WordPress Core


Ignore:
Timestamp:
12/30/2016 06:43:07 AM (10 years ago)
Author:
dd32
Message:

Mail: Ensure that any phpmailerException exceptions generated by setFrom() are caught to avoid PHP Fatal errors.

This change avoids a PHP fatal error that can be encountered when the specified (or generated) source email is an invalid address, such as wordpress@_, it makes no effort to set a valid source, only avoid the fatal error.

See #25239 for correcting the email address.
Fixes #39360.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/pluggable.php

    r39639 r39655  
    186186        if ( isset( $atts['to'] ) ) {
    187187                $to = $atts['to'];
     188        }
     189
     190        if ( !is_array( $to ) ) {
     191                $to = explode( ',', $to );
    188192        }
    189193
     
    350354        $from_name = apply_filters( 'wp_mail_from_name', $from_name );
    351355
    352         $phpmailer->setFrom( $from_email, $from_name, false );
    353 
    354         // Set destination addresses
    355         if ( !is_array( $to ) )
    356                 $to = explode( ',', $to );
     356        try {
     357                $phpmailer->setFrom( $from_email, $from_name, false );
     358        } catch ( phpmailerException $e ) {
     359                $mail_error_data = compact( 'to', 'subject', 'message', 'headers', 'attachments' );
     360                $mail_error_data['phpmailer_exception_code'] = $e->getCode();
     361
     362                /** This filter is documented in wp-includes/pluggable.php */
     363                do_action( 'wp_mail_failed', new WP_Error( 'wp_mail_failed', $e->getMessage(), $mail_error_data ) );
     364
     365                return false;
     366        }
    357367
    358368        // Set mail's subject and body
     
    360370        $phpmailer->Body    = $message;
    361371
    362         // Use appropriate methods for handling addresses, rather than treating them as generic headers
     372        // Set destination addresses, using appropriate methods for handling addresses
    363373        $address_headers = compact( 'to', 'cc', 'bcc', 'reply_to' );
    364374
Note: See TracChangeset for help on using the changeset viewer.