Хочете налаштувати поштові програми динамічно? Метод 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');
}
}
Динамічна конфігурація поштової програми ідеально підходить для багатокористувацьких застосунків, нестандартних поштових провайдерів або будь-якої ситуації, коли налаштування пошти слід конфігурувати під час виконання
```