• Stars
    star
    105
  • Rank 328,196 (Top 7 %)
  • Language
    PHP
  • License
    MIT License
  • Created almost 5 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A testing package for intercepting mail sent from Laravel

Mail Intercept banner

Laravel Mail Intercept

A testing package for intercepting mail sent from Laravel

Latest Version on Packagist Total Downloads Codacy Badge Actions Status

This testing suite intercepts Laravel Mail just before they are sent out, allowing all kinds of assertions to be made on the actual emails themselves.

Mail isn't faked here. You get to inspect the actual mail ensuring you are sending exactly what you want!

Requirements

Laravel Version Mail Intercept Version
11.x 0.5.x
10.x 0.4.x
9.x 0.3.x
8.x and lower 0.2.x

Please note: If you are using v0.2.x, please refer to that version's documentation.

Installation

composer require kirschbaum-development/mail-intercept --dev

Usage

Next you can use the KirschbaumDevelopment\MailIntercept\WithMailInterceptor trait in your test class:

namespace Tests;

use App\Mail\TestMail;
use Illuminate\Support\Facades\Mail;
use Illuminate\Foundation\Testing\WithFaker;
use KirschbaumDevelopment\MailIntercept\WithMailInterceptor;

class MailTest extends TestCase
{
    use WithFaker;
    use WithMailInterceptor;

    public function testMail()
    {
        $this->interceptMail();

        $email = $this->faker->email;

        Mail::to($email)->send(new TestMail());

        $interceptedMail = $this->interceptedMail()->first();

        $interceptedMail->assertSentTo($email);
    }
}

That's it! Pretty simple, right?!

There are two ways of accessing the assertions. First is the fluent syntax directly on each intercepted email.

$interceptedMail->assertSentTo($email);

The other way (the older way) is to use the assertions methods made available from the WithMailInterceptor trait. Using these methods are fine, but aren't as clean to write.

$this->assertMailSentTo($email, $interceptedEmail);

Both of these assertions do the exact same thing, the fluent one is just much cleaner. See all the available assertion methods below!

Testing API

$this->interceptMail()

This method MUST be called first, similar to how Mail::fake() works. But unlike the mail fake, mail is not faked, it is intercepted.

$this->interceptedMail()

This should be called after Mail has been sent, but before your assertions, otherwise you won't have any emails to work with. It returns a Collection of emails so you are free to use any of the methods available to a collection.

Fluent Assertion Methods

Assertions Parameters
$intercepted->assertSentTo($to); $to array, string
$intercepted->assertNotSentTo($to); $to array, string
$intercepted->assertSentFrom($from); $from array, string
$intercepted->assertNotSentFrom($from); $from array, string
$intercepted->assertSubject($subject); $subject string
$intercepted->assertNotSubject($subject); $subject string
$intercepted->assertBodyContainsString($content); $content string
$intercepted->assertBodyNotContainsString($content); $content string
$intercepted->assertRepliesTo($reply); $reply array, string
$intercepted->assertNotRepliesTo($reply); $reply array, string
$intercepted->assertCc($cc); $cc array, string
$intercepted->assertNotCc($cc); $cc array, string
$intercepted->assertBcc($cc); $bcc array, string
$intercepted->assertNotBcc($cc); $bcc array, string
$intercepted->assertSender($sender); $sender array, string
$intercepted->assertNotSender($sender); $sender array, string
$intercepted->assertReturnPath($returnPath); $returnPath string
$intercepted->assertNotReturnPath($returnPath); $returnPath string
Content Type Assertions
$intercepted->assertIsPlain();
$intercepted->assertIsNotPlain();
$intercepted->assertHasPlainContent();
$intercepted->assertDoesNotHavePlainContent();
$intercepted->assertIsHtml();
$intercepted->assertIsNotHtml();
$intercepted->assertHasHtmlContent();
$intercepted->assertDoesNotHaveHtmlContent();
$intercepted->assertIsAlternative();
$intercepted->assertIsNotAlternative();
$intercepted->assertIsMixed();
$intercepted->assertIsNotMixed();
Header Assertions Parameters
$intercepted->assertHasHeader($header); $header string
$intercepted->assertMissingHeader($header); $header string
$intercepted->assertHeaderIs($header, $value); $header string
$value string
$intercepted->assertHeaderIsNot($header, $value); $header string
$value string
Priority Assertions Parameters
$intercepted->assertPriority($priority); $priority int
$intercepted->assertNotPriority($priority); $priority int
$intercepted->assertPriorityIsHighest();
$intercepted->assertPriorityNotHighest();
$intercepted->assertPriorityIsHigh();
$intercepted->assertPriorityNotHigh();
$intercepted->assertPriorityIsNormal();
$intercepted->assertPriorityNotNormal();
$intercepted->assertPriorityIsLow();
$intercepted->assertPriorityNotLow();
$intercepted->assertPriorityIsLowest();
$intercepted->assertPriorityIsLowest();

