WordPress.org

Make WordPress Core

Ticket #28407: 28407-alternative.diff

File 28407-alternative.diff, 3.3 KB (added by swissspidy, 19 months ago)

Alternative patch that allows changing every argument of addAttachment()

  • src/wp-includes/pluggable.php

    diff --git src/wp-includes/pluggable.php src/wp-includes/pluggable.php
    index 9af88a6ea2..c2cc4f275d 100644
    if ( ! function_exists( 'wp_mail' ) ) : 
    466466
    467467                if ( ! empty( $attachments ) ) {
    468468                        foreach ( $attachments as $attachment ) {
     469                                if ( ! is_array( $attachment ) ) {
     470                                        $attachment = array(
     471                                                'path' => $attachment,
     472                                        );
     473                                }
     474
     475                                // Set PHPMailer defaults.
     476                                $attachment = wp_parse_args( $attachment, array(
     477                                        'path'        => null,
     478                                        'name'        => '',
     479                                        'encoding'    => 'base64',
     480                                        'type'        => '',
     481                                        'disposition' => 'attachment',
     482                                ) );
     483
    469484                                try {
    470                                         $phpmailer->addAttachment( $attachment );
     485                                        $phpmailer->addAttachment(
     486                                                $attachment['path'],
     487                                                $attachment['name'],
     488                                                $attachment['encoding'],
     489                                                $attachment['type'],
     490                                                $attachment['disposition']
     491                                        );
    471492                                } catch ( phpmailerException $e ) {
    472493                                        continue;
    473494                                }
  • tests/phpunit/tests/mail.php

    diff --git tests/phpunit/tests/mail.php tests/phpunit/tests/mail.php
    index 951615136b..fd174b58fa 100644
    class Tests_Mail extends WP_UnitTestCase { 
    391391                $this->assertEquals( 'wp_mail_failed', $call_args[0]->get_error_code() );
    392392                $this->assertEquals( $expected_error_data, $call_args[0]->get_error_data() );
    393393        }
     394
     395        /**
     396         * @ticket 28407
     397         */
     398        public function test_wp_mail_sends_attachments_with_original_name() {
     399                wp_mail( 'user@example.org', 'Subject', 'Hello World', '', array(
     400                        DIR_TESTDATA . '/images/canola.jpg',
     401                        DIR_TESTDATA . '/images/waffles.jpg'
     402                ) );
     403
     404                /** @var PHPMailer $mailer */
     405                $mailer = tests_retrieve_phpmailer_instance();
     406
     407                $attachments = $mailer->getAttachments();
     408
     409                $expected = array(
     410                        array(
     411                                DIR_TESTDATA . '/images/canola.jpg',
     412                                'canola.jpg',
     413                                'canola.jpg',
     414                                'base64',
     415                                'image/jpeg',
     416                                false,
     417                                'attachment',
     418                                0
     419                        ),
     420                        array(
     421                                DIR_TESTDATA . '/images/waffles.jpg',
     422                                'waffles.jpg',
     423                                'waffles.jpg',
     424                                'base64',
     425                                'image/jpeg',
     426                                false,
     427                                'attachment',
     428                                0
     429                        )
     430                );
     431
     432                $this->assertEqualSets( $expected, $attachments );
     433        }
     434
     435        /**
     436         * @ticket 28407
     437         */
     438        public function test_wp_mail_sends_attachments_with_custom_values() {
     439                wp_mail( 'user@example.org', 'Subject', 'Hello World', '', array(
     440                        array(
     441                                'path' => DIR_TESTDATA . '/images/canola.jpg',
     442                                'name' => 'myawesomeimage.jpg',
     443                                'encoding' => '8bit',
     444                                'type' => 'image/jpeg',
     445                                'disposition' => 'attachment',
     446                        ),
     447                        array(
     448                                'path' => DIR_TESTDATA . '/images/waffles.jpg',
     449                                'name' => 'foobar.jpg',
     450                                'encoding' => 'base64',
     451                                'type' => 'image/png',
     452                                'disposition' => 'inline',
     453                        ),
     454                ) );
     455
     456                /** @var PHPMailer $mailer */
     457                $mailer = tests_retrieve_phpmailer_instance();
     458
     459                $attachments = $mailer->getAttachments();
     460
     461                $expected = array(
     462                        array(
     463                                DIR_TESTDATA . '/images/canola.jpg',
     464                                'canola.jpg',
     465                                'myawesomeimage.jpg',
     466                                '8bit',
     467                                'image/jpeg',
     468                                false,
     469                                'attachment',
     470                                0
     471                        ),
     472                        array(
     473                                DIR_TESTDATA . '/images/waffles.jpg',
     474                                'waffles.jpg',
     475                                'foobar.jpg',
     476                                'base64',
     477                                'image/png',
     478                                false,
     479                                'inline',
     480                                0
     481                        )
     482                );
     483
     484                $this->assertEqualSets( $expected, $attachments );
     485        }
    394486}