Unlink přílohy mailu způsobí její neodeslání

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
patriksima
Člen | 58
+
0
-

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)

Filip Procházka
Moderator | 4668
+
0
-

Já teď taky koukal a taky jsem na nic nepřišel. Tak to nemaž? :)

patriksima
Člen | 58
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)

jtousek
Člen | 951
+
0
-

Nemělo by Nette v tom případě vyhodit nějakou chybu, že soubor přílohy nebyl nalezen?

Filip Procházka
Moderator | 4668
+
0
-

Třeba tam je, ale nic v něm není?

jtousek
Člen | 951
+
0
-

To by ten prázdný soubor přišel i e-mailem, ne?

jansfabik
Člen | 193
+
0
-

Ten skript vypadá tak, že vygeneruje fakturu a pak ji pošle mailem?

Protože pokud ano, tak se ten skript při překročení time limitu zařízne ještě před odesláním.