Mail Wrapper
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('[email protected]', 'John Doe');
$envelope->addTo('[email protected]');
$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:[email protected]: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