Pod-Point/
laravel-mail-export
g4t.io

Laravel Mail Export

7 stars by Paul Redmond

A mailable trait to export mails to a storage disk once being sent

README from Pod-Point/laravel-mail-export Open on GitHub →

Laravel Mail Export

Latest Version on Packagist tests Software License Total Downloads

This package can export any mail sent with Laravel's Mailable class to any desired filesystem disk and path as a .eml file.

This can be useful when wanting to store emails sent for archive purposes.

Installation

You can install the package via composer:

For Laravel 9.x, 10.x, 11.x (requires PHP version 8.2 or higher)

composer require pod-point/laravel-mail-export

For Laravel 7.x and 8.x

composer require pod-point/laravel-mail-export:^1.0

For Laravel 5.x and 6.x

composer require pod-point/laravel-mail-export:^0.1

Publishing the config file

The configuration for this package comes with some sensible values but you can optionally publish the config file with:

php artisan vendor:publish --provider="PodPoint\MailExport\MailExportServiceProvider"

You will be able to specify:

  • enabled: whether this package is enabled or not. Once installed, it's enabled by default but the MAIL_EXPORT environment variable can be used to configure this.
  • disk: which disk to use by default. null will use the default disk from your application filesystem.
  • path: the default path, within the configured disk, where mail will be exported.

See our config/mail-export.php for more details.

Usage

Simply add the Exportable trait and the ShouldExport interface to any Mailable class that you want to persist into any storage disk.

<?php

namespace App\Mail;

use Illuminate\Mail\Mailable;
use PodPoint\MailExport\Concerns\Exportable;
use PodPoint\MailExport\Contracts\ShouldExport;

class OrderShipped extends Mailable implements ShouldExport
{
    use Exportable;

    // ...
}

This will use the default filesystem disk and path from the configuration and will also generate a unique filename for you.

The default filename is using a timestamp, the mail recipients, the subject and will look like so:

2021_03_26_150142_jane_at_example_com_this_is_the_subject.eml

You can also specify the disk, path or filename to use for a specific Mailable using properties:

<?php

namespace App\Mail;

use Illuminate\Mail\Mailable;
use PodPoint\MailExport\Concerns\Exportable;
use PodPoint\MailExport\Contracts\ShouldExport;

class OrderShipped extends Mailable implements ShouldExport
{
    use Exportable;

    public $exportDisk = 'some_disk';

    public $exportPath = 'some_path';

    public $exportFilename = 'some_filename';

    // ...
}

You can also use methods if you need more flexibility:

<?php

namespace App\Mail;

use Illuminate\Mail\Mailable;
use PodPoint\MailExport\Concerns\Exportable;
use PodPoint\MailExport\Contracts\ShouldExport;

class OrderShipped extends Mailable implements ShouldExport
{
    use Exportable;

    // ...

    public function exportDisk(): string
    {
        return 'some_disk';
    }

    public function exportPath(): string
    {
        return 'some_path';
    }

    public function exportFilename(): string
    {
        return 'some_filename';
    }
}

Then you can keep using your Mailable as usual:

Mail::to($request->user())->send(new OrderShipped($order));

Even with Notifications too:

<?php

namespace App\Notifications;

use App\Mail\OrderShipped as Mailable;
use Illuminate\Notifications\Notification;

class OrderShipped extends Notification
{
    // ...

    public function toMail($notifiable)
    {
        return (new Mailable($this->order))->to($notifiable->email);
    }
}

Testing

Run the tests with:

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Credits

License

The MIT License (MIT). Please see License File for more information.


Travel shouldn't damage the earth 🌍

Made with ❤️  at Pod Point

More from the ecosystem

marcreichel/
laya-php
g4t.io
3 53

LayaPHP: Self-Hosted Text Classification for PHP and Laravel

Classify text in PHP without an LLM bill: typed decisions in 100+ languages, self-hosted. Laravel-ready SDK for Laya, a Jev AI alternative.

ai classification decision-engine
marcreichel/laya-php via Laravel News
Josh-Dovey/
postcodes-laravel
g4t.io
5 9

Postcodes for Laravel: GB Postcode Lookup and Geography Data

Postcodes for Laravel adds typed GB postcode lookups, validation, geography data, distance searches, and test fakes through the GB Postcodes API.

Josh-Dovey/postcodes-laravel via Laravel News
RedberryProducts/
mailbox-for-laravel
g4t.io
4 115

Mailbox for Laravel: Preview and Test Rendered Email

Mailbox for Laravel captures outgoing mail in a local dashboard and lets you test rendered HTML, recipients, and attachments with fluent assertions.

RedberryProducts/mailbox-for-laravel via Laravel News