Template jako příloha mailu

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

Dobrý den,
potřeboval bych poradit. Potřebují poslat E-mail s přílohou, která bude jako šablona (jedná se o výpis objednaného zboží a dalšího).

Našel jsem jen jedinou „neaktuální“ odpověd zde: https://forum.nette.org/…i-nette-mail ,ale je již 6 let stará, a tak se chci zeptat jestli to již není v nové verzi Nette lépe pořešené.

Jako testovací kód mám:

$latte = new \Latte\Engine;
$params = array(
	'orderId' => $data->orderid,
);

$priloha = new \Latte\Engine;

$mail = new Message;
$mail->setFrom(' <info@test.cz>')
	->addTo($email)
	->setHtmlBody($latte->renderToString('email_templates/email.latte', $params));
//$mail->addAttachment('priloha.html',$priloha->renderToString('email_templates/orderattach.latte', $params));

$mail->addPart()
	->setContentType('text/html')
	->setEncoding(Message::ENCODING_BASE64)
	->setBody($priloha)
	->setHeader('Content-Disposition','attachment; filename="test.html"');

	$mailer = new SendmailMailer;
	$mailer->send($mail);

Děkuji

****EDIT: Tak vyřešeno :)

$latte = new \Latte\Engine;
$params = array(
	'orderId' => $data->orderid,
);

$priloha = new \Latte\Engine;

$mail = new Message;
$mail->setFrom(' <info@test.cz>')
	->addTo($data->email)
	->setHtmlBody($latte->renderToString('email_templates/email.latte', $params));

$mail->addPart()
	->setContentType('text/html')
	->setEncoding(Message::ENCODING_BASE64)
	->setBody($priloha->renderToString('email_templates/orderattach.latte', $params))
	->setHeader('Content-Disposition','attachment; filename="test.html"');

$mailer = new SendmailMailer;
$mailer->send($mail);

Nebo se to dá vyřešit i jinak ? :)
Možná se se hodila ukázka do dokumentace ;)

Editoval Zuben45 (17. 12. 2015 8:58)

CZechBoY
Člen | 3608
+
+1
-

Vypadá to v pohodě. Jen nepotřebuješ 2× Latte\Engine, kdy v té instanci nic neměníš.

David Matějka
Moderator | 6445
+
+1
-

Latte\Engine ani mailer se nevytvari rucne, latte vytvoris pomoci sluzby https://api.nette.org/…Factory.html a jako mailer si vyzadas sluzbu typu https://api.nette.org/…IMailer.html

Zuben45
Člen | 268
+
0
-

CZechBoY napsal(a):

Vypadá to v pohodě. Jen nepotřebuješ 2× Latte\Engine, kdy v té instanci nic neměníš.

Díky, vyzkoušeno a opravdu funguje :)

David Matějka napsal(a):

Latte\Engine ani mailer se nevytvari rucne, latte vytvoris pomoci sluzby https://api.nette.org/…Factory.html a jako mailer si vyzadas sluzbu typu https://api.nette.org/…IMailer.html

Nevytváří se ručně ? Jsem právě postupoval podle dokumentace.

takže, takto ?

$this->context->getService('ILatteFactory');
$this->context->getService('IMailer');
David Matějka
Moderator | 6445
+
+1
-

ne, vyzadas si to jako jakoukoliv jinou zavislost: https://doc.nette.org/…dependencies

Zuben45
Člen | 268
+
0
-

David Matějka napsal(a):

ne, vyzadas si to jako jakoukoliv jinou zavislost: https://doc.nette.org/…dependencies

ach tak, omlouvám se :)

ještě pro jistotu :D

public $message;
public $mailer;

  public function __construct(Nette\Mail\Message $message,Nette\Mail\SendmailMailer $mailer)
 {
     $this->db = $connection;
	  $this->message = $message;
	  $this->mailer = $mailer;
 }

Editoval Zuben45 (17. 12. 2015 12:19)

CZechBoY
Člen | 3608
+
0
-

@Zuben45 Máš si vyžádat IMailer a ne konkrétní Mailer. Jinak ti v konstruktoru chybí parametr $connection.
Message asi jentak nedostaneš, protože to není služba.

btw. Dá se někde zjistit, co všechno se samo přidává jako služba?

David Matějka
Moderator | 6445
+
+2
-

btw. Dá se někde zjistit, co všechno se samo přidává jako služba?

v jednotlivych extensions :) nebo ve vygenerovanem kontejneru.

Aktualizoval jsem cheatsheet a pridal jsem tam novinky z 2.3. Nejsou tam ale vsechny, jen ty nejdulezistejsi:

http://nette.matej21.cz/cs/di

Zuben45
Člen | 268
+
0
-

David Matějka napsal(a):

btw. Dá se někde zjistit, co všechno se samo přidává jako služba?

v jednotlivych extensions :) nebo ve vygenerovanem kontejneru.

Aktualizoval jsem cheatsheet a pridal jsem tam novinky z 2.3. Nejsou tam ale vsechny, jen ty nejdulezistejsi:

http://nette.matej21.cz/cs/di

Super díky moc :), koukám že konstruktor se hodí nejlépe všude :)

CZechBoY napsal(a):

@Zuben45 Máš si vyžádat IMailer a ne konkrétní Mailer. Jinak ti v konstruktoru chybí parametr $connection.
Message asi jentak nedostaneš, protože to není služba.

Tohle je z presenteru, jinak $connection mám v konstruktoru u hlavního modelu.

public $mailer;

public function __construct(\Nette\Mail\IMailer $mailer,\App\Model\ShoppingCart $kos){
		$this->mailer = $mailer;
		$this->kosik = $kos;
	}

Tak doufám že to již je v pořádku :)

jinak, pořád nevím proč mi to nechce sebrat, píšemi že $this->kosik je nulloví, ale dokud jsem ho používal jako

$this->context->getService('shoppingCart');

tak fungoval, ale všude jsem ho musel nastavovat :/, bych potřeboval abych ho jednout nastavil v BasePressenteru a mohl ho používat kdykoliv.

EDIT: Tak vyřešeno :), stačilo přes Property injection. Ale nevím proč to nešlo přes konstruktor

/** @var \App\Model\ShoppingCart @inject */
	public $kosik;

Editoval Zuben45 (18. 12. 2015 13:06)

CZechBoY
Člen | 3608
+
+1
-

Pokud prepisujes konstruktor tak se konstruktor predka nevolá!