当前位置: 首页 > 知识库问答 >
问题:

Symfony2从服务发送电子邮件

陆宾白
2023-03-14

我创建了下一个类:

//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);
    }
}

我在我的服务中声明它是一项服务。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分析器不显示任何错误。如果取消,消息开发人员工具栏不会出现。

我做错了什么?

非常感谢。

共有3个答案

萧光华
2023-03-14

谢谢你的回答,抱歉耽搁了。

@lyberteam当我把你的代码,我得到这个错误消息:注意:未定义的变量:邮件500内部服务器错误-ContextErrorExc0019

此处:$email=$mailer-

有什么建议吗?

非常感谢。

赵晨
2023-03-14

尝试用以下内容替换代码:

//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" ]

你的麻烦会解决的

戈博易
2023-03-14

@RL83您可能是通过在swiftmailer中不使用任何类型的假脱机来同步发送消息,并且您的smtp提供程序工作缓慢。

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

 类似资料:
  • 我可以成功地使用下面的代码从控制器发送电子邮件: 我必须如何修改代码以从服务类使用它?

  • 我目前正在为某人做一个网站,我想在联系我们页面上添加一个表单,使用他们没有Php的网络托管服务器向他们的电子邮件地址发送消息。有人能帮我吗?我无法理解这个过程,以及如何使它安全并真正发挥作用。我必须在服务器上部署一些东西吗?或者我可以使用他们在那里的smpt服务器吗?如果是这样,我如何确保smtp服务器身份验证在客户端的devols上不可见。谢谢你!

  • 问题内容: 我在寻找有关如何 从localhost WAMP发送电子邮件的 适当信息。以及如何获得从特定的授权电子邮件地址发送电子邮件的授权以发送任何其他电子邮件地址。 如何配置这整个步骤向我解释了细节,我已经在这里访问了一些Stack Overflow的答案以及博客文章,但是所有内容都很混乱且过时,因此可能无法正常工作。所以我需要Stack Overflow用户帮助。谢谢。 问题答案: 从配置工

  • 我试图发送电子邮件使用gmail smtp使用javax.mail.下面是我的代码 代码工作正常当我在本地服务器上运行它时,但当我尝试在Elastic beanstek上运行它时(我的服务器在AWS EBS上运行),身份验证失败异常即将到来注意:我已打开从Google A/c设置访问不太安全的应用程序,但我仍然收到此错误 javax.mail.身份验证失败异常:534-5.7.14请通过您的网络浏

  • 问题内容: 我正在尝试从PHP发送简单的HTML电子邮件。下面的代码仅导致GMail中的空白电子邮件。它还有一个名为“ noname”的空附件,这根本不是我想要的;尽管那可能只是它无法正常工作的症状。 我使用的代码是: 问题答案: 原来关键是编码类型。代替: 我需要使用: 它可能取决于您如何在自己的文本编辑器中保存PHP文件的细节。我没有研究它,但是PHP中的 iconv 函数可能也给我带来了一些