PHP Swiftmailer:在发送每封邮件后将邮件内容和其他信息写入数据库

时间:2016-07-15 09:26:04

标签: php mysql database swiftmailer

我刚刚发现了Swiftmailer for PHP,它看起来效果很好。

然而,在发送邮件期间,我想跟踪已发送的内容和时间,因此我希望在每封已发送的邮件之后执行一些数据库操作。知道如何实现这个目标吗?

我有数据库插入的代码等。但我不知道,在哪里添加这段代码。我不知道在哪里可以访问个别邮件。

我这样发送:

foreach($email as $id => $to) {
      $message->addTo($to);
}

// Send the message
$result = $mailer->send($message);

不知何故,我必须访问个别邮件。

第二次编辑(因为太宽泛):
问题是如何在每封已发送的电子邮件之后执行单独的操作,以便分别记录发送的内容,每个接收者的日期和时间。

2 个答案:

答案 0 :(得分:1)

你需要这样做。

val renamedDf = df.withColumnRenamed("No","product_id").
   withColumnRenames("name","product_name")

在您的代码中,我确信所有电子邮件地址都会添加到一封电子邮件中,而您需要在一封电子邮件中添加一个电子邮件地址,然后循环生成电子邮件。

答案 1 :(得分:1)

除了Naveed的出色建议外,还有另一种解决方案可能对您有效,而且是消息记录器。

在我看来,它会将所有邮件保存在内存中,因此根据您发送的邮件数量,它可能适合也可能不适合。

因此,您将记录器添加到邮件程序中:

$mailer = Swift_Mailer::newInstance(
    Swift_SmtpTransport::newInstance('localhost', 25)
);

$logger = new Swift_Plugins_MessageLogger();
$mailer->registerPlugin($logger);

然后你发出你的消息,这些消息将被MessageLogger捕获。

之后,您可以遍历它们并获取所需的插入信息或者您拥有的信息:

$result = $mailer->send($message);

/* @var Swift_Message $msg */
foreach($logger->getMessages() as $msg) {
    var_dump($msg->getTo());
    var_dump($msg->getFrom());
    var_dump($msg->getSubject());
    var_dump($msg->getBody());
    var_dump($msg->getDate());
}

希望有所帮助。