Assertion Methods

Assertions Parameters
$this->assertMailSentTo($to, $mail); $to array, string
$mail AssertableMessage, Email
$this->assertMailNotSentTo($to, $mail); $to array, string
$mail AssertableMessage, Email
$this->assertMailSentFrom($from, $mail); $from array, string
$mail AssertableMessage, Email
$this->assertMailNotSentFrom($from, $mail); $from array, string
$mail AssertableMessage, Email
$this->assertMailSubject($subject, $mail); $subject string
$mail AssertableMessage, Email
$this->assertMailNotSubject($subject, $mail); $subject string
$mail AssertableMessage, Email
$this->assertMailBodyContainsString($content, $mail); $content string
$mail AssertableMessage, Email
$this->assertMailBodyNotContainsString($content, $mail); $content string
$mail AssertableMessage, Email
$this->assertMailRepliesTo($reply, $mail); $reply array, string
$mail AssertableMessage, Email
$this->assertMailNotRepliesTo($reply, $mail); $reply array, string
$mail AssertableMessage, Email
$this->assertMailCc($cc, $mail); $cc array, string
$mail AssertableMessage, Email
$this->assertMailNotCc($cc, $mail); $cc array, string
$mail AssertableMessage, Email
$this->assertMailBcc($cc, $mail); $bcc array, string
$mail AssertableMessage, Email
$this->assertMailNotBcc($cc, $mail); $bcc array, string
$mail AssertableMessage, Email
$this->assertMailSender($sender, $mail); $sender array, string
$mail AssertableMessage, Email
$this->assertMailNotSender($sender, $mail); $sender array, string
$mail AssertableMessage, Email
$this->assertMailReturnPath($returnPath, $mail); $returnPath string
$mail AssertableMessage, Email
$this->assertMailNotReturnPath($returnPath, $mail); $returnPath string
$mail AssertableMessage, Email
Content Type Assertions Parameters
$this->assertMailIsPlain($mail); $mail AssertableMessage, Email
$this->assertMailIsNotPlain($mail); $mail AssertableMessage, Email
$this->assertMailHasPlainContent($mail); $mail AssertableMessage, Email
$this->assertMailDoesNotHavePlainContent($mail); $mail AssertableMessage, Email
$this->assertMailIsHtml($mail); $mail AssertableMessage, Email
$this->assertMailIsNotHtml($mail); $mail AssertableMessage, Email
$this->assertMailHasHtmlContent($mail); $mail AssertableMessage, Email
$this->assertMailDoesNotHaveHtmlContent($mail); $mail AssertableMessage, Email
$this->assertMailIsAlternative($mail); $mail AssertableMessage, Email
$this->assertMailIsNotAlternative($mail); $mail AssertableMessage, Email
$this->assertMailIsMixed($mail); $mail AssertableMessage, Email
$this->assertMailIsNotMixed($mail); $mail AssertableMessage, Email
Header Assertions Parameters
$this->assertMailHasHeader($header, $mail); $header string
$mail AssertableMessage, Email
$this->assertMailMissingHeader($header, $mail); $header string
$mail AssertableMessage, Email
$this->assertMailHeaderIs($header, $value, $mail); $header string
$value string
$mail AssertableMessage, Email
$this->assertMailHeaderIsNot($header, $value, $mail); $header string
$value string
$mail AssertableMessage, Email
Priority Assertions Parameters
$this->assertMailPriority($priority, $mail); $priority int
$mail AssertableMessage, Email
$this->assertMailNotPriority($priority, $mail); $priority int
$mail AssertableMessage, Email
$this->assertMailPriorityIsHighest($mail); $mail AssertableMessage, Email
$this->assertMailPriorityNotHighest($mail); $mail AssertableMessage, Email
$this->assertMailPriorityIsHigh($mail); $mail AssertableMessage, Email
$this->assertMailPriorityNotHigh($mail); $mail AssertableMessage, Email
$this->assertMailPriorityIsNormal($mail); $mail AssertableMessage, Email
$this->assertMailPriorityNotNormal($mail); $mail AssertableMessage, Email
$this->assertMailPriorityIsLow($mail); $mail AssertableMessage, Email
$this->assertMailPriorityNotLow($mail); $mail AssertableMessage, Email
$this->assertMailPriorityIsLowest($mail); $mail AssertableMessage, Email
$this->assertMailPriorityIsLowest($mail); $mail AssertableMessage, Email

