Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php/*** PHPMailer - PHP email creation and transport class.* PHP Version 5.5.** @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project** @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>* @author Jim Jagielski (jimjag) <jimjag@gmail.com>* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>* @author Brent R. Matzelle (original founder)* @copyright 2012 - 2023 Marcus Bointon* @copyright 2010 - 2012 Jim Jagielski* @copyright 2004 - 2009 Andy Prevost* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License* @note This program is distributed in the hope that it will be useful - WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or* FITNESS FOR A PARTICULAR PURPOSE.*/namespace PHPMailer\PHPMailer;/*** Configure PHPMailer with DSN string.** @see https://en.wikipedia.org/wiki/Data_source_name** @author Oleg Voronkovich <oleg-voronkovich@yandex.ru>*/class DSNConfigurator{/*** Create new PHPMailer instance configured by DSN.** @param string $dsn DSN* @param bool $exceptions Should we throw external exceptions?** @return PHPMailer*/public static function mailer($dsn, $exceptions = null){static $configurator = null;if (null === $configurator) {$configurator = new DSNConfigurator();}return $configurator->configure(new PHPMailer($exceptions), $dsn);}/*** Configure PHPMailer instance with DSN string.** @param PHPMailer $mailer PHPMailer instance* @param string $dsn DSN** @return PHPMailer*/public function configure(PHPMailer $mailer, $dsn){$config = $this->parseDSN($dsn);$this->applyConfig($mailer, $config);return $mailer;}/*** Parse DSN string.** @param string $dsn DSN** @throws Exception If DSN is malformed** @return array Configuration*/private function parseDSN($dsn){$config = $this->parseUrl($dsn);if (false === $config || !isset($config['scheme']) || !isset($config['host'])) {throw new Exception('Malformed DSN');}if (isset($config['query'])) {parse_str($config['query'], $config['query']);}return $config;}/*** Apply configuration to mailer.** @param PHPMailer $mailer PHPMailer instance* @param array $config Configuration** @throws Exception If scheme is invalid*/private function applyConfig(PHPMailer $mailer, $config){switch ($config['scheme']) {case 'mail':$mailer->isMail();break;case 'sendmail':$mailer->isSendmail();break;case 'qmail':$mailer->isQmail();break;case 'smtp':case 'smtps':$mailer->isSMTP();$this->configureSMTP($mailer, $config);break;default:throw new Exception(sprintf('Invalid scheme: "%s". Allowed values: "mail", "sendmail", "qmail", "smtp", "smtps".',$config['scheme']));}if (isset($config['query'])) {$this->configureOptions($mailer, $config['query']);}}/*** Configure SMTP.** @param PHPMailer $mailer PHPMailer instance* @param array $config Configuration*/private function configureSMTP($mailer, $config){$isSMTPS = 'smtps' === $config['scheme'];if ($isSMTPS) {$mailer->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;}$mailer->Host = $config['host'];if (isset($config['port'])) {$mailer->Port = $config['port'];} elseif ($isSMTPS) {$mailer->Port = SMTP::DEFAULT_SECURE_PORT;}$mailer->SMTPAuth = isset($config['user']) || isset($config['pass']);if (isset($config['user'])) {$mailer->Username = $config['user'];}if (isset($config['pass'])) {$mailer->Password = $config['pass'];}}/*** Configure options.** @param PHPMailer $mailer PHPMailer instance* @param array $options Options** @throws Exception If option is unknown*/private function configureOptions(PHPMailer $mailer, $options){$allowedOptions = get_object_vars($mailer);unset($allowedOptions['Mailer']);unset($allowedOptions['SMTPAuth']);unset($allowedOptions['Username']);unset($allowedOptions['Password']);unset($allowedOptions['Hostname']);unset($allowedOptions['Port']);unset($allowedOptions['ErrorInfo']);$allowedOptions = \array_keys($allowedOptions);foreach ($options as $key => $value) {if (!in_array($key, $allowedOptions)) {throw new Exception(sprintf('Unknown option: "%s". Allowed values: "%s"',$key,implode('", "', $allowedOptions)));}switch ($key) {case 'AllowEmpty':case 'SMTPAutoTLS':case 'SMTPKeepAlive':case 'SingleTo':case 'UseSendmailOptions':case 'do_verp':case 'DKIM_copyHeaderFields':$mailer->$key = (bool) $value;break;case 'Priority':case 'SMTPDebug':case 'WordWrap':$mailer->$key = (int) $value;break;default:$mailer->$key = $value;break;}}}/*** Parse a URL.* Wrapper for the built-in parse_url function to work around a bug in PHP 5.5.** @param string $url URL** @return array|false*/protected function parseUrl($url){if (\PHP_VERSION_ID >= 50600 || false === strpos($url, '?')) {return parse_url($url);}$chunks = explode('?', $url);if (is_array($chunks)) {$result = parse_url($chunks[0]);if (is_array($result)) {$result['query'] = $chunks[1];}return $result;}return false;}}