getSubscriber($email); if (($abonnent['status'] ?? '') === 'unsubscribed') { return 'unchanged'; } $api->unsubscribe($email); return 'unsubscribed'; } catch (\Throwable $t) { // MailPoet wirft bei unbekannter Adresse eine APIException. return ''; } } /** null: interner Weg nicht verfuegbar, Rueckfall auf Abmelden. */ private static function bounced(string $email): ?string { $repoKlasse = 'MailPoet\Subscribers\SubscribersRepository'; // Dienstname im Container ohne fuehrenden Backslash if (!class_exists('\MailPoet\DI\ContainerWrapper') || !class_exists($repoKlasse) || !class_exists('\MailPoet\Entities\SubscriberEntity')) { return null; } try { $repo = \MailPoet\DI\ContainerWrapper::getInstance()->get($repoKlasse); $abonnent = $repo->findOneBy(['email' => $email]); if (!$abonnent) { return ''; } // Wie MailPoets Bounce-Worker: nur aktive oder unbestaetigte Abonnenten auf "bounced". if (!in_array($abonnent->getStatus(), [\MailPoet\Entities\SubscriberEntity::STATUS_SUBSCRIBED, \MailPoet\Entities\SubscriberEntity::STATUS_UNCONFIRMED], true)) { return 'unchanged'; } $abonnent->setStatus(\MailPoet\Entities\SubscriberEntity::STATUS_BOUNCED); $repo->flush(); return 'bounced'; } catch (\Throwable $t) { return null; } } }