代码之家  ›  专栏  ›  技术社区  ›  Andrei Herford

Symfony 5邮件发送程序不发送邮件。如何调试?

  •  0
  • Andrei Herford  · 技术社区  · 3 年前

    我正在进行我的第一个Symfony 5项目,并努力使用内置的 MailerInterface .我之前在Symfony 3与Swift Mailer合作过,从未遇到过类似问题。

    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\Mailer\MailerInterface;
    ...
    
    class SomeController extends AbstractController {
        public someAction(Request $request, MailerInterface $mailer) {
            ...
            $email = (new TemplatedEmail())
                ->from(new Address('address@example.com', 'My Symfony Mail'))
                //->to($user->getEmail())
                ->to('receiver@example.com')
                ->subject('Subject')
                ->htmlTemplate('email.html.twig');
        
            $mailer->send($email);
        }
    }
    
    
    // .env
    #MAILER_DSN=smtp://user:pass@smtp.example.com:25
    MAILER_DSN=sendmail://default
    

    如果 MAILER_DSN 有一些格式不正确的异常会引发并显示在Symfony调试器页面上,例如:。 The "invaliddsn" mailer DSN must contain a scheme 。。。因此,似乎配置的DSN smtp://user:pass@smtp.example.com:25 是正确的。在其他邮件应用程序中使用相同的凭据、主机和端口没有问题。

    但是,使用此代码时,不会显示任何错误/异常,我也不会收到任何邮件。当然,我已经仔细检查了日志(没有错误),收件人垃圾邮件文件夹(没有)。指定SMTP服务器或sendmail没有任何区别。

    这个 Symfony docs 仅解释如何处理异常,但在我的情况下不会引发异常。

    虽然Symfony中还有很多关于邮件问题的其他问题,但大多数问题都是关于旧的Swift-Mailer或其他特定问题。

    如何判断邮件是否已发送但未收到或根本未发送?

    0 回复  |  直到 3 年前
        1
  •  1
  •   yivi SilverLink    3 年前

    如果它没有引发异常,则可以假设传输没有引发错误条件。

    docs :

    处理发送失败

    Symfony Mailer认为,当您的传输(SMTP服务器或第三方提供商)接受邮件进行进一步传递时,发送成功。由于您的提供商存在一些问题,消息可能稍后丢失或无法传递,但这对于Symfony应用程序来说是无法实现的。

    如果将电子邮件移交给您的传输时出错,Symfony将抛出Symfony\Component\Mailer\Exception\TransportExceptionInterface。捕获该异常以从错误中恢复或显示一些消息

    您还可以 check the object that send() returns :

    这个 Symfony\Component\Mailer\SentMessage 对象返回的 发送() 的方法 Symfony\Component\Mailer\Transport\TransportInterface 提供对原始邮件的访问( getOriginalMessage() )以及一些调试信息( getDebug() )例如HTTP传输完成的HTTP调用,这对调试错误很有用。

    最后,如果你有 Symfony Web Profiler ,因为您是在Web请求期间进行发送,所以可以检查探查器的输出,以获取有关邮件发送尝试的信息。