public function unSubscribe($email, $hash, LanguageInterface $language = null, $reason = null)
    {
        if (!$this->validateEmail($email)) {
            throw new NewsletterCannotBeRemovedException();
        }

        $conditions = [
            'email' => $email,
            'hash' => $hash,
        ];

        if ($language instanceof LanguageInterface) {
            $conditions['language'] = $language;
        }

        $newsletterSubscription = $this
            ->newsletterSubscriptionRepository
            ->findOneBy($conditions);

        if (!($newsletterSubscription instanceof NewsletterSubscriptionInterface)) {
            throw new NewsletterCannotBeRemovedException();
        }

        $newsletterSubscription
            ->setEnabled(false)
            ->setReason($reason);

        $this
            ->newsletterEventDispatcher
            ->dispatchUnsubscribeEvent($newsletterSubscription);

        return $this;
    }