Příloha mailu – email odejde, přílohu nelze otevřít

KubajzD
Člen | 3
+
0
-

Zdravím všechny,

dokázal by mi někdo, prosím, poradit co dělám špatně?

V presenteru při zpracování formuláře mám tento kód pro odeslání e-mailu.
E-mail se odešle, dorazí taky na cílovou adresu. Při pokusu o otevření přílohy však obrázek nelze zobrazit.

Soubor existuje, to mám ověřeno.

<?php
		try {
            $mail = new \Nette\Mail\Message();
            $mail->setFrom('test@test.com')
                    ->addTo('mail@neco.cz')
                    ->setSubject('Nová registrace')
                    ->addAttachment('test.png', file_get_contents(__DIR__ . '/../../../www/upload/photo.png'))
                    ->setBody('Registrace');
            $this->mailer->send($mail);


            //zpráva a přesměrování
            $this->flashMessage('Registrace byla úspěšná', 'success');
            $this->redirect('Homepage:');
        } catch (InvalidStateException $ex) {
            $this->flashMessage('Email se nepodařilo odeslat.');
        }
?>

Děkuji za každou nápovědu a pomoc.

iguana007
Člen | 970
+
0
-

Poslal jsem ti zpravu pres forum, predpokladam, ze ti to dorazilo na mail, se kterym ses tady registroval.

KubajzD
Člen | 3
+
0
-

Odesláno podle pokynů v soukromé zprávě.

Díky

KubajzD
Člen | 3
+
+1
-

Díky @iguana007,

chyba identifikována.

Nikde se o tom nepíše, ale záleží na pořadí volání

$mail->addAttachment(…) a

$mail->setBody(‚Tělo mailu‘)

Pokud to nastavení přehodím na

<?php
        try {
            $mail = new \Nette\Mail\Message();
            $mail->setFrom('test@test.com')
                    ->addTo('mail@neco.cz')
                    ->setSubject('Nová registrace')
                    ->setBody('Registrace')
                    ->addAttachment('test.png', file_get_contents(__DIR__ . '/../../../www/upload/photo.png'));
            $this->mailer->send($mail);


            //zpráva a přesměrování
            $this->flashMessage('Registrace byla úspěšná', 'success');
            $this->redirect('Homepage:');
        } catch (InvalidStateException $ex) {
            $this->flashMessage('Email se nepodařilo odeslat.');
        }
?>

tak to v pohodě funguje.

Díky

Editoval KubajzD (12. 12. 2017 11:26)

David Matějka
Moderator | 6445
+
+5
-

problem neni v poradi volani metod, ale v tom, ze addAttachment vraci instanci MimePartu pro tu prilohu, takze ty volas setBody na attachmentu, ne na mailu. tohle by fungovalo spravne:

$mail->setFrom('test@test.com')
	->addTo('mail@neco.cz')
	->setSubject('Nová registrace')
	->addAttachment('test.png', file_get_contents(__DIR__ . '/../../../www/upload/photo.png'));
$mail->setBody('Registrace');