You should use each item of the interceptedMail() collection as the mail object for all assertions.

If you are injecting your own headers or need access to other headers in the email, use this assertion to verify they exist and are set properly. These assertions require the header name and the compiled email.

Other assertions

Since $this->interceptedMail() returns a collection of AssertableMessage objects. You are free to dissect and look into those objects using any methods available to Symfony's Email API. Head over to the Symfony Email Docs for more detailed info.

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] or [email protected] instead of using the issue tracker.

Credits

Sponsorship

Development of this package is sponsored by Kirschbaum Development Group, a developer driven company focused on problem solving, team building, and community. Learn more about us or join us!

License

The MIT License (MIT). Please see License File for more information.

More Repositories

1

eloquent-power-joins

The Laravel magic you know, now applied to joins.
PHP
1,375
star
2

nova-inline-relationship

A package to present relationships as inline properties in Nova.
PHP
198
star
3

laravel-translations-loader

Webpack loader to import Laravel translation files (PHP or JSON) into your JS bundle as JSON.
JavaScript
190
star
4

laravel-test-runner-container

Docker container to run Laravel tests
Dockerfile
126
star
5

nova-inline-select

An inline select field for Nova apps
PHP
92
star
6

nova-mail

A Laravel Nova action that provides a mail sending form for any resource
PHP
72
star
7

nova-chartjs

A Chart JS component for Laravel Nova
PHP
50
star
8

laravel-queue-batch-retry

Package to retry failed jobs in batches using custom filters.
PHP
50
star
9

laravel-openapi-validator

PHP
47
star
10

nova-comments

A commenting tool for Laravel Nova
PHP
32
star
11

livewire-filters

Livewire Filters is a series of Livewire components that provide you with the tools to do live filtering of your data from your own Livewire components.
PHP
15
star
12

laravel-socialite-cognito

This package is a custom AWS Cognito driver for Laravel Socialite.
PHP
7
star
13

laravel-actions

PHP
7
star
14

mutable-listeners

PHP
6
star
15

tailwindcss-scale-utilities

Scale utilities for Tailwind CSS
JavaScript
5
star
16

laravel-route-file-macro

A macro for Laravel's Router to load route file(s) directly
PHP
4
star
17

laravel-translations-loader-demo

PHP
4
star
18

laravel-preflight-checks

PHP
3
star
19

bee-plugin-php-client

PHP client to interact with Bee's plugin API
PHP
3
star
20

vue-package-skeleton

JavaScript
1
star
21

seo-pro-bug

A new Statamic repo to display the bug with SEO Pro
PHP
1
star
22

export-system-demo

PHP
1
star