PHPackages                             ericmartel/codeception-email - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Testing &amp; Quality](/categories/testing)
4. /
5. ericmartel/codeception-email

ActiveLibrary[Testing &amp; Quality](/categories/testing)

ericmartel/codeception-email
============================

Provides test helpers for Codeception when testing email functionality

1.0.3(6y ago)10948.1k↓35.3%5[3 issues](https://github.com/ericmartel/codeception-email/issues)8MITPHP

Since Dec 30Pushed 6y ago1 watchersCompare

[ Source](https://github.com/ericmartel/codeception-email)[ Packagist](https://packagist.org/packages/ericmartel/codeception-email)[ RSS](/packages/ericmartel-codeception-email/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (4)DependenciesVersions (5)Used By (8)

Codeception Email Testing Framework
===================================

[](#codeception-email-testing-framework)

This framework defines a testing Trait (interface) which allows standardized email testing across various email testing services, such as

- [MailHog](https://github.com/mailhog/MailHog) with the [MailHogModule](http://github.com/ericmartel/codeception-email-mailhog)
- [MailCatcher](http://mailcatcher.me/) with the [MailCatcherModule](http://github.com/ericmartel/codeception-email-mailcatcher)
- [Mailtrap](https://mailtrap.io/) with the [MailtrapModule](http://github.com/ericmartel/codeception-email-mailtrap)

### Available Test Methods

[](#available-test-methods)

All testing methods are defined in `\Codeception\Email\TestsEmails`.

```
haveEmails()

```

Checks if there are any emails in the inbox

```
haveNumberOfEmails($expected)

```

Checks that the amount of emails in the inbox is exactly $expected

```
dontHaveEmails()

```

Checks that there are no emails in the inbox

```
haveUnreadEmails()

```

Checks that there is at least one unread email

```
haveNumberOfUnreadEmails($expected)

```

Checks that the amount of emails in the unread inbox is exactly $expected

```
dontHaveUnreadEmails()

```

Checks that there are no unread emails in the inbox

```
seeInOpenedEmailBody($expected)

```

Validates that $expected can be found in the opened email body

```
seeInOpenedEmailSubject($expected)

```

Validates that $expected can be found in the opened email subject

```
dontSeeInOpenedEmailBody($expected)

```

Checks that $expected cannot be found in the opened email body

```
dontSeeInOpenedEmailSubject($expected)

```

Checks that $expected cannot be found in the opened email subject

```
seeInEmailBody($email, $expected)

```

Checks that the body of $email contains $expected

```
dontSeeInEmailBody($email, $expected)

```

Checks that the body of $email does not contain $expected

```
seeInEmailSubject($email, $expected)

```

Checks that the subject of $email contains $expected

```
dontSeeInEmailSubject($email, $expected)

```

Checks that the subject of $email does not contain $expected

```
seeInOpenedEmailSender($expected)

```

Checks if the sender of the opened email contains $expected

```
dontSeeInOpenedEmailSender($expected)

```

Checks if the sender of the opened email does not contain $expected

```
seeInEmailSender($email, $expected)

```

Checks if the sender of $email contains $expected

```
dontSeeInEmailSender($email, $expected)

```

Checks if the sender of $email does not contain $expected

```
seeInOpenedEmailReplyTo($expected)

```

Checks if the ReplyTo of the opened email contains $expected

```
dontSeeInOpenedEmailReplyTo($expected)

```

Checks if the ReplyTo of the opened email does not contain $expected

```
seeInEmailSender($email, $expected)

```

Checks if the ReplyTo of $email contains $expected

```
dontSeeInEmailReplyTo($email, $expected)

```

Checks if the ReplyTo of $email does not contain $expected

```
seeInOpenedEmailRecipients($expected)

```

Checks that the recipients of the opened email contain $expected

```
dontSeeInOpenedEmailRecipients($expected)

```

Checks that the recipients of the opened email do not contain $expected

```
seeInEmailRecipients($email, $expected)

```

Checks that the recipients of $email contain $expected

```
dontSeeInEmailRecipients($email, $expected)

```

Checks that the recipients of $email do not contain $expected

```
seeInOpenedEmailToField($expected)

```

Checks the the To field of the opened email contains $expected

```
dontSeeInOpenedEmailToField($expected)

```

Checks the the To field of the opened email does not contain $expected

```
seeInEmailToField($email, $expected)

```

Checks the the To field of $email contains $expected

```
dontSeeInEmailToField($email, $expected)

```

Checks the the To field of $email does not contain $expected

```
seeInOpenedEmailCCField($expected)

```

Checks that the CC field of the opened email contains $expected

```
dontSeeInOpenedEmailCCField($expected)

```

Checks that the CC field of the opened email does not contain $expected

```
seeInEmailCCField($email, $expected)

```

Checks that the CC field of $email contains $expected

```
dontSeeInEmailCCField($email, $expected)

```

Checks that the CC field of $email does not contain $expected

```
seeInOpenedEmailBCCField($expected)

```

Checks that the BCC field of the opened email contains $expected

Warning: it is possible for an email to have its BCC field empty, it doesn't mean that another instance of the same email doesn't exist.

```
dontSeeInOpenedEmailBCCField($expected)

```

Checks that the BCC field of the opened email does not contain $expected

Warning: it is possible for an email to have its BCC field empty, it doesn't mean that another instance of the same email doesn't exist.

```
seeInEmailBCCField($email, $expected)

```

Checks that the BCC field of $email contains $expected

Warning: it is possible for an email to have its BCC field empty, it doesn't mean that another instance of the same email doesn't exist.

```
dontSeeInEmailBCCField($email, $expected)

```

Checks that the BCC field of $email does not contain $expected

Warning: it is possible for an email to have its BCC field empty, it doesn't mean that another instance of the same email doesn't exist.

```
seeInOpenedEmailPriority($expected)

```

Checks that the priority of the opened email is $expected

```
dontSeeInOpenedEmailPriority($expected)

```

Checks that the priority of the opened email is not $expected

```
seeInEmailPriority($email, $expected)

```

Checks that the priority of $email is $expected

```
dontSeeInEmailPriority($email, $expected)

```

Checks that the priority of $email is not $expected

### Developing For New Testing Services

[](#developing-for-new-testing-services)

A base trait defining the interface the test methods require is available in `\Codeception\Email\EmailServiceProvider`. All of these methods need to be overloaded in a new Service Provider. They are protected as they are only used by the testing layer, not by the user himself.

```
getCurrentInbox()

```

Returns the complete current inbox

```
getUnreadInbox()

```

Returns the inbox containing unread emails

```
getOpenedEmail($fetchNextUnread = FALSE)

```

Main method called by the tests, providing either the currently open email or the next unread one

```
getEmailBody($email)

```

Returns the body of an email

```
getEmailSubject($email)

```

Returns the subject of an email

```
getSender($email)

```

Returns the string containing the sender of the email

```
getEmailTo($email)

```

Returns the string containing the persons included in the To field

```
getEmailCC($email)

```

Returns the string containing the persons included in the CC field

```
getEmailBCC($email)

```

Returns the string containing the persons included in the BCC field

```
getEmailRecipients($email)

```

Returns the string containing all of the recipients, such as To, CC and if provided BCC

```
grabBodyFromEmail

```

Returns the email body as string

```
$email_body = $I->grabBodyFromEmail('text/html');
$doc = new DOMDocument();
$doc->loadHTML($email_body);
$login = $doc->getElementById('login')->textContent;
$password = $doc->getElementById('password')->textContent;

```

Fetch login &amp; password from 'text/html' email MIME-part.

### To Do

[](#to-do)

While this framework should be sufficient for most email testing scenarios, the remaining features need to be implemented

- HTML and Plain Text content
- Attachments
- Priority

### License

[](#license)

Copyright (c) 2015-2016 Eric Martel,

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance14

Infrequent updates — may be unmaintained

Popularity45

Moderate usage in the ecosystem

Community22

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor1

Top contributor holds 76.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~510 days

Total

4

Last Release

2282d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1311890?v=4)[Eric Martel](/maintainers/ericmartel)[@ericmartel](https://github.com/ericmartel)

---

Top Contributors

[![ericmartel](https://avatars.githubusercontent.com/u/1311890?v=4)](https://github.com/ericmartel "ericmartel (13 commits)")[![Vincent--](https://avatars.githubusercontent.com/u/9378735?v=4)](https://github.com/Vincent-- "Vincent-- (2 commits)")[![aWuttig](https://avatars.githubusercontent.com/u/726519?v=4)](https://github.com/aWuttig "aWuttig (1 commits)")[![eodin](https://avatars.githubusercontent.com/u/2424164?v=4)](https://github.com/eodin "eodin (1 commits)")

### Embed Badge

![Health badge](/badges/ericmartel-codeception-email/health.svg)

```
[![Health](https://phpackages.com/badges/ericmartel-codeception-email/health.svg)](https://phpackages.com/packages/ericmartel-codeception-email)
```

###  Alternatives

[szepeviktor/phpstan-wordpress

WordPress extensions for PHPStan

3309.4M1.2k](/packages/szepeviktor-phpstan-wordpress)[dms/phpunit-arraysubset-asserts

This package provides ArraySubset and related asserts once deprecated in PHPUnit 8

14228.7M340](/packages/dms-phpunit-arraysubset-asserts)[jasonmccreary/laravel-test-assertions

A set of helpful assertions when testing Laravel applications.

3524.1M38](/packages/jasonmccreary-laravel-test-assertions)[orchestra/workbench

Workbench Companion for Laravel Packages Development

8219.1M67](/packages/orchestra-workbench)[soyuka/contexts

Behatch contexts

282.2M21](/packages/soyuka-contexts)[roquie/laravel-dusk-select2

Select2.js support for the Laravel Dusk testing.

41356.2k5](/packages/roquie-laravel-dusk-select2)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
