Email#

NAME#

Kernel::System::UnitTest::Email - Helper to unit test emails

SYNOPSIS#

Functions to unit test emails

PUBLIC INTERFACE#

new()#

create an object

use Kernel::System::ObjectManager;
local $Kernel::OM = Kernel::System::ObjectManager->new();
my $UnitTestEmailObject = $Kernel::OM->Get('Kernel::System::UnitTest::Email');

MailCleanup()#

Removes existing emails from Email::Test backend object.

my $Success = $UnitTestEmailObject->MailCleanup();

Returns:

my $Success = 1;

MailObjectDiscard()#

Discards the following objects:

Kernel::System::Ticket Kernel::System::Email::Test Kernel::System::Email

and triggers transaction notifications.

Also re-initializes the above objects.

my $Success = $UnitTestEmailObject->MailObjectDiscard();

Returns:

my $Success = 1;

MailBackendSetup()#

Configures Kernel::System::Email::Test as email backend and disables email address check.

my $Success = $UnitTestEmailObject->MailBackendSetup();

Returns:

my $Success = 1;

EmailGet()#

Fetches emails from email test backend and returns array of hash references containing emails.

my @Emails = $UnitTestEmailObject->EmailGet();

Returns:

@Emails = (
    {
        Header  => "Email1 Header text...",
        Body    => "Email1 Header text...",
        ToArray => [
            'email1realrecipient1@test.com',
            'email1realrecipient2@test.com',
            'email1realrecipient1@test.com',
        ],
    },
    {
        Header => "Email2 Header text...",
        Body => "Email2 Header text...",
        ToArray => [ 'email2realrecipient1@test.com', ],
    },
    # ...
);

EmailSentCount()#

This function counts the number of sent emails.

$UnitTestEmailObject->EmailSentCount(
    UnitTestObject => $Self,
    Count          => 3,                               # Expected number of sent emails
    Message        => '3 emails must have been sent.', # Message printed for unit test
);

EmailValidate()#

Checks if the sent emails match the given criteria.

Example:

my $Success = $UnitTestEmailObject->EmailValidate(
    UnitTestObject => $Self,
    UnitTestFalse  => 1,                                         # optional, validation should get negated
    Message        => 'Sent emails must contain expected data.', # Message printed for unit test
    Email          => \@Emails,                                  # optional, result of EmailGet() will be used by default
    Header         => qr{To\:\sto\@test.com}xms,                 # Regex or array of regexes that the headers of the sent emails have to match
                                                                 #    example: [ qr{To\:\sto\@test.com}xms, qr{To\:\scc\@test.com}xms, ],
    Body           => qr{Hello [ ] World}xms,                    # Regex or string that the body of the sent emails have to match
    ToArray        => 'email1realrecipient1@test.com',           # Array of strings, string, array of regexes or regex with recipients the sent emails have to match
);

Returns:

my $Success = 1; # or 0 if not found