首页 文章

Symfony2从服务发送电子邮件

提问于
浏览
1

我创建了下一堂课:

//src/AppBundle/Services/RegisterMail.php

namespace AppBundle\Services;

class RegisterMail{
    protected $mailer;

    public function __construct($mailer)
    {
        $this->mailer = $mailer;
    }

    public function sendPassword(){
         $message = \Swift_Message::newInstance()
            ->setSubject('Otro correo')
            ->setFrom('fromEmail@fromEmail.com')
            ->setTo('toEmail@toEmail.com')
            ->setBody('hola desde el servicio')
        ;
        $envia = $this->mailer->send($message);
    }
}

我在service.yml中声明它是一项服务

services:
    registermail:
        class: AppBundle\Services\RegisterMail
        arguments: [@mailer]

在我的控制器中调用服务:

//src/AppBundle/Controller/DefaultController

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class DefaultController extends Controller
{
    /**
    * @Route("/")
    */
    public function indexAction()
    {
        //Envío el email con el password
        $mailer = $this->get('registermail');
        $mailer->sendPassword();
        return $this->render(':Default:index.html.twig');
    }

}

电子邮件已发送,但页面仍然加载30秒,我从开发人员工具栏发出警告:“加载Web调试工具栏时出错(404:未找到) . 是否要打开探查器?如果接受消息symfony profiler不显示任何错误 . 如果取消消息,则不显示开发人员工具栏 .

我究竟做错了什么?

谢谢!

3 回答

  • 0

    @ RL83你可能是在swiftmailer中没有使用任何类型的假脱机同步发送消息而你的smtp提供程序运行缓慢 .

    您应该尝试使用异步假脱机队列,我建议使用https://github.com/radutopala/TSSAutomailerBundle,它为您提供数据库队列 . 所以基本上,你不仅会有一个假脱机队列,还会有一个存储在数据库层中的已发送电子邮件的历史记录 .

  • 0

    尝试用以下代码替换您的代码:

    //src/AppBundle/Services/RegisterMail.php
    
    namespace AppBundle\Services;
    
    class RegisterMail{
      protected $mailer;
    
      protected $transport; // <- Add transport to your service
    
      public function __construct($mailer, $transport)
      {
          $this->mailer    = $mailer;
          $this->transport = $transport;
      }
    
      public function sendPassword() // <- change the method like this
      {
           $email = $mailer->createMessage()
            ->setSubject('Otro correo')
            ->setFrom('fromEmail@fromEmail.com')
            ->setTo('toEmail@toEmail.com')
            ->setCharset("UTF-8")
            ->setContentType('text/html')
            ->setBody('hola desde el servicio')
        ;
    
        $send = $mailer->send($email);
        $spool->flushQueue($transport);   
      }
    }
    

    注册您的服务并添加新的依赖项 - 传输服务 "@swiftmailer.transport.real"

    services:
    registermail:
        class: AppBundle\Services\RegisterMail
        arguments: ["@mailer", "@swiftmailer.transport.real" ]
    

    而你的麻烦将得到解决

  • 0

    感谢您的回答,抱歉延误 .

    @lyberteam,当我把你的代码,我收到此错误消息:注意:未定义的变量:邮件程序500内部服务器错误 - ContextErrorException

    这里:$ email = $ mailer-> createMessage()

    有什么建议吗?

    谢谢

相关问题