Template jako příloha mailu
- Zuben45
- Člen | 268
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)
- David Matějka
- Moderator | 6445
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
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
ne, vyzadas si to jako jakoukoliv jinou zavislost: https://doc.nette.org/…dependencies
- Zuben45
- Člen | 268
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)
- David Matějka
- Moderator | 6445
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:
- Zuben45
- Člen | 268
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:
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)