Posílání mailů se šablonou a odkazy
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- jarda256
- Člen | 130
Ahoj, měl bych takový problém. Udělal jsem si třídu na posílání
mailů, která dostane Message, šablonu a parametry. Ale když mám
v šabloně link {link :ConfirmPerson $variables[token]}
tak
dostanu
chybu Presenter name must be alphanumeric string, ':ConfirmPerson' is invalid.
mail trida
<?php
namespace App;
use Nette\Application\LinkGenerator;
use Nette\Bridges\ApplicationLatte\ILatteFactory;
use Nette\Bridges\ApplicationLatte\UIMacros;
use Nette\Mail\Message;
use Nette\Mail\SendmailMailer;
use Simplement\Bridges\DoctrineORM\MailQueue;
use Simplement\MailQueue\Mailer;
use Kdyby\Doctrine\EntityManager;
class MailSender
{
/** @var Mailer */
protected $mailer;
/** @var EntityManager */
protected $em;
/** @var LinkGenerator */
private $linkGenerator;
/** @var ILatteFactory @inject */
private $latteFactory;
function __construct(EntityManager $em, LinkGenerator $lg,ILatteFactory $latteFactory)
{
$this->em = $em;
$this->linkGenerator = $lg;
$this->latteFactory = $latteFactory;
$this->mailer = new Mailer(new SendmailMailer(),new MailQueue($this->em));
}
function sendEmail(Message $message,$template,$variables)
{
$latte = $this->latteFactory->create();
UIMacros::install($latte->getCompiler());
$latte->addProvider("uiControl", $this->linkGenerator);
$html = $latte->renderToString(__DIR__ .'/'. $template, [
'variables' => $variables
]);
$message->setHtmlBody($html);
$this->mailer->send($message, $priority = 1, $useQueue = TRUE);
}
}
- CZechBoY
- Člen | 3608
Pokud nemáš nastavený presenter tak všechny odkazy jsou absolutní,
takže nepiš :
na začátku odkazu.
btw. lepší je používat ITemplateFactory
a IMailer.