83 lines
1.9 KiB
Markdown
83 lines
1.9 KiB
Markdown
# promoseven/azure-mailer
|
|
|
|
Laravel mail transport for Microsoft 365 via the Azure AD Graph API.
|
|
Replaces SMTP with a Client Credentials OAuth2 flow — drop-in compatible with
|
|
Laravel's `Mail` facade, Mailables, Notifications, and queued mail.
|
|
|
|
## Requirements
|
|
|
|
- PHP 8.2+
|
|
- Laravel 11 or 12
|
|
- An Azure AD App Registration with `Mail.Send` application permission
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
composer require promoseven/azure-mailer
|
|
```
|
|
|
|
## Azure AD Setup
|
|
|
|
1. Go to **Azure Portal → App Registrations → New registration**
|
|
2. Note the **Tenant ID**, **Client ID**
|
|
3. Under **Certificates & secrets**, create a new **Client secret**
|
|
4. Under **API permissions**, add **Microsoft Graph → Application permissions → Mail.Send**
|
|
5. Click **Grant admin consent**
|
|
|
|
## Configuration
|
|
|
|
Add to `config/mail.php` under `mailers`:
|
|
|
|
```php
|
|
'azure' => [
|
|
'transport' => 'azure',
|
|
'tenant_id' => env('AZURE_TENANT_ID'),
|
|
'client_id' => env('AZURE_CLIENT_ID'),
|
|
'client_secret' => env('AZURE_CLIENT_SECRET'),
|
|
'from_address' => env('AZURE_MAIL_FROM_ADDRESS'),
|
|
],
|
|
```
|
|
|
|
Set `.env`:
|
|
|
|
```env
|
|
MAIL_MAILER=azure
|
|
|
|
AZURE_TENANT_ID=your-tenant-id
|
|
AZURE_CLIENT_ID=your-client-id
|
|
AZURE_CLIENT_SECRET=your-client-secret
|
|
AZURE_MAIL_FROM_ADDRESS=noreply@yourdomain.com
|
|
```
|
|
|
|
The `from_address` must be a mailbox in your Microsoft 365 tenant.
|
|
|
|
## Advanced config (optional)
|
|
|
|
Publish the config file to override defaults:
|
|
|
|
```bash
|
|
php artisan vendor:publish --tag=azure-mailer-config
|
|
```
|
|
|
|
This creates `config/azure-mailer.php`:
|
|
|
|
```php
|
|
return [
|
|
'save_to_sent_items' => false, // set true to keep copies in Sent folder
|
|
'timeout' => 30, // HTTP timeout in seconds
|
|
'graph_api_version' => 'v1.0', // or 'beta'
|
|
];
|
|
```
|
|
|
|
## Usage
|
|
|
|
No changes needed — use Laravel mail exactly as before:
|
|
|
|
```php
|
|
Mail::to('user@example.com')->send(new OrderConfirmation($order));
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|