byjg / mailwrapper
A lightweight wrapper for send mail. The interface is tottaly decoupled from the sender. The sender availables are: PHP Mailer, AWS SES Api, Mandril Api.
Fund package maintenance!
byjg
Installs: 49 179
Dependents: 3
Suggesters: 0
Security: 0
Stars: 5
Watchers: 1
Forks: 5
Open Issues: 0
pkg:composer/byjg/mailwrapper
Requires
- php: >=8.1 <8.4
- ext-curl: *
- aws/aws-sdk-php: ~3.20
- byjg/convert: ^5.0
- byjg/webrequest: ^5.0
- phpmailer/phpmailer: >=6.4.1
Requires (Dev)
- phpunit/phpunit: ^9.6
- vimeo/psalm: ^5.9
README
A lightweight wrapper for sending email. The interface is totally decoupled from the sender, providing a single interface for sending mail regardless of the underlying mail service.
Available Wrappers
- SMTP - SMTP with SSL/TLS support
- AWS SES - Amazon Simple Email Service (using API directly)
- Mailgun - Mailgun API (using API directly)
- SendMail - PHP's built-in mail() function
- FakeSender - For testing (does nothing)
Install
composer require "byjg/mailwrapper"
Documentation
- Getting Started - Installation, quick start, and architecture overview
- Envelope - Creating and configuring email messages
- Connection Strings - URI patterns for different mail services (SMTP, Mailgun, SES, etc.)
- Mailer Factory - Registering and creating mailers
- Attachments - Sending attachments and embedded images
- Custom Wrappers - Implementing your own mail wrapper
- Exceptions - Error handling and exception types
Quick Start
<?php require "vendor/autoload.php"; // Create the email envelope $envelope = new \ByJG\Mail\Envelope(); $envelope->setFrom('johndoe@example.com', 'John Doe'); $envelope->addTo('jane@example.com'); $envelope->setSubject('Email Subject'); $envelope->setBody('<h1>Hello World</h1>'); // Register available mailers \ByJG\Mail\MailerFactory::registerMailer(\ByJG\Mail\Wrapper\PHPMailerWrapper::class); \ByJG\Mail\MailerFactory::registerMailer(\ByJG\Mail\Wrapper\MailgunApiWrapper::class); // Create mailer from connection string $mailer = \ByJG\Mail\MailerFactory::create('smtp://username:password@smtp.example.com:587'); // Send the email $result = $mailer->send($envelope);
Architecture
MailWrapper is organized into three main components:
- The Envelope: The mail message. Defines the sender, recipients, body, subject, attachments, etc.
- The Mailer: Responsible for the process of sending the envelope
- The Factory: Registers and creates the available Mailers in the system
Connection URL Schemes
| Scheme | Description | URI Pattern |
|---|---|---|
| smtp | SMTP over insecure connection | smtp://username:password@host:25 |
| tls | SMTP over secure TLS connection | tls://username:password@host:587 |
| ssl | SMTP over secure SSL connection | ssl://username:password@host:465 |
| sendmail | PHP's built-in mail() function | sendmail://localhost |
| mailgun | Mailgun API | mailgun://YOUR_API_KEY@YOUR_DOMAIN |
| ses | Amazon SES API | ses://ACCESS_KEY_ID:SECRET_KEY@REGION |
| fakesender | Testing (does nothing) | fakesender://localhost |
See Connection Strings for detailed configuration examples.
Running Tests
./vendor/bin/phpunit
Dependencies
flowchart TD
byjg/mailwrapper --> byjg/convert
byjg/mailwrapper --> byjg/webrequest
Loading