Динамічна конфігурація поштового відправника в Laravel із використанням Mail::build

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 23 листопада, 2024
Вас цікавить, як гнучко налаштувати відправку електронних листів у Laravel? У нашій статті ви дізнаєтеся, як використовувати метод Mail::build для динамічної конфігурації мейлерів — це може стати в нагоді в багатокористувацьких програмах та нестандартних рішеннях електронної пошти
```html

Хочете налаштувати поштові програми динамічно? Метод Mail::build у Laravel дозволяє створювати поштові програми на льоту! Давайте розглянемо цей гнучкий підхід до налаштування електронної пошти.

# Основне використання

Ось як можна динамічно створити поштову програму:

use Illuminate\Support\Facades\Mail;
 
$mailer = Mail::build([
    'transport' => 'smtp',
    'host' => '127.0.0.1',
    'port' => 587,
    'encryption' => 'tls',
    'username' => 'usr',
    'password' => 'pwd',
    'timeout' => 5,
]);
 
$mailer->send($mailable);

# Приклад з реального життя

Ось як можна це використати в багатокористувацькому застосунку:

class TenantMailService
{
    public function sendWithTenantConfig(
        Tenant $tenant,
        Mailable $mailable
    ) {
        $mailerConfig = $tenant->email_settings;
 
        $mailer = Mail::build([
            'transport' => 'smtp',
            'host' => $mailerConfig->smtp_host,
            'port' => $mailerConfig->smtp_port,
            'encryption' => $mailerConfig->encryption,
            'username' => decrypt($mailerConfig->username),
            'password' => decrypt($mailerConfig->password),
            'from' => [
                'address' => $tenant->email,
                'name' => $tenant->company_name
            ]
        ]);
 
        try {
            $mailer->send($mailable);
 
            Log::info("Email sent for tenant: {$tenant->id}", [
                'mailable' => get_class($mailable)
            ]);
 
        } catch (Exception $e) {
            Log::error("Failed to send email for tenant: {$tenant->id}", [
                'error' => $e->getMessage()
            ]);
 
            throw $e;
        }
    }
}
 
// Використання
class NewsletterController extends Controller
{
    public function send(
        Tenant $tenant,
        TenantMailService $mailService
    ) {
        $newsletter = new TenantNewsletter($tenant);
 
        $mailService->sendWithTenantConfig(
            $tenant,
            $newsletter
        );
 
        return back()->with('success', 'Newsletter queued for sending');
    }
}

Динамічна конфігурація поштової програми ідеально підходить для багатокористувацьких застосунків, нестандартних поштових провайдерів або будь-якої ситуації, коли налаштування пошти слід конфігурувати під час виконання

```