![Fermin Perdomo](/img/siendo.png)
Fermin Perdomo
Full Stack Developer
![](/img/default-featured-image.png)
How to Set Up a Mailing List with Laravel, Statamic, and Mailgun
This is a general outline for creating a mailing list with Laravel and Statamic using Mailgun and a service provider:
Set up your Mailgun account and obtain your API key.
Install the Mailgun package for Laravel using Composer:
composer require mailgun/mailgun-php
Add a new class `MailgunServiceProvider` in `app\Providers\` folder:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Mailgun\Mailgun;
class MailgunServiceProvider extends ServiceProvider
{
/**
* Register the Mailgun client with the service container.
*
* @return void
*/
public function register()
{
$this->app->singleton(Mailgun::class, function ($app) {
return Mailgun::create(env('MAILGUN_SECRET', ''));
});
}
}
Add the Mailgun service provider to your
config/app.php
file:
'providers' => [
// Other service providers...
App\Providers\MailgunServiceProvider::class,
],
In your
.env
file, add your Mailgun API key and domain:
MAILGUN_SECRET=your-api-key
MAILGUN_DOMAIN=your-domain
[email protected]
Create a form in your Statamic site that allows users to enter their email address and submit it to your mailing list.
In your Controler or your form submission handler, use the Mailgun service to add the user's email address to your mailing list:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Mailgun\Mailgun;
class MailController extends Controller
{
public function subscribe(Request $request, Mailgun $mgClient)
{
# Add a subscriber to the mailing list
$mailing_list = env('MAILGUN_LIST', '');
$address = $request->get('email');
[$name] = explode('@', $address);
try {
$result = $mgClient->mailingList()->member()->create(
$mailing_list,
$address,
$name
);
} catch (\Exception $e) {
Log::error($e->getCode() . ' ' .$e->getMessage());
return (new \Statamic\View\View)
->template('errors.subscribe')
->layout('mail');
}
return (new \Statamic\View\View)
->template('mail.subscribe')
->layout('mail')
->with(['result' => $result]);
}
}
Add your route to point to your controller:
Route::post('/email/subscribe', [\App\Http\Controllers\MailController::class, 'subscribe']);
Add you template:
views ->errors->subscribe `views\errors\subscribe.antlers.html`
Thank you for subscribing!
We appreciate your support and are grateful to have you as a member of our community.
We look forward to providing you with valuable content and updates.
Please don't hesitate to reach out if you have any questions or suggestions. Thank you again for your support!
Views ->mail->subscribe views\errors\subscribe.antlers.html
Conclusion
That's the basic process for setting up a mailing list with Laravel and Statamic using Mailgun. You can also use the Mailgun API to manage your mailing list, such as getting a list of members, updating member information, and so on.