Create new class named MailSender.
namespace MyBundle;
use Swift_Mailer;
use Swift_Message;
use Twig_Environment;
class MailSender
{
/** @var Swift_Message */
private $mailer;
/** @var Twig_Environment */
private $twig;
/**
* @param Swift_Mailer $mailer
* @param Twig_Environment $twig
*/
public function __construct(Swift_Mailer $mailer, Twig_Environment $twig)
{
$this->mailer = $mailer;
$this->twig = $twig;
}
/**
* Prepare message to sent.
*
* @param string $to
* @param string $subject
* @param string $twig
* @param array $parameters
*
* @return Swift_Message
*/
private function prepare($to, $subject, $twig, array $parameters)
{
return Swift_Message::newInstance()
->setSubject($subject)
->setFrom('no-reply@galitein.com')
->setTo($to)
->setBody(
$this->twig->render($twig, $parameters),
'text/html'
);
}
/**
* @param string $to
* @param string $subject
* @param string $twig
* @param array $parameters
*
* @return bool
*/
public function send($to, $subject, $twig, array $parameters)
{
$this->mailer->send($this->prepare($to, $subject, $twig, $parameters));
return true;
}
}
* Set parameters for swift mailer in config.yml
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
mailer details set in parameters.yml
* Register MailSender class as service in Services.yml
services:
my_bundle.mail_sender:
class: MyBundle\MailSender
arguments:
- '@mailer'
- '@twig'
* Send mail from controller
$this->get('my_bundle.mail_sender')
->send($email, 'Mail subject', 'Templates/contact.html.twig', [
'contact_details' => $data,
]);