未调用Mautic钩子(ON_SENT_EMAIL_TO_USER)

时间:2019-10-15 14:09:39

标签: php mautic

我正在编写一个插件,该插件应在发送给最终用户的电子邮件中添加(动态)附件。但是我只能坚持一件事。

首先,我使用EMAIL_ON_SEND钩子将附件添加到电子邮件中。但似乎每次调用时都会在每封电子邮件中添加附件。

每封电子邮件都会被调用两次。因此,在第一封邮件中,它将添加2个附件,第二封邮件中将添加4个附件,依此类推。

第二种方法是使用ON_SENT_EMAIL_TO_USER钩子。但这似乎在发送电子邮件(分段)之前没有被调用。

class EmailSubscriber extends CommonSubscriber
{
    protected $helper;

    public function __construct(IntegrationHelper $helper)
    {
        $this->helper = $helper;
        $this->parser = new ApiParser();
    }

    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
          //  EmailEvents::EMAIL_ON_SEND => ['onEmailSend', 100],
            EmailEvents::ON_SENT_EMAIL_TO_USER => ['onEmailSend', 100],
        ];
    }

    /**
     * Search and replace tokens with content
     *
     * @param EmailSendEvent $event
     */

    public function onEmailSend(EmailSendEvent $event)
    {
        error_log('123');
    }

有时候,我必须关注发送电子邮件而不是事件(?)的实际操作。但我不知道是哪一个

2 个答案:

答案 0 :(得分:0)

我无法直接回答,但也许可以为您提供一些有用的资源!

首先,您是要发送电子邮件给Mautic用户(例如潜在客户的管理员或所有者)还是潜在客户?只是想仔细检查一下,我们正在寻找正确的东西,因为它们经常被混淆!

这还取决于您要执行的操作,附加当前不属于Mautic的文件(例如,发票或类似内容),或者是否要附加要跟踪的文件在Mautic作为资产。

在附件方面,开发人员文档中的以下资源可能会有用:

它引用了attachFile(),但是还有attachAsset(),它允许您附加已经上传的Mautic资产(\ Mautic \ AssetBundle \ Entity \ Asset)。

您可能还想看看https://forums.mautic.org,在社区中可能会有更多的开发人员能够提供进一步的见解!

答案 1 :(得分:0)

嘿,首先感谢您的答复。

该挂钩被多次调用,因此我需要对其进行调整。 因此,我们跟踪它的调用位置并对其进行过滤。 除此之外,我们每次都需要清洁附件。

无论如何,即使不是很干净,它也会成功

$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5);

            if (strpos($trace[4]['file'], 'SendEmailToContact.php') !== false) {
                $helper = $event->getHelper();

                $messageChildren = $helper->message->getChildren();

                if (count($messageChildren) > 0) {
                    $helper->message->detach($messageChildren[0]);
                }