EDIT: como no probé el código, también debe especificar la capa de transporte si no utiliza el contenedor de servicio para obtener la instancia del programa de correo. Mira: http://swiftmailer.org/docs/sending.html
Lo estás haciendo mal. Básicamente, desea un servicio , no una clase que se extiende Controller
. No funciona porque el contenedor de servicio no está disponible en la función SendMail()
.
Tiene que inyectar el contenedor de servicio en su propio asistente personalizado para enviar correos electrónicos. Unos pocos ejemplos:
namespace Blogger\Util;
class MailHelper
{
protected $mailer;
public function __construct(\Swift_Mailer $mailer)
{
$this->mailer = $mailer;
}
public function sendEmail($from, $to, $body, $subject = '')
{
$message = \Swift_Message::newInstance()
->setSubject($subject)
->setFrom($from)
->setTo($to)
->setBody($body);
$this->mailer->send($message);
}
}
para usarlo en una acción controlador:
services:
mail_helper:
class: namespace Blogger\Util\MailHelper
arguments: ['@mailer']
public function sendAction(/* params here */)
{
$this->get('mail_helper')->sendEmail($from, $to, $body);
}
o en otro lugar sin acceder al contenedor de servicios:
class WhateverClass
{
public function whateverFunction()
{
$helper = new MailerHelper(new \Swift_Mailer);
$helper->sendEmail($from, $to, $body);
}
}
O en un servicio de encargo accediendo al contenedor:
namespace Acme\HelloBundle\Service;
class MyService
{
protected $container;
public function setContainer($container) { $this->container = $container; }
public function aFunction()
{
$helper = $this->container->get('mail_helper');
// Send email
}
}
services:
my_service:
class: namespace Acme\HelloBundle\Service\MyService
calls:
- [setContainer, ['@service_container']]
No lo entiendo. ¿Ese fragmento de código es su solución actual pero le gustaría mover el correo a otro lugar? Si eso es correcto, probablemente debas leer acerca de cómo inyectar servicios en tus clases personalizadas: http://stackoverflow.com/questions/6124444/how-can-i-access-a-service-outside-of-a-controller-with- symfony2 – geca
He utilizado FOSUserBundle y FOSFacebookbundle lo que quiero cuando el usuario inicia sesión con éxito con la cuenta de Facebook Quiero enviar un correo electrónico al usuario con su contraseña para que pueda iniciar sesión con esa contraseña de correo electrónico. Tengo que escribir la función en la clase de proveedor para enviar correos electrónicos .... –