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

5.0.2 2025-09-09 16:07 UTC

README

Build Status Opensource ByJG GitHub source GitHub license GitHub release

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

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

Open source ByJG