Odesílání uploadovaných souborů mailem – název přílohy?

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

Ahoj, pár vláken k tomuto tématu je (třeba tady), ale stále se mi nedaří dosáhnout toho, abych odeslal z formuláře uploadovaný soubor jako přílohu mailu a mohl si určit vlastní název souboru (jinak přiložit tmpName v surové podobě jde). Zkoušené metody:
1.

$mail->addAttachment("muj-vlastni-nazev.jpg", $values['file']->getContents());

vyhazuje, že soubor ‚muj-vlastni-nazev.jpg‘ nenalezen; podle dokumentace má být první parametr zdrojový soubor, takže chyba celkem dává smysl

2. kostrbaté (soubor se nejdříve překopíruje, přiloží a pak smaže)

$file = $form->values['file'];
$newFile = $_SERVER['DOCUMENT_ROOT'] . "/soubory/" . $file->name;
$file->move($newFile);
$mail->addAttachment($newFile);
unlink($newFile);

vyhazuje obskurní warning rename(,E:/Dokumenty/net-vor/klient/preklady/soubory/): No error na localhostu (Win7 SP1) i na produkci (Linux s PHP 5.3).

Zajímavé je, že soubor se skutečně vytvoří a přejmenuje, potuď to funguje… to je ale vše.

Tuší někdo, jak na to?

(Nette dev2.0 pro 5.3)

Editoval net-vor (17. 5. 2011 11:48)

net-vor
Člen | 35
+
0
-

Díky, ale tohle přesně mi nefunguje… pokud to předělám podle toho, co tam má kravčo, vyhazuje to FileNotFoundException File 'pick-your-name.zip' not found.

net-vor
Člen | 35
+
0
-

Tak jsem na to přišel – důležité bylo testovat pomocí $file->isOK(), jestli se upload vůbec uskutečnil. Příloha s vlastním jménem se pak přidá pomocí

$file = $form->values['file'];
if ($file->isOK())
    $mail->addAttachment($file->name, $file->getContents());

První parametr je skutečné jméno uploadovaného souboru, druhý je potom jeho content. Občas se to tvářilo, že to uploadovalo soubory, které to ve skutečnosti neuploadovalo, tak do těch metod chodily prázdné parametry a proto ty chyby. Kdyby to někdo další řešil…

Editoval net-vor (18. 5. 2011 12:47)

Tomáš Votruba
Moderator | 1114
+
0
-

Díky za zjištění, doplněno do dokumentace