Php Symfony 2:Swiftmailer未发送,无错误
我最近将这个网站(由Symfony 2制作)迁移到了一个新的服务器上,我们决定使用谷歌应用发送电子邮件 在一些连接问题之后,我成功地设置了它。我知道正在工作,因为我可以使用以下命令行发送电子邮件: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
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
在这两种方式中,电子邮件都是正常发送的。我遗漏了那部分代码(问题编辑)