code: public static function addCommentsSubscription(CommentsModel $objComment)
  	{
  		$objNotify = CommentsNotifyModel::findBySourceParentAndEmail($objComment->source, $objComment->parent, $objComment->email);
  
  		// The subscription exists already
  		if ($objNotify !== null)
  		{
  			return;
  		}
  
  		$time = time();
  
  		// Prepare the record
  		$arrSet = array
  		(
  			'tstamp'       => $time,
  			'source'       => $objComment->source,
  			'parent'       => $objComment->parent,
  			'name'         => $objComment->name,
  			'email'        => $objComment->email,
  			'url'          => Environment::get('request'),
  			'addedOn'      => $time,
  			'active'       => '',
  			'tokenRemove'  => 'cor-'.bin2hex(random_bytes(10))
  		);
  
  		// Store the subscription
  		$objNotify = new CommentsNotifyModel();
  		$objNotify->setRow($arrSet)->save();
  
  		$strUrl = Idna::decode(Environment::get('base')) . Environment::get('request');
  		$strConnector = (strpos($strUrl, '?') !== false) ? '&' : '?';
  
  		/** @var OptIn $optIn */
  		$optIn = System::getContainer()->get('contao.opt-in');
  		$optInToken = $optIn->create('com', $objComment->email, array('tl_comments_notify'=>array($objNotify->id)));
  
  		// Send the token
  		$optInToken->send(sprintf($GLOBALS['TL_LANG']['MSC']['com_optInSubject'], Idna::decode(Environment::get('host'))), sprintf($GLOBALS['TL_LANG']['MSC']['com_optInMessage'], $objComment->name, $strUrl, $strUrl . $strConnector . 'token=' . $optInToken->getIdentifier(), $strUrl . $strConnector . 'token=' . $objNotify->tokenRemove));
  	}
docs: Add the subscription and send the activation mail (double opt-in)
  
  @param CommentsModel $objComment