如何保存Swiftmailer发送的所有电子邮件

时间:2016-09-24 09:47:37

标签: php symfony email swiftmailer

我正在构建一个Symfony 2 Web应用程序。我的电子邮件是通过Swiftmailer发送的。 因为在我的网络应用程序的最后一个版本中,我记录了数据库中邮件程序类/功能发送的所有电子邮件以跟踪(查看系统是否正常工作并且有一定证据证明我的电子邮件至少已发送) ,我想在这个版本中做同样的事情。那时,我正在使用PHPMailer,我将其包含在函数中以包含PDO调用。 现在使用Symfony和Swiftmailer,我想知道如何使用doctrine ORM轻松记录我数据库中的所有电子邮件。 我想最简单的事情就是每次发送电子邮件时手动记录它,但我希望它能自动完成,因为我会发送大量的电子邮件。我之后也希望我的班级能像Swiftmailer一样灵活,所以将所有内容包装在一个“简单的功能”中是不可替代的。

我的第一个想法是扩展Swiftmailer类并添加一个内部调用herited send()方法的自定义send方法。问题是,我不知道在哪个地方放置这个类,而且,我需要通过自定义服务连接或调用它,因为内置服务使用Swiftmailer本身,不是吗?

除此之外,还存在电子邮件可能被假脱机的问题,在这种情况下,如果电子邮件确实已发送,send()不会给您反馈。或者我对这种方式有误解吗?

其他人是否有类似的问题/请求?如果是这样,你是如何解决的?

谢谢。

2 个答案:

答案 0 :(得分:2)

好的,我现在找到了一个解决我问题的捆绑软件Swiftmailer-logger-bundle。 https://github.com/tweedegolf/swiftmailer-logger-bundle

对于那些有类似问题的人:看看那个包。如果它不符合您的需求,它至少会解释如何使用swiftmailer事件。

答案 1 :(得分:1)

你可以在这里采取几种方法。第一种方法就像你说的那样,将电子邮件持久保存到数据库并从数据库发送电子邮件,看看它是否以这种方式发送。 Automailer捆绑包可以帮您完成。

我不推荐这种方法,因为您需要维护可以快速轻松扩展的数据表。您可能还需要维护MTA。

您可能更感兴趣的是最终用户是否收到了该电子邮件。如果这是您要查找的内容,我建议您使用MandrillSendgrid等交易邮件服务。我建议这样做的原因是。

  1. 您不需要操作MTA
  2. 您不必担心在本地存储电子邮件。
  3. 他们有一个API,使发送牵引电子邮件变得非常简单
  4. 他们拥有API,可以轻松查明您发送的邮件是否已收到。