0

我正在编写一个插件,它应该在发送给最终用户的电子邮件中添加一个(动态)附件。但我被困在一件事上。

首先,我使用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');
    }

不知何故,我必须挂钩发送电子邮件而不是事件(?)的实际操作。但我不知道是哪一个

4

2 回答 2

0

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

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

它还取决于您要执行的操作,附加当前不属于 Mautic 的文件(例如发票或类似的东西),或者您是否尝试附加要在 Mautic 中跟踪的文件一项资产。

在附件方面,开发者文档中的这些资源可能有用:

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

您可能还想查看https://forums.mautic.org,那里可能有更多来自社区的开发人员能够提供更多见解!

于 2019-10-16T12:01:34.367 回答
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]);
                }
于 2019-10-17T14:47:14.087 回答