Mailer
最初に、「メールの送信に失敗した」とはどういう意味かを特定する必要があります。クラス内でこの条件を確認できる場合は、対応するイベントまたは類似のイベントMailer
をトリガーする必要があります。mail.error
次に、リスナーを のEventManager
内部にアタッチして、このイベントMailer
をリッスンし、エラーをログに記録する必要があります。mail.error
内のトリガーエラーMailer
Mailer
クラスが次のようになっているとしましょう。
<?php
namespace Project\Mail;
class Mailer
{
const EVENT_MAIL_ERROR = 'mail.error';
protected $events;
public function setEventManager(EventManagerInterface $events)
{
$this->events = $events;
return $this;
}
public function getEventManager()
{
if ($this->events === null)
{
$this->setEventManager(new EventManager);
}
return $this->events;
}
public function send(MessageInterface $msg)
{
// try sending the message. uh-oh we failed!
if ($someErrorCondition)
{
$this->getEventManager()->trigger(self::EVENT_MAIL_ERROR, $this, array(
'custom-param' => 'failure reason',
));
}
}
}
イベントのリッスン
ブートストラップ中に、リスナーをEventManager
withinにアタッチしますMailer
。
<?php
namespace FooBar;
use Zend\EventManager\Event;
use Zend\Mvc\MvcEvent;
class Module
{
public function onBootstrap(MvcEvent $event)
{
$application = $event->getApplication();
$services = $application->getServiceManager();
$mailer = $services->get('Mailer');
$mailer->getEventManager()->attach(Mailer::EVENT_MAIL_ERROR, function(Event $event)
{
$param = $event->getParam('custom-param');
// log the error
});
}
}
実装の詳細については、 EventManagerのドキュメントを参照してください。
これで問題が解決することを願っています!