Získání cesty k příloze Nette\Mail\Message

Simtrix
Člen | 15
+
-1
-

Zdravím,
když vytvářím novou mailovou zprávu, tak můžu jednoduše přidat soubor jako přílohu:

use Nette\Mail\Message;

$filePath = "/path/to/my/file/foo.txt"
$message = new Message();
$message->addAttachment($filePath);

Zároveň si můžu zpět přečíst přidané přílohy:

$attachments = $message->getAttachments(); // vrací Nette\Mail\MimePart[]

Trochu mě trápí, že když prorotuji jednotlivé $attachments přes foreach, tak se už nedokáži dostat k absolutní cestě souboru, protože ji Nette\Mail\MimePart nebosahuje.

Napadlo mě, že kdyby se kód (https://github.com/…/Message.php#L278) upravil na

public function addAttachment(string $file, ?string $content = null, ?string $contentType = null): MimePart
{
  return $this->attachments[$file] = $this->createAttachment($file, $content, $contentType, 'attachment');
}

dalo by se k absolutní cestě souboru zase dostat. Ale dost možná je to blbost, která by způsobila nějaké fkupy.

Chci se proto zeptat: Je toto hodno MR na Gitu nebo je jiný způsob, jak se k absolutní cestě přílohy dostat?

dakur
Člen | 493
+
+2
-

@Simtrix Proč bys to dělal? Resp. k čemu to potřebuješ? Přijde mi, že to API chápeš špatně, Message neslouží k tomu, aby přechovávalo informace o souborech na disku, ale o částech zprávy. Možná by stačilo si ty cesty ukládat do pomocného pole nebo nějakého objektu pod voláním new Message()?

Simtrix
Člen | 15
+
0
-

@dakur Dělám to, protože když odešlu mail přes Nette Mailer, tak mi failne DKIM pro MS/Outlook/Hotmail… Když to stejné pošlu přes PHPMailer, tak vše proběhne v pohodě. Už jsem s tím ztratil nervy a začnu v Nette appkách používat PHPMailer.

→ Píšu obálku pro vytvoření PHPMaileru, který implementuje Nette\Mail\Mailer. Ve všech appkách mám již vytvořenou instanci Nette\Mail\Message. Jen potřebuji informace z Message předat do PHPMaileru. Vše šlo dobře, až na přílohy. Tak hledám možnosti, jak to udělat, abych musel co nejméně upravit původní kód.

Ale pokud v Message ta informace vůbec není, tak původní kód budu stejně muset trochu změnit.

Díky za potvrzení.

Editoval Simtrix (23. 5. 2023 8:22)

Marek Bartoš
Nette Blogger | 1177
+
0
-

Bylo by ideální najít, co se v nette maileru chová jinak. Bohužel prehistorický outlook často failuje :')

Asi bys jako workaround mohl získat obsah přílohy a vložit si ji do nového souboru. Ani nemusí být na disku, existují i virtuální soubory

Simtrix
Člen | 15
+
0
-

@MarekBartoš PHPMailer má metodu ::addStringAttachment(), takže obsah si můžu předat jako string v base64. Problém je trochu se jménem, které budu buď muset rozparsovat z hlavičky a nebo použít mezi uložení cesty k soubory na disku do jiného pole/objektu.

Ideální by to skutečně bylo. Bohužel se mi nepodařilo najít problém. A ano, failuje často. Což nemění nic na tom, že většina partnerů používá Outlook Enterprise a potom to padá kdovíkam a kdo ví, jestli to vůbec dorazí. Outlook to imo ověřuje podle nálady a aktuálního počasí.

Marek Bartoš
Nette Blogger | 1177
+
+1
-

Já bych šel cestou parsování hlavičky https://github.com/…6685b385af3f#…

Simtrix
Člen | 15
+
0
-

@MarekBartoš Vypadá dobře, díky!