Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2:Swiftmailer未发送,无错误_Php_Symfony_Email_Smtp_Swiftmailer - Fatal编程技术网

Php Symfony 2:Swiftmailer未发送,无错误

Php Symfony 2:Swiftmailer未发送,无错误,php,symfony,email,smtp,swiftmailer,Php,Symfony,Email,Smtp,Swiftmailer,我最近将这个网站(由Symfony 2制作)迁移到了一个新的服务器上,我们决定使用谷歌应用发送电子邮件 在一些连接问题之后,我成功地设置了它。我知道正在工作,因为我可以使用以下命令行发送电子邮件: app/console swiftmailer:email:send --subject="Test" --body="test" --from="xxxx" --to="yyyyy" 它的工作,电子邮件发送,我收到它立即 问题是:网站内部,没有工作。代码如下: $mailer = $this-&g

我最近将这个网站(由Symfony 2制作)迁移到了一个新的服务器上,我们决定使用谷歌应用发送电子邮件

在一些连接问题之后,我成功地设置了它。我知道正在工作,因为我可以使用以下命令行发送电子邮件:

app/console swiftmailer:email:send --subject="Test" --body="test" --from="xxxx" --to="yyyyy"
它的工作,电子邮件发送,我收到它立即

问题是:网站内部,没有工作。代码如下:

$mailer = $this->get('mailer');
$message = $mailer->createMessage()
    ->setSubject('Caderno Mágico: Redefinir Senha')
    ->setFrom(array($this->container->getParameter('server_mail_address') => 'Caderno Mágico'))
    ->setTo($usuario[0]->getEmail())
    ->setBody($this->renderView('Emails/recuperar_conta.html.twig', array('username' => $usuario_selecionado->getUsername(), 'dados' => $hash)), 'text/html');
$mailer->send($message);
似乎是对的,我以前工作过。那里的用户电子邮件与我在命令行测试中使用的电子邮件相同。这里使用的配置应该与我通过命令行发送时使用的配置相同:

swiftmailer:
    transport: smtp
    host:      smtp.gmail.com
    username:  yyyy
    password:  ******
    auth_mode: login
    port:      465
    encryption: ssl
    spool: { type: memory }

swiftmailer.plugins.loggerplugin:
    class: 'Swift_Plugins_LoggerPlugin'
    arguments: ['@swiftmailer.plugins.loggerplugin.logger']
    tags: [{ name: 'swiftmailer.default.plugin' }]

swiftmailer.plugins.loggerplugin.logger:
    class: 'Swift_Plugins_Loggers_EchoLogger'
    arguments: [false] 
任何日志上都没有错误,“send”方法返回true。它就是不起作用。(我试过带线轴和不带线轴:没有区别)。没有发送电子邮件

我设置了这个“EchoLogger”插件,它可以在命令行上运行。我可以在输出中看到所有消息和错误,这有助于我设置配置并修复连接问题。但当服务器执行时,这似乎没有任何作用,我在屏幕上或任何日志中都看不到任何消息

我甚至试着把代码中的所有值都写得和我的命令行测试一样,以排除出错的可能性,但仍然没有:

$mailer = $this->get('mailer');
$message = $mailer->createMessage()
    ->setSubject('Test')
    ->setFrom('yyyyy')
    ->setTo('xxxxx')
    ->setBody('test');
$mailer->send($message);

那我该怎么办?有什么不对劲吗?我甚至不知道如何调试这个。为什么它在命令行上运行时会工作,而在网站内部运行时会无声地失败?在服务器上运行代码时,是否有任何方法或位置可以查看这些EchoLogger消息?

这可能是因为您没有告诉控制器发送邮件,请使用以下方法:

$this->get('mailer')->send($message);

好的,我找到了自己的解决办法。实际上,更像是一种变通方法

似乎我遇到了一个假脱机问题:由于某种原因,消息被发送到假脱机,然后再也没有发送

因此,我找到了两种让ir工作的方法:

  • 发送后立即强制滑阀齐平:

    $mailer->send($message);
    
    $spool = $mailer->getTransport()->getSpool();
    $transport = $this->get('swiftmailer.transport.real');
    
    $spool->flushQueue($transport);
    
  • 在配置中显式禁用假脱机:

    spool: 
        enabled: false    
    

  • 在这两种方式中,电子邮件都是正常发送的

    。我遗漏了那部分代码(问题编辑)