Receive email in PHP: using MailSlurp to send and receive emails.

Sending an receiving real emails is easy in PHP with MailSlurp: a free email as a service API.

Getting started

You can install the official PHP library from packagist using composer:

First create a composer.json in your project root like so:

  "repositories": [
      "type": "git",
      "url": ""
  "require": {
    "mailslurp/mailslurp-client-php": "dev-master",
    "phpunit/phpunit": "^8"

Next run:

composer install

Write a test using real email addresses

Next, to demonstrate how to send and receive email in PHP using MailSlurp let’s write a test that create two email addresses on demand and then sends an email between them. We will also use MailSlurp to extract email contents for a make-believe confirmation code.

require_once(__DIR__ . '/vendor/autoload.php');

use PHPUnit\Framework\TestCase;

 * This testsuite demonstrates how to use MailSlurp Email API Client in PHP
 * MailSlurp let's you create real email addresses in PHP. You can then send and receive emails
 * and attachments in PHP applications and tests.
 * See for more information.
final class EmailTest extends TestCase
    private function getConfig()
        // create a mailslurp configuration with API_KEY environment variable
        // get your own free API KEY at
        return MailSlurp\Configuration::getDefaultConfiguration()
            ->setApiKey('x-api-key', getenv("API_KEY"));

    public function test_CanCreateAnInbox_ThenSendAndReceiveEmails()
        // create an inbox controller
        $inboxController = new MailSlurp\Apis\InboxControllerApi(null, $this->getConfig());

        // create an inbox
        $inbox = $inboxController->createInbox();

        // verify inbox has an email address ending in

    public function test_CanSendAndReceiveEmail_BetweenTwoInboxes()
        // create inbox and waitFor controllers
        $inbox_controller = new MailSlurp\Apis\InboxControllerApi(null, $this->getConfig());
        $wait_for_controller = new MailSlurp\Apis\WaitForControllerApi(null, $this->getConfig());

        // create two inboxes
        $inbox_1 = $inbox_controller->createInbox();
        $inbox_2 = $inbox_controller->createInbox();

        // send a confirmation code from inbox1 to inbox2 (sends an actual email)
        $send_options = new MailSlurp\Models\SendEmailOptions();
        $send_options->setBody("Confirmation code = abc123");
        $inbox_controller->sendEmail($inbox_1->getId(), $send_options);

        // receive email for inbox2
        $timeout_ms = 30000;
        $unread_only = true;
        $email = $wait_for_controller->waitForLatestEmail($inbox_2->getId(), $timeout_ms, $unread_only);

        // verify emails content
        $this->assertEquals($inbox_1->getEmailAddress(), $email->getFrom());
        $this->assertEquals($inbox_2->getEmailAddress(), $email->getTo()[0]);
        $this->assertEquals("Test", $email->getSubject());
        $this->assertStringContainsString("Confirmation code = ", $email->getBody());

        // extract part of an email using regex (could be used in further test steps)
        $matches = array();
        preg_match('/.+code = (.+)/', $email->getBody(), $matches);
        $confirmation_code = $matches[1];
        $this->assertEquals($confirmation_code, "abc123");