Posílání emailu s obrázkem

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

Zdravím,

mám maličký problém s emailem. Jde mi konkrétně o obrázky.

Kód:

<?php
$mail = new Mail;
                    $mail->setFrom('From....');
                    $mail->addTo($email);
                    $mail->setSubject("Potvrzení objednávky");

                    $template = new FileTemplate;
                    //$template = $presenter->createTemplate();
                    $template->setFile(APP_DIR . '/templates/email.phtml');
                    $template->basePath = $presenter->template->basePath;

                    $mail->addEmbeddedFile(WWW_DIR . '/images/logo.png');
                    $mail->setHtmlBody($template);
                    $mail->send();
?>

Email.phtml

<?php
<!DOCTYPE html>
<html lang="cs">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
	<title>Title</title>
</head>
<body>

    <img src="http://absolutniOdkazNaObrazek.png">
email

</body>

</html>
?>

V emailu mám přiložen obrázek logo.png, ale jak na něj mám odkázat v šabloně email.phtml? Když zadávám pouze logo.png, vyskočí chyba, že nenašel soubor. Funguje to, když zadám absolutní adresu k obrázku, ale potom mi je přiložený obrázek k ničemu.
Ještě v dokumentaci se píše, že si vyhledá soubory a přidá. V emailu v patičce nemám žádné přidané obrázky.
Jak tedy nejlépe dostat obrázek do emailu?

A ještě taková otázka mimo, četl jsem všemožné informace o tom, jak zapsat v emailu pozadí. Co radíte vy?

Matúš Matula
Člen | 257
+
0
-

Ked som to pouzival ja (asi rok dozadu), tak to fungovalo, ako pises..t.z. ze som v sablone odkazal na obrazok

<img src="{$basePath}/images/obrazok.png">

a Nette si ho automaticky prilozilo, cize nebolo treba volat ani

<?php
$mail->addEmbeddedFile(WWW_DIR . '/images/obrazok.png');
?>

Co sa tyka pozadia, tak som pouzival klasicky zapis pre web, <div> s bg pomocou css. Do pozadia som ale nikdy nedaval nieco naozaj podstatne [nosnu informaciu] emailu.

wise
Člen | 161
+
0
-

V té šabloně email.phtml nemůžu použít proměnnout {$basePath}, neví o ni. Jak ji tam mám dostat? Zkoušel jsem $template->basePath = $this->template->basePath, ale bez úspěchu.

Na pozadí jenom nějaký jednoduchý obrázek s přechodem, nic víc.

wise
Člen | 161
+
0
-

Takže jsem trochu kod upravil, musel jsem zaregistroval filtr

<?php
$mail->setFrom('From....');
                    $mail->addTo($email);
                    $mail->setSubject("Potvrzení objednávky");

                    $template = new FileTemplate;
                    //$template = $presenter->createTemplate();
                    $template->setFile(APP_DIR . '/templates/email.phtml');

		    $template->registerFilter(new LatteFilter);
                    $template->basePath = $presenter->template->basePath;

                    $mail->addEmbeddedFile(WWW_DIR . '/images/logo.png');
                    $mail->setHtmlBody($template);
                    $mail->send();
?>

už to chybu neháže,
v šabloně mám:

<?php
<img src="{$basePath}/images/logo.png">
?>

ale problém je, že mi přijde email bez obrázku a jako src má: http://images/logo.png.

Nevíte kde je problém?

Matúš Matula
Člen | 257
+
0
-

Tak som to prave skusil, lebo uz som si to nepamatal. Nie je nutne nakoniec pouzivat {$basePath}, ide len o to, aby bola cesta k obrazku spravna a Nette si ho naozaj samo prilozi ako inline prilohu
Testoval som nasledovne:

<?php
require LIBS_DIR . '/Nette/loader.php';

$email_template = new Template();
$email_template->setFile(dirname(__FILE__) . '/index.html');

$mail = new Mail;
$mail->setFrom('info@localhost.sk');
$mail->addTo('ciki@localhost.sk');
$mail->setSubject('test');
$mail->setHtmlBody($email_template);
$mail->send();
echo 'done!';
?>

a v sablone iba

..head sekcia
<body>
	<img class="header-img" src="img/header.jpg" alt="DBBS" />
</body>
</html>
wise
Člen | 161
+
0
-

Tak už to jede, šlo tedy o to, že se obrázky odkazovaly relativně k souboru se šablonou a ne k presenteru. Tam byla moje chyba. Děkuji moc.