Uložení mailu do databáze

- pernica@tomp.eu
- Člen | 10
Ahoj,
řeším odesílání e-mailů, přes frontu v databázi a Cron, který to
posléze odesílá.
Jen bojuji s uložením Nette\Mail\Message do DB. Jak RAW mi to funguje. Ale
chtěl bych serializovat objekt Message. Není to čistá Nette aplikace,
nepoužívá DI.
Serializace
public static function toArray(Nette\Mail\Message $mail): array
{
return [
'from' => $mail->getHeader('From'),
'to' => $mail->getHeader('To'),
'cc' => $mail->getHeader('Cc'),
'bcc' => $mail->getHeader('Bcc'),
'subject' => $mail->getSubject(),
'html' => $mail->getHtmlBody(),
'text' => $mail->getBody(),
'attachments' => array_map(
fn($a) => [
'name' => $a->getName(),
'content' => base64_encode($a->getBody()),
'contentType' => $a->getContentType(),
],
$mail->getAttachments()
),
];
}
Uložení do fronty
public static function queueMail(Message $mail, int $priority = 0): void
{
global $database;
$serializedMail = self::toArray($mail);
$database->table('mail_queue')->insert([
'sender' => implode(',', array_keys($mail->getFrom())),
'recipients' => json_encode($mail->getHeader('To')),
'subject' => $mail->getSubject(),
'body_html' => $mail->getHtmlBody(),
'body_text' => $mail->getBody(),
'message' => json_encode($serializedMail),
'priority' => $priority,
'created_at' => new DateTimeImmutable(),
'status' => 'queued',
]);
}
Tohle funguje docela dobře. Ale chybí mi v tom obrázky, tj. embedded
přílohy, které vloží Latte.
Nějaký nápad, jak to vyřešit? Nebo jdu vůbec správnou cestou?