Získání cesty k příloze Nette\Mail\Message
- Simtrix
- Člen | 15
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
@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
@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 | 1280
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
@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 | 1280
Já bych šel cestou parsování hlavičky https://github.com/…6685b385af3f#…