未调用 Mautic 挂钩 (ON_SENT_EMAIL_TO_USER)
Mautic hook is not called (ON_SENT_EMAIL_TO_USER)
我正在编写一个插件,它应该向发送给最终用户的电子邮件添加一个(动态)附件。但我坚持一件事。
首先,我使用 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');
}
不知何故,我必须挂钩发送电子邮件而不是事件的实际操作(?)。但是我不知道是哪一个
我无法直接回答,但也许可以为您指出一些有用的资源!
首先,您是要将电子邮件发送给 Mautic 用户(例如管理员或潜在客户所有者),还是发送给潜在客户?只是想仔细检查我们正在寻找正确的东西,因为他们经常感到困惑!
这也取决于您要执行的操作,附加一个当前不属于 Mautic 的文件(例如发票或类似的东西),或者您是否尝试附加一个您想要的文件在 Mautic 中作为资产进行跟踪。
就附件而言,开发人员文档中的这些资源可能会有用:
它引用了 attachFile(),但也有 attachAsset(),它允许您附加已上传的 Mautic 资产 (\Mautic\AssetBundle\Entity\Asset)。
您可能还想看看 https://forums.mautic.org,那里可能有更多来自社区的开发人员能够提供更深入的见解!
您好,首先感谢您的回复。
挂钩被调用了多次,所以我需要对其进行调整。
所以我们跟踪它被调用的位置并过滤它。
另外每次都要清理附件
无论如何,即使它不是那么干净,它也能达到目的
$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]);
}
我正在编写一个插件,它应该向发送给最终用户的电子邮件添加一个(动态)附件。但我坚持一件事。
首先,我使用 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');
}
不知何故,我必须挂钩发送电子邮件而不是事件的实际操作(?)。但是我不知道是哪一个
我无法直接回答,但也许可以为您指出一些有用的资源!
首先,您是要将电子邮件发送给 Mautic 用户(例如管理员或潜在客户所有者),还是发送给潜在客户?只是想仔细检查我们正在寻找正确的东西,因为他们经常感到困惑!
这也取决于您要执行的操作,附加一个当前不属于 Mautic 的文件(例如发票或类似的东西),或者您是否尝试附加一个您想要的文件在 Mautic 中作为资产进行跟踪。
就附件而言,开发人员文档中的这些资源可能会有用:
它引用了 attachFile(),但也有 attachAsset(),它允许您附加已上传的 Mautic 资产 (\Mautic\AssetBundle\Entity\Asset)。
您可能还想看看 https://forums.mautic.org,那里可能有更多来自社区的开发人员能够提供更深入的见解!
您好,首先感谢您的回复。
挂钩被调用了多次,所以我需要对其进行调整。 所以我们跟踪它被调用的位置并过滤它。 另外每次都要清理附件
无论如何,即使它不是那么干净,它也能达到目的
$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]);
}