<commit_before><?php
/**
 * @package   Wamailer
 * @author    Bobe <<EMAIL>>
 * @link      http://phpcodeur.net/wascripts/wamailer/
 * @copyright 2002-2015 <NAME>
 * @license   http://www.gnu.org/copyleft/lesser.html  GNU Lesser General Public License
 */

/**
 * Vérifie si une adresse email N’EST PAS valide (domaine et compte).
 * Ceci est différent d’une vérification de validité.
 * Le serveur SMTP peut très bien répondre par un 250 ok pour une adresse
 * email non existante, les erreurs d’adressage étant traitées ultérieurement
 * au niveau du serveur POP.
 *
 * Appels possibles à cette fonction :
 *
 * $result = validateMailBox('<EMAIL>');
 * $result = validateMailBox('<EMAIL>', $results);
 * $result = validateMailBox(array('<EMAIL>',
 *     '<EMAIL>', '<EMAIL>'), $results);
 *
 * @param mixed $emailList     Adresse email complète ou tableau d’adresses email
 * @param array $return_errors Passage par référence. Retour d’erreur sous
 *                             forme de tableau :
 *                             array('<EMAIL>' => 'msg error...',
 *                                   '<EMAIL>' => 'msg error...')
 *
 * @return boolean
 */
function validateMailbox($emailList, &$return_errors = null)
{
	if (!class_exists('Mailer_SMTP')) {
		require dirname(__FILE__) . '/smtp.class.php';
	}

	if (!is_array($emailList)) {
		$emailList = array($emailList);
	}
	else {
		$emailList = array_unique($emailList);
	}

	$domainList = $return_errors = array();

	foreach ($emailList as $email) {
		if (strpos($email, '@')) {
			list($mailbox, $domain) = explode('@', $email);

			if (!isset($domainList[$domain])) {
				$domainList[$domain] = array();
			}

			$domainList[$domain][] = $mailbox;
		}
		else {
			$return_errors[$email] = 'Invalid syntax';
		}
	}

	foreach ($domainList as $domain => $mailboxList) {
		$mxhosts = array();
		if (function_exists('getmxrr')) {
			$result = getmxrr($domain, $hosts, $weight);

			for ($i = 0, $m = count($hosts); $i < $m; $i++) {
				$mxhosts[] = array($weight[$i], $hosts[$i]);
			}
		}
		else {
			exec(sprintf('nslookup -type=mx %s', escapeshellcmd($domain)), $lines);

			$regexp = '/^' . preg_quote($domain) . '\s+(?:(?i)MX\s+)?'
				. '(preference\s*=\s*([0-9]+),\s*)?'
				. 'mail\s+exchanger\s*=\s*(?(1)|([0-9]+)\s+)([^ ]+?)\.?$/';

			foreach ($lines as $value) {
				if (preg_match($regexp, $value, $match)) {
					$mxhosts[] = array(
						($match[3] === '' ? $match[2] : $match[3]),
						$match[4]
					);
				}
			}

			$result = (count($mxhosts) > 0);
		}

		if (!$result) {
			$mxhosts[] = array(0, $domain);
		}

		array_multisort($mxhosts);

		$smtp = new Mailer_SMTP();

		foreach ($mxhosts as $record) {
			try {
				$smtp->connect($record[1]);
				if ($smtp->from('wamailer@' . $domain)) {
					foreach ($mailboxList as $mailbox) {
						$email = $mailbox . '@' . $domain;

						if (!$smtp->to($email, true)) {
							$return_errors[$email] = $smtp->responseData;
						}
					}
				}

				$smtp->quit();
				break;
			}

			//
			// Code temporaire à remplacer
			//<commit_msg>fix : le 2e argument de Mailer_SMTP::to() a changé<commit_after><?php
/**
 * @package   Wamailer
 * @author    Bobe <<EMAIL>>
 * @link      http://phpcodeur.net/wascripts/wamailer/
 * @copyright 2002-2015 <NAME>
 * @license   http://www.gnu.org/copyleft/lesser.html  GNU Lesser General Public License
 */

/**
 * Vérifie si une adresse email N’EST PAS valide (domaine et compte).
 * Ceci est différent d’une vérification de validité.
 * Le serveur SMTP peut très bien répondre par un 250 ok pour une adresse
 * email non existante, les erreurs d’adressage étant traitées ultérieurement
 * au niveau du serveur POP.
 *
 * Appels possibles à cette fonction :
 *
 * $result = validateMailBox('<EMAIL>');
 * $result = validateMailBox('<EMAIL>', $results);
 * $result = validateMailBox(array('<EMAIL>',
 *     '<EMAIL>', '<EMAIL>'), $results);
 *
 * @param mixed $emailList     Adresse email complète ou tableau d’adresses email
 * @param array $return_errors Passage par référence. Retour d’erreur sous
 *                             forme de tableau :
 *                             array('<EMAIL>' => 'msg error...',
 *                                   '<EMAIL>' => 'msg error...')
 *
 * @return boolean
 */
function validateMailbox($emailList, &$return_errors = null)
{
	if (!class_exists('Mailer_SMTP')) {
		require dirname(__FILE__) . '/smtp.class.php';
	}

	if (!is_array($emailList)) {
		$emailList = array($emailList);
	}
	else {
		$emailList = array_unique($emailList);
	}

	$domainList = $return_errors = array();

	foreach ($emailList as $email) {
		if (strpos($email, '@')) {
			list($mailbox, $domain) = explode('@', $email);

			if (!isset($domainList[$domain])) {
				$domainList[$domain] = array();
			}

			$domainList[$domain][] = $mailbox;
		}
		else {
			$return_errors[$email] = 'Invalid syntax';
		}
	}

	foreach ($domainList as $domain => $mailboxList) {
		$mxhosts = array();
		if (function_exists('getmxrr')) {
			$result = getmxrr($domain, $hosts, $weight);

			for ($i = 0, $m = count($hosts); $i < $m; $i++) {
				$mxhosts[] = array($weight[$i], $hosts[$i]);
			}
		}
		else {
			exec(sprintf('nslookup -type=mx %s', escapeshellcmd($domain)), $lines);

			$regexp = '/^' . preg_quote($domain) . '\s+(?:(?i)MX\s+)?'
				. '(preference\s*=\s*([0-9]+),\s*)?'
				. 'mail\s+exchanger\s*=\s*(?(1)|([0-9]+)\s+)([^ ]+?)\.?$/';

			foreach ($lines as $value) {
				if (preg_match($regexp, $value, $match)) {
					$mxhosts[] = array(
						($match[3] === '' ? $match[2] : $match[3]),
						$match[4]
					);
				}
			}

			$result = (count($mxhosts) > 0);
		}

		if (!$result) {
			$mxhosts[] = array(0, $domain);
		}

		array_multisort($mxhosts);

		$smtp = new Mailer_SMTP();

		foreach ($mxhosts as $record) {
			try {
				$smtp->connect($record[1]);
				if ($smtp->from('wamailer@' . $domain)) {
					foreach ($mailboxList as $mailbox) {
						$email = $mailbox . '@' . $domain;

						if (!$smtp->to($email)) {
							$return_errors[$email] = $smtp->responseData;
						}
					}
				}

				$smtp->quit();
				break;
			}

			//
			// Code temporaire à remplacer
			//
{'fraction_non_alphanumeric': 0.19723352318958504, 'fraction_numerical': 0.007973962571196095, 'mean_word_length': 2.93974358974359, 'pattern_counts': {'":': 0, '<': 27, '<?xml version=': 0, '>': 41, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '310378', 'n_tokens_mistral': 2561, 'n_tokens_neox': 2207, 'n_words': 478}