Как отправить несколько электронных писем за один раз с PHP API SparkPost? - PullRequest
0 голосов
/ 29 августа 2018

Я успешно использовал конечную точку передачи PHP в Sparkpost PHP API https://github.com/SparkPost/php-sparkpost#send-an-email-using-the-transmissions-endpoint с https://github.com/SparkPost/php-sparkpost#wait-synchronous, но теперь мне нужно отправить два разных электронных письма на два разных адреса, в одну и ту же точку моей программы .

Казалось, очевидным способом было использование асинхронного метода https://github.com/SparkPost/php-sparkpost#then-asynchronous, но я не могу заставить это работать с конечной точкой после. Код ниже.

Или есть лучший способ? Я не был уверен, как заставить синхронный код выполнять два отдельных запроса один за другим.

$promise1 = $sparky->transmissions->post([
            'content' => [
                'from' => ['name' => 'My Service', 'email' => 'noreply@myservice.com'],
                'subject' => 'Booking Confirmation',
                'html' => $html,
                ],
            'recipients' => [['address' => ['email' => 'myemail@gmail.com']]],
            'options' => ['open_tracking' => false, 'click_tracking' => false]
            ]);

      $promise1->then(
        function ($response) // Success callback
            {
            echo('success promise 1');
            },
        function (Exception $e) // Failure callback
            {
            dump($e->getCode()."<br>".$e->getMessage());
            }
        );

$promise2 = $sparky->transmissions->post([
           'content' => [
               'from' => ['name' => 'My Service', 'email' => 'noreply@myservice.com'],
               'subject' => 'Another Email',
               'html' => $html,
               ],
           'recipients' => [['address' => ['email' => 'anotheremail@gmail.com']]],
           'options' => ['open_tracking' => false, 'click_tracking' => false]
           ]);

      $promise2->then(
       function ($response) // Success callback
           {
           echo('success promise 2');
           },
       function (Exception $e) // Failure callback
           {
           dump($e->getCode()."<br>".$e->getMessage());
           }
       );

1 Ответ

0 голосов
/ 20 сентября 2018

Вы определили обработчики для выполнения обещаний и отклонения. Но обещание должно быть выполнено или отклонено для вызова обработчиков.

Поскольку вы ожидаете ответа от SparkPost, вам нужно wait() на объекте обещания.

$promise1->wait(); $promise2->wait();

Прочитать последнюю строку в секции Then (асинхронный) Ссылка SparkPost .

Кроме того, если вы планируете несколько обещаний, вы можете использовать \GuzzleHttp\Promise\all() для объединения всех обещаний (как предложено во второй последней строке этого же раздела)

...