我正在编写一个插件,该插件应在发送给最终用户的电子邮件中添加(动态)附件。但是我只能坚持一件事。
首先,我使用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');
}
有时候,我必须关注发送电子邮件而不是事件(?)的实际操作。但我不知道是哪一个
答案 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]);
}