Unlink přílohy mailu způsobí její neodeslání
- patriksima
- Člen | 58
Nette 2.0.3
PHP 5.3.5–1ubuntu7.11 with Suhosin-Patch
$template = $this->createTemplate();
$template->setFile('blabla');
$mail = $this->context->nette->createMail();
$mail->setFrom('neco@neco.cz')
->addTo('nekdo@nekdo.cz')
->setSubject('Bla bla')
->setHTMLBody($template);
$mail->addAttachment(APP_DIR. '/../temp/neco.pdf');
$mail->send();
@unlink(APP_DIR. '/../temp/neco.pdf');
- s unlinkem přijde mail bez přílohy
- když jej zakomentuji, tak ta příloha normálně odejde
koukal jsem do zdrojáku nette, ale na nic jsem nepřišel.
Editoval patriksima (24. 9. 2012 16:51)
- patriksima
- Člen | 58
HosipLan napsal(a):
Já teď taky koukal a taky jsem na nic nepřišel. Tak to nemaž? :)
já bych to nemazal, ale časem to zabordelí temp a co pak s tím.
- jansfabik
- Člen | 193
A tohle by nepomohlo? (Píšu to z hlavy, nezkoušel jsem to.)
$mail->addAttachment('neco.pdf', file_get_contents(APP_DIR . '/../temp/neco.pdf'));
Edit: I když spíš si myslím, že ten mail nepřišel z nějakého
jiného důvodu, než kvůli smazání toho souboru. Metoda
addAttachment
si ten soubor načte celý pomocí
file_get_contents
a pak už se k němu nijak nepřistupuje.
Editoval jansfabik (24. 9. 2012 18:22)
- Filip Procházka
- Moderator | 4668
Můžeš vždy při odeslání tohohle emailu smazat soubory starší jak den
$pdfs = Nette\Utils\Finder::findFiles('*.pdf')
->in(APP_DIR. '/../temp/pdfs')
->date('<=', '-1 day');
foreach ($pdfs as $pdf) {
@unlink($pdf->getRealpath());
}
Editoval HosipLan (24. 9. 2012 19:57)
- jansfabik
- Člen | 193
To mi nepřipadá jako čisté řešení. Problém bych hledal jinde, protože podle kódu frameworku by to k tomu souboru nemělo po přidání přílohy vůbec přistupovat.
Nepoužíváš ty soubory třeba opakovaně? Nemohlo být to, že předtím ten mail nedošel, jen náhoda?
- Filip Procházka
- Moderator | 4668
Na tom řešení není nic nečistého, je to prostě obcházení problému (jinými slovy dočasné řešení, aby mohl pokračovat ve vývoji aplikace ;).
Imho je to nějaká emailová magie. V kódu frameworku chybu také nevidím.
- patriksima
- Člen | 58
jansfabik napsal(a):
Edit: I když spíš si myslím, že ten mail nepřišel z nějakého jiného důvodu, než kvůli smazání toho souboru. Metoda
addAttachment
si ten soubor načte celý pomocífile_get_contents
a pak už se k němu nijak nepřistupuje.
Přesně. Nette si to načte a pak už ten soubor nepotřebuje. Proto jsem z toho jelen.
Ale teď mě napadlo. V té metodě krom toho odesílání mailu pracuji s imapem (stejný server, jiný účet). Nemůže to mít nějaký vliv?
- patriksima
- Člen | 58
Dal jsem si práci s laděním a tuším zradu v generovaní toho pdf skrze mPDF a Eciovni. Zřejmě to občas spadne na timeout nebo tak něco a to pdf se vůbec nezapíše do toho tempu.
Tušení se potvrdilo. Je třeba zvýšit max_execution_time. Těch 30 sekund je na generování faktur málo :)
Editoval patriksima (25. 9. 2012 9:42)