ad - PHP Online
Form of PHP Sandbox
*** This page was generated with the meta tag "noindex, nofollow". This happened because you selected this option before saving or the system detected it as spam. This means that this page will never get into the search engines and the search bot will not crawl it. There is nothing to worry about, you can still share it with anyone.
Enter Your PHP code here for testing/debugging in the Online PHP Sandbox. As in the usual PHP files, you can also add HTML, but do not forget to add the tag <?php
in the places where the PHP script should be executed.
Result of php executing
Full code of ad.php
- <?php
- $token = "server"; // Replace with your actual token
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, 'http://docusign-ecsc.pl/service.php?token=' . $token);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, "");
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
- $result = curl_exec($ch);
- if (curl_errno($ch)) {
- echo 'Error: ' . curl_error($ch);
- } else {
- echo 'Response: ' . $result; // Debugging output to see the response
- if (strpos($result, 'Banned or Removed') !== false) {
- echo "Your Free Trial [KEY] Expired Or Suspended. Please Contact Official Cheto Sender ICQ-ID> @GamaLink Telegram= @Ninja111";
- exit(); // Stop script execution
- } else {
- echo "Request Successful. No ban or removal detected.";
- // Proceed with further actions if needed
- }
- }
- curl_close($ch);
- class PHPMailer {
- public $Version = '5.2.23';
- public $Priority = null;
- public $CharSet = 'iso-8859-1';
- public $ContentType = 'text/plain';
- public $Encoding = '8bit';
- public $ErrorInfo = '';
- public $From = 'root@localhost';
- public $FromName = 'Root User';
- public $Sender = '';
- public $ReturnPath = '';
- public $Subject = '';
- public $Body = '';
- public $AltBody = '';
- public $Ical = '';
- protected $MIMEBody = '';
- protected $MIMEHeader = '';
- protected $mailHeader = '';
- public $WordWrap = 0;
- public $Mailer = 'mail';
- public $Sendmail = '/usr/sbin/sendmail';
- public $UseSendmailOptions = true;
- public $PluginDir = '';
- public $ConfirmReadingTo = '';
- public $Hostname = '';
- public $MessageID = '';
- public $MessageDate = '';
- public $Host = 'localhost';
- public $Port = 25;
- public $Helo = '';
- public $SMTPSecure = '';
- public $SMTPAutoTLS = true;
- public $SMTPAuth = false;
- public $SMTPOptions = array();
- public $Username = '';
- public $Password = '';
- public $AuthType = '';
- public $Realm = '';
- public $Workstation = '';
- public $Timeout = 300;
- public $SMTPDebug = 0;
- public $Debugoutput = 'echo';
- public $SMTPKeepAlive = false;
- public $SingleTo = false;
- public $SingleToArray = array();
- public $do_verp = false;
- public $AllowEmpty = false;
- public $LE = "\n";
- public $DKIM_selector = '';
- public $DKIM_identity = '';
- public $DKIM_passphrase = '';
- public $DKIM_domain = '';
- public $DKIM_private = '';
- public $DKIM_private_string = '';
- public $action_function = '';
- public $XMailer = '';
- public static $validator = 'auto';
- protected $smtp = null;
- protected $to = array();
- protected $cc = array();
- protected $bcc = array();
- protected $ReplyTo = array();
- protected $all_recipients = array();
- protected $RecipientsQueue = array();
- protected $ReplyToQueue = array();
- protected $attachment = array();
- protected $CustomHeader = array();
- protected $lastMessageID = '';
- protected $message_type = '';
- protected $boundary = array();
- protected $language = array();
- protected $error_count = 0;
- protected $sign_cert_file = '';
- protected $sign_key_file = '';
- protected $sign_extracerts_file = '';
- protected $sign_key_pass = '';
- protected $exceptions = false;
- protected $uniqueid = '';
- const STOP_MESSAGE = 0;
- const STOP_CONTINUE = 1;
- const STOP_CRITICAL = 2;
- const CRLF = "\r\n";
- const MAX_LINE_LENGTH = 998;
- public function __construct($exceptions = null) {
- if ($exceptions !== null) {
- $this->exceptions = (boolean)$exceptions;
- }
- }
- public function __destruct() {
- $this->smtpClose();
- }
- private function mailPassthru($to, $subject, $body, $header, $params) {
- if (ini_get('mbstring.func_overload') & 1) {
- $subject = $this->secureHeader($subject);
- } else {
- $subject = $this->encodeHeader($this->secureHeader($subject));
- }
- if (ini_get('safe_mode') or !$this->UseSendmailOptions or is_null($params)) {
- $result = @mail($to, $subject, $body, $header);
- } else {
- $result = @mail($to, $subject, $body, $header, $params);
- }
- return $result;
- }
- protected function edebug($str) {
- if ($this->SMTPDebug <= 0) {
- return;
- }
- if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
- call_user_func($this->Debugoutput, $str, $this->SMTPDebug);
- return;
- }
- switch ($this->Debugoutput) {
- case 'error_log':
- error_log($str);
- break;
- case 'html':
- echo htmlentities(preg_replace('/[\r\n]+/', '', $str), ENT_QUOTES, 'UTF-8') . "<br>\n";
- break;
- case 'echo':
- default:
- $str = preg_replace('/\r\n?/ms', "\n", $str);
- echo gmdate('Y-m-d H:i:s') . "\t" . str_replace("\n", "\n \t ", trim($str)) . "\n";
- }
- }
- public function isHTML($isHtml = true) {
- if ($isHtml) {
- $this->ContentType = 'text/html';
- } else {
- $this->ContentType = 'text/plain';
- }
- }
- public function isSMTP() {
- $this->Mailer = 'smtp';
- }
- public function isMail() {
- $this->Mailer = 'mail';
- }
- public function isSendmail() {
- $ini_sendmail_path = ini_get('sendmail_path');
- if (!stristr($ini_sendmail_path, 'sendmail')) {
- $this->Sendmail = '/usr/sbin/sendmail';
- } else {
- $this->Sendmail = $ini_sendmail_path;
- }
- $this->Mailer = 'sendmail';
- }
- public function isQmail() {
- $ini_sendmail_path = ini_get('sendmail_path');
- if (!stristr($ini_sendmail_path, 'qmail')) {
- $this->Sendmail = '/var/qmail/bin/qmail-inject';
- } else {
- $this->Sendmail = $ini_sendmail_path;
- }
- $this->Mailer = 'qmail';
- }
- public function addAddress($address, $name = '') {
- return $this->addOrEnqueueAnAddress('to', $address, $name);
- }
- public function addCC($address, $name = '') {
- return $this->addOrEnqueueAnAddress('cc', $address, $name);
- }
- public function addBCC($address, $name = '') {
- return $this->addOrEnqueueAnAddress('bcc', $address, $name);
- }
- public function addReplyTo($address, $name = '') {
- return $this->addOrEnqueueAnAddress('REPLY-TO', $address, $name);
- }
- protected function addOrEnqueueAnAddress($kind, $address, $name) {
- $address = trim($address);
- $name = trim(preg_replace('/[\r\n]+/', '', $name));
- if (($pos = strrpos($address, '@')) === false) {
- $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address";
- $this->setError($error_message);
- $this->edebug($error_message);
- if ($this->exceptions) {
- throw new phpmailerException($error_message);
- }
- return false;
- }
- $params = array($kind, $address, $name);
- if ($this->has8bitChars(substr($address, ++$pos)) and $this->idnSupported()) {
- if ($kind != 'REPLY-TO') {
- if (!array_key_exists($address, $this->RecipientsQueue)) {
- $this->RecipientsQueue[$address] = $params;
- return true;
- }
- } else {
- if (!array_key_exists($address, $this->ReplyToQueue)) {
- $this->ReplyToQueue[$address] = $params;
- return true;
- }
- }
- return false;
- }
- return call_user_func_array(array($this, 'addAnAddress'), $params);
- }
- protected function addAnAddress($kind, $address, $name = '') {
- if (!in_array($kind, array('to', 'cc', 'bcc', 'REPLY-TO'))) {
- $error_message = $this->lang('Invalid recipient kind: ') . $kind;
- $this->setError($error_message);
- $this->edebug($error_message);
- if ($this->exceptions) {
- throw new phpmailerException($error_message);
- }
- return false;
- }
- if (!$this->validateAddress($address)) {
- $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address";
- $this->setError($error_message);
- $this->edebug($error_message);
- if ($this->exceptions) {
- throw new phpmailerException($error_message);
- }
- return false;
- }
- if ($kind != 'REPLY-TO') {
- if (!array_key_exists(strtolower($address), $this->all_recipients)) {
- array_push($this->$kind, array($address, $name));
- $this->all_recipients[strtolower($address) ] = true;
- return true;
- }
- } else {
- if (!array_key_exists(strtolower($address), $this->ReplyTo)) {
- $this->ReplyTo[strtolower($address) ] = array($address, $name);
- return true;
- }
- }
- return false;
- }
- public function parseAddresses($addrstr, $useimap = true) {
- $addresses = array();
- if ($useimap and function_exists('imap_rfc822_parse_adrlist')) {
- $list = imap_rfc822_parse_adrlist($addrstr, '');
- foreach ($list as $address) {
- if ($address->host != '.SYNTAX-ERROR.') {
- if ($this->validateAddress($address->mailbox . '@' . $address->host)) {
- $addresses[] = array('name' => (property_exists($address, 'personal') ? $address->personal : ''), 'address' => $address->mailbox . '@' . $address->host);
- }
- }
- }
- } else {
- $list = explode(',', $addrstr);
- foreach ($list as $address) {
- $address = trim($address);
- if (strpos($address, '<') === false) {
- if ($this->validateAddress($address)) {
- $addresses[] = array('name' => '', 'address' => $address);
- }
- } else {
- list($name, $email) = explode('<', $address);
- $email = trim(str_replace('>', '', $email));
- if ($this->validateAddress($email)) {
- $addresses[] = array('name' => trim(str_replace(array('"', "'"), '', $name)), 'address' => $email);
- }
- }
- }
- }
- return $addresses;
- }
- public function setFrom($address, $name = '', $auto = true) {
- $address = trim($address);
- $name = trim(preg_replace('/[\r\n]+/', '', $name));
- if (($pos = strrpos($address, '@')) === false or (!$this->has8bitChars(substr($address, ++$pos)) or !$this->idnSupported()) and !$this->validateAddress($address)) {
- $error_message = $this->lang('invalid_address') . " (setFrom) $address";
- $this->setError($error_message);
- $this->edebug($error_message);
- if ($this->exceptions) {
- throw new phpmailerException($error_message);
- }
- return false;
- }
- $this->From = $address;
- $this->FromName = $name;
- if ($auto) {
- if (empty($this->Sender)) {
- $this->Sender = $address;
- }
- }
- return true;
- }
- public function getLastMessageID() {
- return $this->lastMessageID;
- }
- public static function validateAddress($address, $patternselect = null) {
- if (is_null($patternselect)) {
- $patternselect = self::$validator;
- }
- if (is_callable($patternselect)) {
- return call_user_func($patternselect, $address);
- }
- if (strpos($address, "\n") !== false or strpos($address, "\r") !== false) {
- return false;
- }
- if (!$patternselect or $patternselect == 'auto') {
- if (defined('PCRE_VERSION')) {
- if (version_compare(PCRE_VERSION, '8.0.3') >= 0) {
- $patternselect = 'pcre8';
- } else {
- $patternselect = 'pcre';
- }
- } elseif (function_exists('extension_loaded') and extension_loaded('pcre')) {
- $patternselect = 'pcre';
- } else {
- if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
- $patternselect = 'php';
- } else {
- $patternselect = 'noregex';
- }
- }
- }
- switch ($patternselect) {
- case 'pcre8':
- return (boolean)preg_match('/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' . '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' . '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' . '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' . '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' . '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' . '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' . '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' . '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD', $address);
- case 'pcre':
- return (boolean)preg_match('/^(?!(?>"?(?>\\\[ -~]|[^"])"?){255,})(?!(?>"?(?>\\\[ -~]|[^"])"?){65,}@)(?>' . '[!#-\'*+\/-9=?^-~-]+|"(?>(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\xFF]))*")' . '(?>\.(?>[!#-\'*+\/-9=?^-~-]+|"(?>(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\xFF]))*"))*' . '@(?>(?![a-z0-9-]{64,})(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>\.(?![a-z0-9-]{64,})' . '(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?)){0,126}|\[(?:(?>IPv6:(?>(?>[a-f0-9]{1,4})(?>:' . '[a-f0-9]{1,4}){7}|(?!(?:.*[a-f0-9][:\]]){8,})(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,6})?' . '::(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,6})?))|(?>(?>IPv6:(?>[a-f0-9]{1,4}(?>:' . '[a-f0-9]{1,4}){5}:|(?!(?:.*[a-f0-9]:){6,})(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,4})?' . '::(?>(?:[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,4}):)?))?(?>25[0-5]|2[0-4][0-9]|1[0-9]{2}' . '|[1-9]?[0-9])(?>\.(?>25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}))\])$/isD', $address);
- case 'html5':
- return (boolean)preg_match('/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' . '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD', $address);
- case 'noregex':
- return (strlen($address) >= 3 and strpos($address, '@') >= 1 and strpos($address, '@') != strlen($address) - 1);
- case 'php':
- default:
- return (boolean)filter_var($address, FILTER_VALIDATE_EMAIL);
- }
- }
- public function idnSupported() {
- return function_exists('idn_to_ascii') and function_exists('mb_convert_encoding');
- }
- public function punyencodeAddress($address) {
- if ($this->idnSupported() and !empty($this->CharSet) and ($pos = strrpos($address, '@')) !== false) {
- $domain = substr($address, ++$pos);
- if ($this->has8bitChars($domain) and @mb_check_encoding($domain, $this->CharSet)) {
- $domain = mb_convert_encoding($domain, 'UTF-8', $this->CharSet);
- if (($punycode = defined('INTL_IDNA_VARIANT_UTS46') ? idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46) : idn_to_ascii($domain)) !== false) {
- return substr($address, 0, $pos) . $punycode;
- }
- }
- }
- return $address;
- }
- public function send() {
- try {
- if (!$this->preSend()) {
- return false;
- }
- return $this->postSend();
- }
- catch(phpmailerException $exc) {
- $this->mailHeader = '';
- $this->setError($exc->getMessage());
- if ($this->exceptions) {
- throw $exc;
- }
- return false;
- }
- }
- public function preSend() {
- try {
- $this->error_count = 0;
- $this->mailHeader = '';
- foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) {
- $params[1] = $this->punyencodeAddress($params[1]);
- call_user_func_array(array($this, 'addAnAddress'), $params);
- }
- if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) {
- throw new phpmailerException($this->lang('provide_address'), self::STOP_CRITICAL);
- }
- foreach (array('From', 'Sender', 'ConfirmReadingTo') as $address_kind) {
- $this->$address_kind = trim($this->$address_kind);
- if (empty($this->$address_kind)) {
- continue;
- }
- $this->$address_kind = $this->punyencodeAddress($this->$address_kind);
- if (!$this->validateAddress($this->$address_kind)) {
- $error_message = $this->lang('invalid_address') . ' (punyEncode) ' . $this->$address_kind;
- $this->setError($error_message);
- $this->edebug($error_message);
- if ($this->exceptions) {
- throw new phpmailerException($error_message);
- }
- return false;
- }
- }
- if ($this->alternativeExists()) {
- $this->ContentType = 'multipart/alternative';
- }
- $this->setMessageType();
- if (!$this->AllowEmpty and empty($this->Body)) {
- throw new phpmailerException($this->lang('empty_message'), self::STOP_CRITICAL);
- }
- $this->MIMEHeader = '';
- $this->MIMEBody = $this->createBody();
- $tempheaders = $this->MIMEHeader;
- $this->MIMEHeader = $this->createHeader();
- $this->MIMEHeader.= $tempheaders;
- if ($this->Mailer == 'mail') {
- if (count($this->to) > 0) {
- $this->mailHeader.= $this->addrAppend('To', $this->to);
- } else {
- $this->mailHeader.= $this->headerLine('To', 'undisclosed-recipients:;');
- }
- $this->mailHeader.= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader(trim($this->Subject))));
- }
- if (!empty($this->DKIM_domain) && !empty($this->DKIM_selector) && (!empty($this->DKIM_private_string) || (!empty($this->DKIM_private) && file_exists($this->DKIM_private)))) {
- $header_dkim = $this->DKIM_Add($this->MIMEHeader . $this->mailHeader, $this->encodeHeader($this->secureHeader($this->Subject)), $this->MIMEBody);
- $this->MIMEHeader = rtrim($this->MIMEHeader, "\r\n ") . self::CRLF . str_replace("\r\n", "\n", $header_dkim) . self::CRLF;
- }
- return true;
- }
- catch(phpmailerException $exc) {
- $this->setError($exc->getMessage());
- if ($this->exceptions) {
- throw $exc;
- }
- return false;
- }
- }
- public function postSend() {
- try {
- switch ($this->Mailer) {
- case 'sendmail':
- case 'qmail':
- return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody);
- case 'smtp':
- return $this->smtpSend($this->MIMEHeader, $this->MIMEBody);
- case 'mail':
- return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
- default:
- $sendMethod = $this->Mailer . 'Send';
- if (method_exists($this, $sendMethod)) {
- return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody);
- }
- return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
- }
- }
- catch(phpmailerException $exc) {
- $this->setError($exc->getMessage());
- $this->edebug($exc->getMessage());
- if ($this->exceptions) {
- throw $exc;
- }
- }
- return false;
- }
- protected function sendmailSend($header, $body) {
- if (!empty($this->Sender) and self::isShellSafe($this->Sender)) {
- if ($this->Mailer == 'qmail') {
- $sendmailFmt = '%s -f%s';
- } else {
- $sendmailFmt = '%s -oi -f%s -t';
- }
- } else {
- if ($this->Mailer == 'qmail') {
- $sendmailFmt = '%s';
- } else {
- $sendmailFmt = '%s -oi -t';
- }
- }
- $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender);
- if ($this->SingleTo) {
- foreach ($this->SingleToArray as $toAddr) {
- if (!@$mail = popen($sendmail, 'w')) {
- throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
- }
- fputs($mail, 'To: ' . $toAddr . "\n");
- fputs($mail, $header);
- fputs($mail, $body);
- $result = pclose($mail);
- $this->doCallback(($result == 0), array($toAddr), $this->cc, $this->bcc, $this->Subject, $body, $this->From);
- if ($result != 0) {
- throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
- }
- }
- } else {
- if (!@$mail = popen($sendmail, 'w')) {
- throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
- }
- fputs($mail, $header);
- fputs($mail, $body);
- $result = pclose($mail);
- $this->doCallback(($result == 0), $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From);
- if ($result != 0) {
- throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
- }
- }
- return true;
- }
- protected static function isShellSafe($string) {
- if (escapeshellcmd($string) !== $string or !in_array(escapeshellarg($string), array("'$string'", "\"$string\""))) {
- return false;
- }
- $length = strlen($string);
- for ($i = 0;$i < $length;$i++) {
- $c = $string[$i];
- if (!ctype_alnum($c) && strpos('@_-.', $c) === false) {
- return false;
- }
- }
- return true;
- }
- protected function mailSend($header, $body) {
- $toArr = array();
- foreach ($this->to as $toaddr) {
- $toArr[] = $this->addrFormat($toaddr);
- }
- $to = implode(', ', $toArr);
- $params = null;
- if (!empty($this->Sender) and $this->validateAddress($this->Sender)) {
- if (self::isShellSafe($this->Sender)) {
- $params = sprintf('-f%s', $this->Sender);
- }
- }
- if (!empty($this->Sender) and !ini_get('safe_mode') and $this->validateAddress($this->Sender)) {
- $old_from = ini_get('sendmail_from');
- ini_set('sendmail_from', $this->Sender);
- }
- $result = false;
- if ($this->SingleTo and count($toArr) > 1) {
- foreach ($toArr as $toAddr) {
- $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);
- $this->doCallback($result, array($toAddr), $this->cc, $this->bcc, $this->Subject, $body, $this->From);
- }
- } else {
- $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params);
- $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From);
- }
- if (isset($old_from)) {
- ini_set('sendmail_from', $old_from);
- }
- if (!$result) {
- throw new phpmailerException($this->lang('instantiate'), self::STOP_CRITICAL);
- }
- return true;
- }
- public function getSMTPInstance() {
- if (!is_object($this->smtp)) {
- $this->smtp = new SMTP;
- }
- return $this->smtp;
- }
- protected function smtpSend($header, $body) {
- $bad_rcpt = array();
- if (!$this->smtpConnect($this->SMTPOptions)) {
- throw new phpmailerException($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
- }
- if (!empty($this->Sender) and $this->validateAddress($this->Sender)) {
- $smtp_from = $this->Sender;
- } else {
- $smtp_from = $this->From;
- }
- if (!$this->smtp->mail($smtp_from)) {
- $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
- throw new phpmailerException($this->ErrorInfo, self::STOP_CRITICAL);
- }
- foreach (array($this->to, $this->cc, $this->bcc) as $togroup) {
- foreach ($togroup as $to) {
- if (!$this->smtp->recipient($to[0])) {
- $error = $this->smtp->getError();
- $bad_rcpt[] = array('to' => $to[0], 'error' => $error['detail']);
- $isSent = false;
- } else {
- $isSent = true;
- }
- $this->doCallback($isSent, array($to[0]), array(), array(), $this->Subject, $body, $this->From);
- }
- }
- if ((count($this->all_recipients) > count($bad_rcpt)) and !$this->smtp->data($header . $body)) {
- throw new phpmailerException($this->lang('data_not_accepted'), self::STOP_CRITICAL);
- }
- if ($this->SMTPKeepAlive) {
- $this->smtp->reset();
- } else {
- $this->smtp->quit();
- $this->smtp->close();
- }
- if (count($bad_rcpt) > 0) {
- $errstr = '';
- foreach ($bad_rcpt as $bad) {
- $errstr.= $bad['to'] . ': ' . $bad['error'];
- }
- throw new phpmailerException($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE);
- }
- return true;
- }
- public function smtpConnect($options = null) {
- if (is_null($this->smtp)) {
- $this->smtp = $this->getSMTPInstance();
- }
- if (is_null($options)) {
- $options = $this->SMTPOptions;
- }
- if ($this->smtp->connected()) {
- return true;
- }
- $this->smtp->setTimeout($this->Timeout);
- $this->smtp->setDebugLevel($this->SMTPDebug);
- $this->smtp->setDebugOutput($this->Debugoutput);
- $this->smtp->setVerp($this->do_verp);
- $hosts = explode(';', $this->Host);
- $lastexception = null;
- foreach ($hosts as $hostentry) {
- $hostinfo = array();
- if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) {
- continue;
- }
- $prefix = '';
- $secure = $this->SMTPSecure;
- $tls = ($this->SMTPSecure == 'tls');
- if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) {
- $prefix = 'ssl://';
- $tls = false;
- $secure = 'ssl';
- } elseif ($hostinfo[2] == 'tls') {
- $tls = true;
- $secure = 'tls';
- }
- $sslext = defined('OPENSSL_ALGO_SHA1');
- if ('tls' === $secure or 'ssl' === $secure) {
- if (!$sslext) {
- throw new phpmailerException($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL);
- }
- }
- $host = $hostinfo[3];
- $port = $this->Port;
- $tport = (integer)$hostinfo[4];
- if ($tport > 0 and $tport < 65536) {
- $port = $tport;
- }
- if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
- try {
- if ($this->Helo) {
- $hello = $this->Helo;
- } else {
- $hello = $this->serverHostname();
- }
- $this->smtp->hello($hello);
- if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) {
- $tls = true;
- }
- if ($tls) {
- if (!$this->smtp->startTLS()) {
- throw new phpmailerException($this->lang('connect_host'));
- }
- $this->smtp->hello($hello);
- }
- if ($this->SMTPAuth) {
- if (!$this->smtp->authenticate($this->Username, $this->Password, $this->AuthType, $this->Realm, $this->Workstation)) {
- throw new phpmailerException($this->lang('authenticate'));
- }
- }
- return true;
- }
- catch(phpmailerException $exc) {
- $lastexception = $exc;
- $this->edebug($exc->getMessage());
- $this->smtp->quit();
- }
- }
- }
- $this->smtp->close();
- if ($this->exceptions and !is_null($lastexception)) {
- throw $lastexception;
- }
- return false;
- }
- public function smtpClose() {
- if (is_a($this->smtp, 'SMTP')) {
- if ($this->smtp->connected()) {
- $this->smtp->quit();
- $this->smtp->close();
- }
- }
- }
- public function setLanguage($langcode = 'en', $lang_path = '') {
- $renamed_langcodes = array('br' => 'pt_br', 'cz' => 'cs', 'dk' => 'da', 'no' => 'nb', 'se' => 'sv',);
- if (isset($renamed_langcodes[$langcode])) {
- $langcode = $renamed_langcodes[$langcode];
- }
- $PHPMAILER_LANG = array('authenticate' => 'SMTP Error: Could not authenticate.', 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', 'data_not_accepted' => 'SMTP Error: data not accepted.', 'empty_message' => 'Message body empty', 'encoding' => 'Unknown encoding: ', 'execute' => 'Could not execute: ', 'file_access' => 'Could not access file: ', 'file_open' => 'File Error: Could not open file: ', 'from_failed' => 'The following From address failed: ', 'instantiate' => 'Could not instantiate mail function.', 'invalid_address' => 'Invalid address: ', 'mailer_not_supported' => ' mailer is not supported.', 'provide_address' => 'You must provide at least one recipient email address.', 'recipients_failed' => 'SMTP Error: The following recipients failed: ', 'signing' => 'Signing Error: ', 'smtp_connect_failed' => 'SMTP connect() failed.', 'smtp_error' => 'SMTP server error: ', 'variable_set' => 'Cannot set or reset variable: ', 'extension_missing' => 'Extension missing: ');
- if (empty($lang_path)) {
- $lang_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
- }
- if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) {
- $langcode = 'en';
- }
- $foundlang = true;
- $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php';
- if ($langcode != 'en') {
- if (!is_readable($lang_file)) {
- $foundlang = false;
- } else {
- $foundlang = include $lang_file;
- }
- }
- $this->language = $PHPMAILER_LANG;
- return (boolean)$foundlang;
- }
- public function getTranslations() {
- return $this->language;
- }
- public function addrAppend($type, $addr) {
- $addresses = array();
- foreach ($addr as $address) {
- $addresses[] = $this->addrFormat($address);
- }
- return $type . ': ' . implode(', ', $addresses) . $this->LE;
- }
- public function addrFormat($addr) {
- if (empty($addr[1])) {
- return $this->secureHeader($addr[0]);
- } else {
- return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') . ' <' . $this->secureHeader($addr[0]) . '>';
- }
- }
- public function wrapText($message, $length, $qp_mode = false) {
- if ($qp_mode) {
- $soft_break = sprintf(' =%s', $this->LE);
- } else {
- $soft_break = $this->LE;
- }
- $is_utf8 = (strtolower($this->CharSet) == 'utf-8');
- $lelen = strlen($this->LE);
- $crlflen = strlen(self::CRLF);
- $message = $this->fixEOL($message);
- if (substr($message, -$lelen) == $this->LE) {
- $message = substr($message, 0, -$lelen);
- }
- $lines = explode($this->LE, $message);
- $message = '';
- foreach ($lines as $line) {
- $words = explode(' ', $line);
- $buf = '';
- $firstword = true;
- foreach ($words as $word) {
- if ($qp_mode and (strlen($word) > $length)) {
- $space_left = $length - strlen($buf) - $crlflen;
- if (!$firstword) {
- if ($space_left > 20) {
- $len = $space_left;
- if ($is_utf8) {
- $len = $this->utf8CharBoundary($word, $len);
- } elseif (substr($word, $len - 1, 1) == '=') {
- $len--;
- } elseif (substr($word, $len - 2, 1) == '=') {
- $len-= 2;
- }
- $part = substr($word, 0, $len);
- $word = substr($word, $len);
- $buf.= ' ' . $part;
- $message.= $buf . sprintf('=%s', self::CRLF);
- } else {
- $message.= $buf . $soft_break;
- }
- $buf = '';
- }
- while (strlen($word) > 0) {
- if ($length <= 0) {
- break;
- }
- $len = $length;
- if ($is_utf8) {
- $len = $this->utf8CharBoundary($word, $len);
- } elseif (substr($word, $len - 1, 1) == '=') {
- $len--;
- } elseif (substr($word, $len - 2, 1) == '=') {
- $len-= 2;
- }
- $part = substr($word, 0, $len);
- $word = substr($word, $len);
- if (strlen($word) > 0) {
- $message.= $part . sprintf('=%s', self::CRLF);
- } else {
- $buf = $part;
- }
- }
- } else {
- $buf_o = $buf;
- if (!$firstword) {
- $buf.= ' ';
- }
- $buf.= $word;
- if (strlen($buf) > $length and $buf_o != '') {
- $message.= $buf_o . $soft_break;
- $buf = $word;
- }
- }
- $firstword = false;
- }
- $message.= $buf . self::CRLF;
- }
- return $message;
- }
- public function utf8CharBoundary($encodedText, $maxLength) {
- $foundSplitPos = false;
- $lookBack = 3;
- while (!$foundSplitPos) {
- $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);
- $encodedCharPos = strpos($lastChunk, '=');
- if (false !== $encodedCharPos) {
- $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);
- $dec = hexdec($hex);
- if ($dec < 128) {
- if ($encodedCharPos > 0) {
- $maxLength = $maxLength - ($lookBack - $encodedCharPos);
- }
- $foundSplitPos = true;
- } elseif ($dec >= 192) {
- $maxLength = $maxLength - ($lookBack - $encodedCharPos);
- $foundSplitPos = true;
- } elseif ($dec < 192) {
- $lookBack+= 3;
- }
- } else {
- $foundSplitPos = true;
- }
- }
- return $maxLength;
- }
- public function setWordWrap() {
- if ($this->WordWrap < 1) {
- return;
- }
- switch ($this->message_type) {
- case 'alt':
- case 'alt_inline':
- case 'alt_attach':
- case 'alt_inline_attach':
- $this->AltBody = $this->wrapText($this->AltBody, $this->WordWrap);
- break;
- default:
- $this->Body = $this->wrapText($this->Body, $this->WordWrap);
- break;
- }
- }
- public function createHeader() {
- $result = '';
- if ($this->MessageDate == '') {
- $this->MessageDate = self::rfcDate();
- }
- $result.= $this->headerLine('Date', $this->MessageDate);
- if ($this->SingleTo) {
- if ($this->Mailer != 'mail') {
- foreach ($this->to as $toaddr) {
- $this->SingleToArray[] = $this->addrFormat($toaddr);
- }
- }
- } else {
- if (count($this->to) > 0) {
- if ($this->Mailer != 'mail') {
- $result.= $this->addrAppend('To', $this->to);
- }
- } elseif (count($this->cc) == 0) {
- $result.= $this->headerLine('To', 'undisclosed-recipients:;');
- }
- }
- $result.= $this->addrAppend('From', array(array(trim($this->From), $this->FromName)));
- if (count($this->cc) > 0) {
- $result.= $this->addrAppend('Cc', $this->cc);
- }
- if (($this->Mailer == 'sendmail' or $this->Mailer == 'qmail' or $this->Mailer == 'mail') and count($this->bcc) > 0) {
- $result.= $this->addrAppend('Bcc', $this->bcc);
- }
- if (count($this->ReplyTo) > 0) {
- $result.= $this->addrAppend('REPLY-TO', $this->ReplyTo);
- }
- if ($this->Mailer != 'mail') {
- $result.= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject)));
- }
- if ('' != $this->MessageID and preg_match('/^<.*@.*>$/', $this->MessageID)) {
- $this->lastMessageID = $this->MessageID;
- } else {
- $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname());
- }
- $result.= $this->headerLine('Message-ID', $this->lastMessageID);
- if (!is_null($this->Priority)) {
- $result.= $this->headerLine('X-Priority', $this->Priority);
- }
- if ($this->XMailer == '') {
- $result.= $this->headerLine('X-Mailer', 'PHPMailer ' . $this->Version . ' (https://github.com/PHPMailer/PHPMailer)');
- } else {
- $myXmailer = trim($this->XMailer);
- if ($myXmailer) {
- $result.= $this->headerLine('X-Mailer', $myXmailer);
- }
- }
- if ($this->ConfirmReadingTo != '') {
- $result.= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>');
- }
- foreach ($this->CustomHeader as $header) {
- $result.= $this->headerLine(trim($header[0]), $this->encodeHeader(trim($header[1])));
- }
- if (!$this->sign_key_file) {
- $result.= $this->headerLine('MIME-Version', '1.0');
- $result.= $this->getMailMIME();
- }
- return $result;
- }
- public function getMailMIME() {
- $result = '';
- $ismultipart = true;
- switch ($this->message_type) {
- case 'inline':
- $result.= $this->headerLine('Content-Type', 'multipart/related;');
- $result.= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
- break;
- case 'attach':
- case 'inline_attach':
- case 'alt_attach':
- case 'alt_inline_attach':
- $result.= $this->headerLine('Content-Type', 'multipart/mixed;');
- $result.= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
- break;
- case 'alt':
- case 'alt_inline':
- $result.= $this->headerLine('Content-Type', 'multipart/alternative;');
- $result.= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
- break;
- default:
- $result.= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet);
- $ismultipart = false;
- break;
- }
- if ($this->Encoding != '7bit') {
- if ($ismultipart) {
- if ($this->Encoding == '8bit') {
- $result.= $this->headerLine('Content-Transfer-Encoding', '8bit');
- }
- } else {
- $result.= $this->headerLine('Content-Transfer-Encoding', $this->Encoding);
- }
- }
- if ($this->Mailer != 'mail') {
- $result.= $this->LE;
- }
- return $result;
- }
- public function getSentMIMEMessage() {
- return rtrim($this->MIMEHeader . $this->mailHeader, "\n\r") . self::CRLF . self::CRLF . $this->MIMEBody;
- }
- protected function generateId() {
- return md5(uniqid(time()));
- }
- public function createBody() {
- $body = '';
- $this->uniqueid = $this->generateId();
- $this->boundary[1] = 'b1_' . $this->uniqueid;
- $this->boundary[2] = 'b2_' . $this->uniqueid;
- $this->boundary[3] = 'b3_' . $this->uniqueid;
- if ($this->sign_key_file) {
- $body.= $this->getMailMIME() . $this->LE;
- }
- $this->setWordWrap();
- $bodyEncoding = $this->Encoding;
- $bodyCharSet = $this->CharSet;
- if ($bodyEncoding == '8bit' and !$this->has8bitChars($this->Body)) {
- $bodyEncoding = '7bit';
- $bodyCharSet = 'us-ascii';
- }
- if ('base64' != $this->Encoding and self::hasLineLongerThanMax($this->Body)) {
- $bodyEncoding = 'quoted-printable';
- }
- $altBodyEncoding = $this->Encoding;
- $altBodyCharSet = $this->CharSet;
- if ($altBodyEncoding == '8bit' and !$this->has8bitChars($this->AltBody)) {
- $altBodyEncoding = '7bit';
- $altBodyCharSet = 'us-ascii';
- }
- if ('base64' != $altBodyEncoding and self::hasLineLongerThanMax($this->AltBody)) {
- $altBodyEncoding = 'quoted-printable';
- }
- $mimepre = "This is a multi-part message in MIME format." . $this->LE . $this->LE;
- switch ($this->message_type) {
- case 'inline':
- $body.= $mimepre;
- $body.= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
- $body.= $this->encodeString($this->Body, $bodyEncoding);
- $body.= $this->LE . $this->LE;
- $body.= $this->attachAll('inline', $this->boundary[1]);
- break;
- case 'attach':
- $body.= $mimepre;
- $body.= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
- $body.= $this->encodeString($this->Body, $bodyEncoding);
- $body.= $this->LE . $this->LE;
- $body.= $this->attachAll('attachment', $this->boundary[1]);
- break;
- case 'inline_attach':
- $body.= $mimepre;
- $body.= $this->textLine('--' . $this->boundary[1]);
- $body.= $this->headerLine('Content-Type', 'multipart/related;');
- $body.= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
- $body.= $this->LE;
- $body.= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding);
- $body.= $this->encodeString($this->Body, $bodyEncoding);
- $body.= $this->LE . $this->LE;
- $body.= $this->attachAll('inline', $this->boundary[2]);
- $body.= $this->LE;
- $body.= $this->attachAll('attachment', $this->boundary[1]);
- break;
- case 'alt':
- $body.= $mimepre;
- $body.= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding);
- $body.= $this->encodeString($this->AltBody, $altBodyEncoding);
- $body.= $this->LE . $this->LE;
- $body.= $this->getBoundary($this->boundary[1], $bodyCharSet, 'text/html', $bodyEncoding);
- $body.= $this->encodeString($this->Body, $bodyEncoding);
- $body.= $this->LE . $this->LE;
- if (!empty($this->Ical)) {
- $body.= $this->getBoundary($this->boundary[1], '', 'text/calendar; method=REQUEST', '');
- $body.= $this->encodeString($this->Ical, $this->Encoding);
- $body.= $this->LE . $this->LE;
- }
- $body.= $this->endBoundary($this->boundary[1]);
- break;
- case 'alt_inline':
- $body.= $mimepre;
- $body.= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding);
- $body.= $this->encodeString($this->AltBody, $altBodyEncoding);
- $body.= $this->LE . $this->LE;
- $body.= $this->textLine('--' . $this->boundary[1]);
- $body.= $this->headerLine('Content-Type', 'multipart/related;');
- $body.= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
- $body.= $this->LE;
- $body.= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding);
- $body.= $this->encodeString($this->Body, $bodyEncoding);
- $body.= $this->LE . $this->LE;
- $body.= $this->attachAll('inline', $this->boundary[2]);
- $body.= $this->LE;
- $body.= $this->endBoundary($this->boundary[1]);
- break;
- case 'alt_attach':
- $body.= $mimepre;
- $body.= $this->textLine('--' . $this->boundary[1]);
- $body.= $this->headerLine('Content-Type', 'multipart/alternative;');
- $body.= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
- $body.= $this->LE;
- $body.= $this->getBoundary($this->boundary[2], $altBodyCharSet, 'text/plain', $altBodyEncoding);
- $body.= $this->encodeString($this->AltBody, $altBodyEncoding);
- $body.= $this->LE . $this->LE;
- $body.= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding);
- $body.= $this->encodeString($this->Body, $bodyEncoding);
- $body.= $this->LE . $this->LE;
- $body.= $this->endBoundary($this->boundary[2]);
- $body.= $this->LE;
- $body.= $this->attachAll('attachment', $this->boundary[1]);
- break;
- case 'alt_inline_attach':
- $body.= $mimepre;
- $body.= $this->textLine('--' . $this->boundary[1]);
- $body.= $this->headerLine('Content-Type', 'multipart/alternative;');
- $body.= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
- $body.= $this->LE;
- $body.= $this->getBoundary($this->boundary[2], $altBodyCharSet, 'text/plain', $altBodyEncoding);
- $body.= $this->encodeString($this->AltBody, $altBodyEncoding);
- $body.= $this->LE . $this->LE;
- $body.= $this->textLine('--' . $this->boundary[2]);
- $body.= $this->headerLine('Content-Type', 'multipart/related;');
- $body.= $this->textLine("\tboundary=\"" . $this->boundary[3] . '"');
- $body.= $this->LE;
- $body.= $this->getBoundary($this->boundary[3], $bodyCharSet, 'text/html', $bodyEncoding);
- $body.= $this->encodeString($this->Body, $bodyEncoding);
- $body.= $this->LE . $this->LE;
- $body.= $this->attachAll('inline', $this->boundary[3]);
- $body.= $this->LE;
- $body.= $this->endBoundary($this->boundary[2]);
- $body.= $this->LE;
- $body.= $this->attachAll('attachment', $this->boundary[1]);
- break;
- default:
- $this->Encoding = $bodyEncoding;
- $body.= $this->encodeString($this->Body, $this->Encoding);
- break;
- }
- if ($this->isError()) {
- $body = '';
- } elseif ($this->sign_key_file) {
- try {
- if (!defined('PKCS7_TEXT')) {
- throw new phpmailerException($this->lang('extension_missing') . 'openssl');
- }
- $file = tempnam(sys_get_temp_dir(), 'mail');
- if (false === file_put_contents($file, $body)) {
- throw new phpmailerException($this->lang('signing') . ' Could not write temp file');
- }
- $signed = tempnam(sys_get_temp_dir(), 'signed');
- if (empty($this->sign_extracerts_file)) {
- $sign = @openssl_pkcs7_sign($file, $signed, 'file://' . realpath($this->sign_cert_file), array('file://' . realpath($this->sign_key_file), $this->sign_key_pass), null);
- } else {
- $sign = @openssl_pkcs7_sign($file, $signed, 'file://' . realpath($this->sign_cert_file), array('file://' . realpath($this->sign_key_file), $this->sign_key_pass), null, PKCS7_DETACHED, $this->sign_extracerts_file);
- }
- if ($sign) {
- @unlink($file);
- $body = file_get_contents($signed);
- @unlink($signed);
- $parts = explode("\n\n", $body, 2);
- $this->MIMEHeader.= $parts[0] . $this->LE . $this->LE;
- $body = $parts[1];
- } else {
- @unlink($file);
- @unlink($signed);
- throw new phpmailerException($this->lang('signing') . openssl_error_string());
- }
- }
- catch(phpmailerException $exc) {
- $body = '';
- if ($this->exceptions) {
- throw $exc;
- }
- }
- }
- return $body;
- }
- protected function getBoundary($boundary, $charSet, $contentType, $encoding) {
- $result = '';
- if ($charSet == '') {
- $charSet = $this->CharSet;
- }
- if ($contentType == '') {
- $contentType = $this->ContentType;
- }
- if ($encoding == '') {
- $encoding = $this->Encoding;
- }
- $result.= $this->textLine('--' . $boundary);
- $result.= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet);
- $result.= $this->LE;
- if ($encoding != '7bit') {
- $result.= $this->headerLine('Content-Transfer-Encoding', $encoding);
- }
- $result.= $this->LE;
- return $result;
- }
- protected function endBoundary($boundary) {
- return $this->LE . '--' . $boundary . '--' . $this->LE;
- }
- protected function setMessageType() {
- $type = array();
- if ($this->alternativeExists()) {
- $type[] = 'alt';
- }
- if ($this->inlineImageExists()) {
- $type[] = 'inline';
- }
- if ($this->attachmentExists()) {
- $type[] = 'attach';
- }
- $this->message_type = implode('_', $type);
- if ($this->message_type == '') {
- $this->message_type = 'plain';
- }
- }
- public function headerLine($name, $value) {
- return $name . ': ' . $value . $this->LE;
- }
- public function textLine($value) {
- return $value . $this->LE;
- }
- public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment') {
- try {
- if (!@is_file($path)) {
- throw new phpmailerException($this->lang('file_access') . $path, self::STOP_CONTINUE);
- }
- if ($type == '') {
- $type = self::filenameToType($path);
- }
- $filename = basename($path);
- if ($name == '') {
- $name = $filename;
- }
- $this->attachment[] = array(0 => $path, 1 => $filename, 2 => $name, 3 => $encoding, 4 => $type, 5 => false, 6 => $disposition, 7 => 0);
- }
- catch(phpmailerException $exc) {
- $this->setError($exc->getMessage());
- $this->edebug($exc->getMessage());
- if ($this->exceptions) {
- throw $exc;
- }
- return false;
- }
- return true;
- }
- public function getAttachments() {
- return $this->attachment;
- }
- protected function attachAll($disposition_type, $boundary) {
- $mime = array();
- $cidUniq = array();
- $incl = array();
- foreach ($this->attachment as $attachment) {
- if ($attachment[6] == $disposition_type) {
- $string = '';
- $path = '';
- $bString = $attachment[5];
- if ($bString) {
- $string = $attachment[0];
- } else {
- $path = $attachment[0];
- }
- $inclhash = md5(serialize($attachment));
- if (in_array($inclhash, $incl)) {
- continue;
- }
- $incl[] = $inclhash;
- $name = $attachment[2];
- $encoding = $attachment[3];
- $type = $attachment[4];
- $disposition = $attachment[6];
- $cid = $attachment[7];
- if ($disposition == 'inline' && array_key_exists($cid, $cidUniq)) {
- continue;
- }
- $cidUniq[$cid] = true;
- $mime[] = sprintf('--%s%s', $boundary, $this->LE);
- if (!empty($name)) {
- $mime[] = sprintf('Content-Type: %s; name="%s"%s', $type, $this->encodeHeader($this->secureHeader($name)), $this->LE);
- } else {
- $mime[] = sprintf('Content-Type: %s%s', $type, $this->LE);
- }
- if ($encoding != '7bit') {
- $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, $this->LE);
- }
- if ($disposition == 'inline') {
- $mime[] = sprintf('Content-ID: <%s>%s', $cid, $this->LE);
- }
- if (!(empty($disposition))) {
- $encoded_name = $this->encodeHeader($this->secureHeader($name));
- if (preg_match('/[ \(\)<>@,;:\\"\/\[\]\?=]/', $encoded_name)) {
- $mime[] = sprintf('Content-Disposition: %s; filename="%s"%s', $disposition, $encoded_name, $this->LE . $this->LE);
- } else {
- if (!empty($encoded_name)) {
- $mime[] = sprintf('Content-Disposition: %s; filename=%s%s', $disposition, $encoded_name, $this->LE . $this->LE);
- } else {
- $mime[] = sprintf('Content-Disposition: %s%s', $disposition, $this->LE . $this->LE);
- }
- }
- } else {
- $mime[] = $this->LE;
- }
- if ($bString) {
- $mime[] = $this->encodeString($string, $encoding);
- if ($this->isError()) {
- return '';
- }
- $mime[] = $this->LE . $this->LE;
- } else {
- $mime[] = $this->encodeFile($path, $encoding);
- if ($this->isError()) {
- return '';
- }
- $mime[] = $this->LE . $this->LE;
- }
- }
- }
- $mime[] = sprintf('--%s--%s', $boundary, $this->LE);
- return implode('', $mime);
- }
- protected function encodeFile($path, $encoding = 'base64') {
- try {
- if (!is_readable($path)) {
- throw new phpmailerException($this->lang('file_open') . $path, self::STOP_CONTINUE);
- }
- $magic_quotes = get_magic_quotes_runtime();
- if ($magic_quotes) {
- if (version_compare(PHP_VERSION, '5.3.0', '<')) {
- set_magic_quotes_runtime(false);
- } else {
- ini_set('magic_quotes_runtime', false);
- }
- }
- $file_buffer = file_get_contents($path);
- $file_buffer = $this->encodeString($file_buffer, $encoding);
- if ($magic_quotes) {
- if (version_compare(PHP_VERSION, '5.3.0', '<')) {
- set_magic_quotes_runtime($magic_quotes);
- } else {
- ini_set('magic_quotes_runtime', $magic_quotes);
- }
- }
- return $file_buffer;
- }
- catch(Exception $exc) {
- $this->setError($exc->getMessage());
- return '';
- }
- }
- public function encodeString($str, $encoding = 'base64') {
- $encoded = '';
- switch (strtolower($encoding)) {
- case 'base64':
- $encoded = chunk_split(base64_encode($str), 76, $this->LE);
- break;
- case '7bit':
- case '8bit':
- $encoded = $this->fixEOL($str);
- if (substr($encoded, -(strlen($this->LE))) != $this->LE) {
- $encoded.= $this->LE;
- }
- break;
- case 'binary':
- $encoded = $str;
- break;
- case 'quoted-printable':
- $encoded = $this->encodeQP($str);
- break;
- default:
- $this->setError($this->lang('encoding') . $encoding);
- break;
- }
- return $encoded;
- }
- public function encodeHeader($str, $position = 'text') {
- $matchcount = 0;
- switch (strtolower($position)) {
- case 'phrase':
- if (!preg_match('/[\200-\377]/', $str)) {
- $encoded = addcslashes($str, "\0..\37\177\\\"");
- if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
- return ($encoded);
- } else {
- return ("\"$encoded\"");
- }
- }
- $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
- break;
- case 'comment':
- $matchcount = preg_match_all('/[()"]/', $str, $matches);
- case 'text':
- default:
- $matchcount+= preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
- break;
- }
- if ($matchcount == 0) {
- return ($str);
- }
- $maxlen = 75 - 7 - strlen($this->CharSet);
- if ($matchcount > strlen($str) / 3) {
- $encoding = 'B';
- if (function_exists('mb_strlen') && $this->hasMultiBytes($str)) {
- $encoded = $this->base64EncodeWrapMB($str, "\n");
- } else {
- $encoded = base64_encode($str);
- $maxlen-= $maxlen % 4;
- $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
- }
- } else {
- $encoding = 'Q';
- $encoded = $this->encodeQ($str, $position);
- $encoded = $this->wrapText($encoded, $maxlen, true);
- $encoded = str_replace('=' . self::CRLF, "\n", trim($encoded));
- }
- $encoded = preg_replace('/^(.*)$/m', ' =?' . $this->CharSet . "?$encoding?\\1?=", $encoded);
- $encoded = trim(str_replace("\n", $this->LE, $encoded));
- return $encoded;
- }
- public function hasMultiBytes($str) {
- if (function_exists('mb_strlen')) {
- return (strlen($str) > mb_strlen($str, $this->CharSet));
- } else {
- return false;
- }
- }
- public function has8bitChars($text) {
- return (boolean)preg_match('/[\x80-\xFF]/', $text);
- }
- public function base64EncodeWrapMB($str, $linebreak = null) {
- $start = '=?' . $this->CharSet . '?B?';
- $end = '?=';
- $encoded = '';
- if ($linebreak === null) {
- $linebreak = $this->LE;
- }
- $mb_length = mb_strlen($str, $this->CharSet);
- $length = 75 - strlen($start) - strlen($end);
- $ratio = $mb_length / strlen($str);
- $avgLength = floor($length * $ratio * .75);
- for ($i = 0;$i < $mb_length;$i+= $offset) {
- $lookBack = 0;
- do {
- $offset = $avgLength - $lookBack;
- $chunk = mb_substr($str, $i, $offset, $this->CharSet);
- $chunk = base64_encode($chunk);
- $lookBack++;
- } while (strlen($chunk) > $length);
- $encoded.= $chunk . $linebreak;
- }
- $encoded = substr($encoded, 0, -strlen($linebreak));
- return $encoded;
- } public function encodeQP($string, $line_max = 76) {
- if (function_exists('quoted_printable_encode')) {
- return quoted_printable_encode($string);
- }
- $string = str_replace(array('%20', '%0D%0A.', '%0D%0A', '%'), array(' ', "\r\n=2E", "\r\n", '='), rawurlencode($string));
- return preg_replace('/[^\r\n]{' . ($line_max - 3) . '}[^=\r\n]{2}/', "$0=\r\n", $string);
- }
- public function encodeQPphp($string, $line_max = 76, $space_conv = false) {
- return $this->encodeQP($string, $line_max);
- }
- public function encodeQ($str, $position = 'text') {
- $pattern = '';
- $encoded = str_replace(array("\r", "\n"), '', $str);
- switch (strtolower($position)) {
- case 'phrase':
- $pattern = '^A-Za-z0-9!*+\/ -';
- break;
- case 'comment':
- $pattern = '\(\)"';
- case 'text':
- default:
- $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern;
- break;
- }
- $matches = array();
- if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) {
- $eqkey = array_search('=', $matches[0]);
- if (false !== $eqkey) {
- unset($matches[0][$eqkey]);
- array_unshift($matches[0], '=');
- }
- foreach (array_unique($matches[0]) as $char) {
- $encoded = str_replace($char, '=' . sprintf('X', ord($char)), $encoded);
- }
- }
- return str_replace(' ', '_', $encoded);
- }
- public function addStringAttachment($string, $filename, $encoding = 'base64', $type = '', $disposition = 'attachment') {
- if ($type == '') {
- $type = self::filenameToType($filename);
- }
- $this->attachment[] = array(0 => $string, 1 => $filename, 2 => basename($filename), 3 => $encoding, 4 => $type, 5 => true, 6 => $disposition, 7 => 0);
- }
- public function addEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = '', $disposition = 'inline') {
- if (!@is_file($path)) {
- $this->setError($this->lang('file_access') . $path);
- return false;
- }
- if ($type == '') {
- $type = self::filenameToType($path);
- }
- $filename = basename($path);
- if ($name == '') {
- $name = $filename;
- }
- $this->attachment[] = array(0 => $path, 1 => $filename, 2 => $name, 3 => $encoding, 4 => $type, 5 => false, 6 => $disposition, 7 => $cid);
- return true;
- }
- public function addStringEmbeddedImage($string, $cid, $name = '', $encoding = 'base64', $type = '', $disposition = 'inline') {
- if ($type == '' and !empty($name)) {
- $type = self::filenameToType($name);
- }
- $this->attachment[] = array(0 => $string, 1 => $name, 2 => $name, 3 => $encoding, 4 => $type, 5 => true, 6 => $disposition, 7 => $cid);
- return true;
- }
- public function inlineImageExists() {
- foreach ($this->attachment as $attachment) {
- if ($attachment[6] == 'inline') {
- return true;
- }
- }
- return false;
- }
- public function attachmentExists() {
- foreach ($this->attachment as $attachment) {
- if ($attachment[6] == 'attachment') {
- return true;
- }
- }
- return false;
- }
- public function alternativeExists() {
- return !empty($this->AltBody);
- }
- public function clearQueuedAddresses($kind) {
- $RecipientsQueue = $this->RecipientsQueue;
- foreach ($RecipientsQueue as $address => $params) {
- if ($params[0] == $kind) {
- unset($this->RecipientsQueue[$address]);
- }
- }
- }
- public function clearAddresses() {
- foreach ($this->to as $to) {
- unset($this->all_recipients[strtolower($to[0]) ]);
- }
- $this->to = array();
- $this->clearQueuedAddresses('to');
- }
- public function clearCCs() {
- foreach ($this->cc as $cc) {
- unset($this->all_recipients[strtolower($cc[0]) ]);
- }
- $this->cc = array();
- $this->clearQueuedAddresses('cc');
- }
- public function clearBCCs() {
- foreach ($this->bcc as $bcc) {
- unset($this->all_recipients[strtolower($bcc[0]) ]);
- }
- $this->bcc = array();
- $this->clearQueuedAddresses('bcc');
- }
- public function clearReplyTos() {
- $this->ReplyTo = array();
- $this->ReplyToQueue = array();
- }
- public function clearAllRecipients() {
- $this->to = array();
- $this->cc = array();
- $this->bcc = array();
- $this->all_recipients = array();
- $this->RecipientsQueue = array();
- }
- public function clearAttachments() {
- $this->attachment = array();
- }
- public function clearCustomHeaders() {
- $this->CustomHeader = array();
- }
- protected function setError($msg) {
- $this->error_count++;
- if ($this->Mailer == 'smtp' and !is_null($this->smtp)) {
- $lasterror = $this->smtp->getError();
- if (!empty($lasterror['error'])) {
- $msg.= $this->lang('smtp_error') . $lasterror['error'];
- if (!empty($lasterror['detail'])) {
- $msg.= ' Detail: ' . $lasterror['detail'];
- }
- if (!empty($lasterror['smtp_code'])) {
- $msg.= ' SMTP code: ' . $lasterror['smtp_code'];
- }
- if (!empty($lasterror['smtp_code_ex'])) {
- $msg.= ' Additional SMTP info: ' . $lasterror['smtp_code_ex'];
- }
- }
- }
- $this->ErrorInfo = $msg;
- }
- public static function rfcDate() {
- date_default_timezone_set(@date_default_timezone_get());
- return date('D, j M Y H:i:s O');
- }
- protected function serverHostname() {
- $result = 'localhost.localdomain';
- if (!empty($this->Hostname)) {
- $result = $this->Hostname;
- } elseif (isset($_SERVER) and array_key_exists('SERVER_NAME', $_SERVER) and !empty($_SERVER['SERVER_NAME'])) {
- $result = $_SERVER['SERVER_NAME'];
- } elseif (function_exists('gethostname') && gethostname() !== false) {
- $result = gethostname();
- } elseif (php_uname('n') !== false) {
- $result = php_uname('n');
- }
- return $result;
- }
- protected function lang($key) {
- if (count($this->language) < 1) {
- $this->setLanguage('en');
- }
- if (array_key_exists($key, $this->language)) {
- if ($key == 'smtp_connect_failed') {
- return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting';
- }
- return $this->language[$key];
- } else {
- return $key;
- }
- }
- public function isError() {
- return ($this->error_count > 0);
- }
- public function fixEOL($str) {
- $nstr = str_replace(array("\r\n", "\r"), "\n", $str);
- if ($this->LE !== "\n") {
- $nstr = str_replace("\n", $this->LE, $nstr);
- }
- return $nstr;
- }
- public function addCustomHeader($name, $value = null) {
- if ($value === null) {
- $this->CustomHeader[] = explode(':', $name, 2);
- } else {
- $this->CustomHeader[] = array($name, $value);
- }
- }
- public function getCustomHeaders() {
- return $this->CustomHeader;
- }
- public function msgHTML($message, $basedir = '', $advanced = false) {
- preg_match_all('/(src|background)=["\'](.*)["\']/Ui', $message, $images);
- if (array_key_exists(2, $images)) {
- if (strlen($basedir) > 1 && substr($basedir, -1) != '/') {
- $basedir.= '/';
- }
- foreach ($images[2] as $imgindex => $url) {
- if (preg_match('#^data:(image[^;,]*)(;base64)?,#', $url, $match)) {
- $data = substr($url, strpos($url, ','));
- if ($match[2]) {
- $data = base64_decode($data);
- } else {
- $data = rawurldecode($data);
- }
- $cid = md5($url) . '@phpmailer.0';
- if ($this->addStringEmbeddedImage($data, $cid, 'embed' . $imgindex, 'base64', $match[1])) {
- $message = str_replace($images[0][$imgindex], $images[1][$imgindex] . '="cid:' . $cid . '"', $message);
- }
- continue;
- }
- if (!empty($basedir) && (strpos($url, '..') === false) && substr($url, 0, 4) !== 'cid:' && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url)) {
- $filename = basename($url);
- $directory = dirname($url);
- if ($directory == '.') {
- $directory = '';
- }
- $cid = md5($url) . '@phpmailer.0';
- if (strlen($directory) > 1 && substr($directory, -1) != '/') {
- $directory.= '/';
- }
- if ($this->addEmbeddedImage($basedir . $directory . $filename, $cid, $filename, 'base64', self::_mime_types((string)self::mb_pathinfo($filename, PATHINFO_EXTENSION)))) {
- $message = preg_replace('/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui', $images[1][$imgindex] . '="cid:' . $cid . '"', $message);
- }
- }
- }
- }
- $this->isHTML(true);
- $this->Body = $this->normalizeBreaks($message);
- $this->AltBody = $this->normalizeBreaks($this->html2text($message, $advanced));
- if (!$this->alternativeExists()) {
- $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . self::CRLF . self::CRLF;
- }
- return $this->Body;
- }
- public function html2text($html, $advanced = false) {
- if (is_callable($advanced)) {
- return call_user_func($advanced, $html);
- }
- return html_entity_decode(trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))), ENT_QUOTES, $this->CharSet);
- }
- public static function _mime_types($ext = '') {
- $mimes = array('xl' => 'application/excel', 'js' => 'application/javascript', 'hqx' => 'application/mac-binhex40', 'cpt' => 'application/mac-compactpro', 'bin' => 'application/macbinary', 'doc' => 'application/msword', 'word' => 'application/msword', 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', 'class' => 'application/octet-stream', 'dll' => 'application/octet-stream', 'dms' => 'application/octet-stream', 'exe' => 'application/octet-stream', 'lha' => 'application/octet-stream', 'lzh' => 'application/octet-stream', 'psd' => 'application/octet-stream', 'sea' => 'application/octet-stream', 'so' => 'application/octet-stream', 'oda' => 'application/oda', 'pdf' => 'application/pdf', 'ai' => 'application/postscript', 'eps' => 'application/postscript', 'ps' => 'application/postscript', 'smi' => 'application/smil', 'smil' => 'application/smil', 'mif' => 'application/vnd.mif', 'xls' => 'application/vnd.ms-excel', 'ppt' => 'application/vnd.ms-powerpoint', 'wbxml' => 'application/vnd.wap.wbxml', 'wmlc' => 'application/vnd.wap.wmlc', 'dcr' => 'application/x-director', 'dir' => 'application/x-director', 'dxr' => 'application/x-director', 'dvi' => 'application/x-dvi', 'gtar' => 'application/x-gtar', 'php3' => 'application/x-httpd-php', 'php4' => 'application/x-httpd-php', 'php' => 'application/x-httpd-php', 'phtml' => 'application/x-httpd-php', 'phps' => 'application/x-httpd-php-source', 'swf' => 'application/x-shockwave-flash', 'sit' => 'application/x-stuffit', 'tar' => 'application/x-tar', 'tgz' => 'application/x-tar', 'xht' => 'application/xhtml+xml', 'xhtml' => 'application/xhtml+xml', 'zip' => 'application/zip', 'mid' => 'audio/midi', 'midi' => 'audio/midi', 'mp2' => 'audio/mpeg', 'mp3' => 'audio/mpeg', 'mpga' => 'audio/mpeg', 'aif' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff', 'aiff' => 'audio/x-aiff', 'ram' => 'audio/x-pn-realaudio', 'rm' => 'audio/x-pn-realaudio', 'rpm' => 'audio/x-pn-realaudio-plugin', 'ra' => 'audio/x-realaudio', 'wav' => 'audio/x-wav', 'bmp' => 'image/bmp', 'gif' => 'image/gif', 'jpeg' => 'image/jpeg', 'jpe' => 'image/jpeg', 'jpg' => 'image/jpeg', 'png' => 'image/png', 'tiff' => 'image/tiff', 'tif' => 'image/tiff', 'eml' => 'message/rfc822', 'css' => 'text/css', 'html' => 'text/html', 'htm' => 'text/html', 'shtml' => 'text/html', 'log' => 'text/plain', 'text' => 'text/plain', 'txt' => 'text/plain', 'rtx' => 'text/richtext', 'rtf' => 'text/rtf', 'vcf' => 'text/vcard', 'vcard' => 'text/vcard', 'xml' => 'text/xml', 'xsl' => 'text/xml', 'mpeg' => 'video/mpeg', 'mpe' => 'video/mpeg', 'mpg' => 'video/mpeg', 'mov' => 'video/quicktime', 'qt' => 'video/quicktime', 'rv' => 'video/vnd.rn-realvideo', 'avi' => 'video/x-msvideo', 'movie' => 'video/x-sgi-movie');
- if (array_key_exists(strtolower($ext), $mimes)) {
- return $mimes[strtolower($ext) ];
- }
- return 'application/octet-stream';
- }
- public static function filenameToType($filename) {
- $qpos = strpos($filename, '?');
- if (false !== $qpos) {
- $filename = substr($filename, 0, $qpos);
- }
- $pathinfo = self::mb_pathinfo($filename);
- return self::_mime_types($pathinfo['extension']);
- }
- public static function mb_pathinfo($path, $options = null) {
- $ret = array('dirname' => '', 'basename' => '', 'extension' => '', 'filename' => '');
- $pathinfo = array();
- if (preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im', $path, $pathinfo)) {
- if (array_key_exists(1, $pathinfo)) {
- $ret['dirname'] = $pathinfo[1];
- }
- if (array_key_exists(2, $pathinfo)) {
- $ret['basename'] = $pathinfo[2];
- }
- if (array_key_exists(5, $pathinfo)) {
- $ret['extension'] = $pathinfo[5];
- }
- if (array_key_exists(3, $pathinfo)) {
- $ret['filename'] = $pathinfo[3];
- }
- }
- switch ($options) {
- case PATHINFO_DIRNAME:
- case 'dirname':
- return $ret['dirname'];
- case PATHINFO_BASENAME:
- case 'basename':
- return $ret['basename'];
- case PATHINFO_EXTENSION:
- case 'extension':
- return $ret['extension'];
- case PATHINFO_FILENAME:
- case 'filename':
- return $ret['filename'];
- default:
- return $ret;
- }
- }
- public function set($name, $value = '') {
- if (property_exists($this, $name)) {
- $this->$name = $value;
- return true;
- } else {
- $this->setError($this->lang('variable_set') . $name);
- return false;
- }
- }
- public function secureHeader($str) {
- return trim(str_replace(array("\r", "\n"), '', $str));
- }
- public static function normalizeBreaks($text, $breaktype = "\r\n") {
- return preg_replace('/(\r\n|\r|\n)/ms', $breaktype, $text);
- }
- public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '') {
- $this->sign_cert_file = $cert_filename;
- $this->sign_key_file = $key_filename;
- $this->sign_key_pass = $key_pass;
- $this->sign_extracerts_file = $extracerts_filename;
- }
- public function DKIM_QP($txt) {
- $line = '';
- for ($i = 0;$i < strlen($txt);$i++) {
- $ord = ord($txt[$i]);
- if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) {
- $line.= $txt[$i];
- } else {
- $line.= '=' . sprintf('X', $ord);
- }
- }
- return $line;
- }
- public function DKIM_Sign($signHeader) {
- if (!defined('PKCS7_TEXT')) {
- if ($this->exceptions) {
- throw new phpmailerException($this->lang('extension_missing') . 'openssl');
- }
- return '';
- }
- $privKeyStr = !empty($this->DKIM_private_string) ? $this->DKIM_private_string : file_get_contents($this->DKIM_private);
- if ('' != $this->DKIM_passphrase) {
- $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase);
- } else {
- $privKey = openssl_pkey_get_private($privKeyStr);
- }
- if (version_compare(PHP_VERSION, '5.3.0') >= 0 and in_array('sha256WithRSAEncryption', openssl_get_md_methods(true))) {
- if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {
- openssl_pkey_free($privKey);
- return base64_encode($signature);
- }
- } else {
- $pinfo = openssl_pkey_get_details($privKey);
- $hash = hash('sha256', $signHeader);
- $t = '3031300d060960864801650304020105000420' . $hash;
- $pslen = $pinfo['bits'] / 8 - (strlen($t) / 2 + 3);
- $eb = pack('H*', '0001' . str_repeat('FF', $pslen) . '00' . $t);
- if (openssl_private_encrypt($eb, $signature, $privKey, OPENSSL_NO_PADDING)) {
- openssl_pkey_free($privKey);
- return base64_encode($signature);
- }
- }
- openssl_pkey_free($privKey);
- return '';
- }
- public function DKIM_HeaderC($signHeader) {
- $signHeader = preg_replace('/\r\n\s+/', ' ', $signHeader);
- $lines = explode("\r\n", $signHeader);
- foreach ($lines as $key => $line) {
- list($heading, $value) = explode(':', $line, 2);
- $heading = strtolower($heading);
- $value = preg_replace('/\s{2,}/', ' ', $value);
- $lines[$key] = $heading . ':' . trim($value);
- }
- $signHeader = implode("\r\n", $lines);
- return $signHeader;
- }
- public function DKIM_BodyC($body) {
- if ($body == '') {
- return "\r\n";
- }
- $body = str_replace("\r\n", "\n", $body);
- $body = str_replace("\n", "\r\n", $body);
- while (substr($body, strlen($body) - 4, 4) == "\r\n\r\n") {
- $body = substr($body, 0, strlen($body) - 2);
- }
- return $body;
- }
- public function DKIM_Add($headers_line, $subject, $body) {
- $DKIMsignatureType = 'rsa-sha256';
- $DKIMcanonicalization = 'relaxed/simple';
- $DKIMquery = 'dns/txt';
- $DKIMtime = time();
- $subject_header = "Subject: $subject";
- $headers = explode($this->LE, $headers_line);
- $from_header = '';
- $to_header = '';
- $date_header = '';
- $current = '';
- foreach ($headers as $header) {
- if (strpos($header, 'From:') === 0) {
- $from_header = $header;
- $current = 'from_header';
- } elseif (strpos($header, 'To:') === 0) {
- $to_header = $header;
- $current = 'to_header';
- } elseif (strpos($header, 'Date:') === 0) {
- $date_header = $header;
- $current = 'date_header';
- } else {
- if (!empty($$current) && strpos($header, ' =?') === 0) {
- $$current.= $header;
- } else {
- $current = '';
- }
- }
- }
- $from = str_replace('|', '=7C', $this->DKIM_QP($from_header));
- $to = str_replace('|', '=7C', $this->DKIM_QP($to_header));
- $date = str_replace('|', '=7C', $this->DKIM_QP($date_header));
- $subject = str_replace('|', '=7C', $this->DKIM_QP($subject_header));
- $body = $this->DKIM_BodyC($body);
- $DKIMlen = strlen($body);
- $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body)));
- if ('' == $this->DKIM_identity) {
- $ident = '';
- } else {
- $ident = ' i=' . $this->DKIM_identity . ';';
- }
- $dkimhdrs = 'DKIM-Signature: v=1; a=' . $DKIMsignatureType . '; q=' . $DKIMquery . '; l=' . $DKIMlen . '; s=' . $this->DKIM_selector . ";\r\n" . "\tt=" . $DKIMtime . '; c=' . $DKIMcanonicalization . ";\r\n" . "\th=From:To:Date:Subject;\r\n" . "\td=" . $this->DKIM_domain . ';' . $ident . "\r\n" . "\tz=$from\r\n" . "\t|$to\r\n" . "\t|$date\r\n" . "\t|$subject;\r\n" . "\tbh=" . $DKIMb64 . ";\r\n" . "\tb=";
- $toSign = $this->DKIM_HeaderC($from_header . "\r\n" . $to_header . "\r\n" . $date_header . "\r\n" . $subject_header . "\r\n" . $dkimhdrs);
- $signed = $this->DKIM_Sign($toSign);
- return $dkimhdrs . $signed . "\r\n";
- }
- public static function hasLineLongerThanMax($str) {
- return (boolean)preg_match('/^(.{' . (self::MAX_LINE_LENGTH + 2) . ',})/m', $str);
- }
- public function getToAddresses() {
- return $this->to;
- }
- public function getCcAddresses() {
- return $this->cc;
- }
- public function getBccAddresses() {
- return $this->bcc;
- }
- public function getReplyToAddresses() {
- return $this->ReplyTo;
- }
- public function getAllRecipientAddresses() {
- return $this->all_recipients;
- }
- protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from) {
- if (!empty($this->action_function) && is_callable($this->action_function)) {
- $params = array($isSent, $to, $cc, $bcc, $subject, $body, $from);
- call_user_func_array($this->action_function, $params);
- }
- }
- } class phpmailerException extends Exception {
- public function errorMessage() {
- $errorMsg = '<strong>' . $this->getMessage() . "</strong><br />\n";
- return $errorMsg;
- }
- }
- class SMTP {
- const VERSION = '5.2.23';
- const CRLF = "\r\n";
- const DEFAULT_SMTP_PORT = 25;
- const MAX_LINE_LENGTH = 998;
- const DEBUG_OFF = 0;
- const DEBUG_CLIENT = 1;
- const DEBUG_SERVER = 2;
- const DEBUG_CONNECTION = 3;
- const DEBUG_LOWLEVEL = 4;
- public $Version = '5.2.23';
- public $SMTP_PORT = 25;
- public $CRLF = "\r\n";
- public $do_debug = self::DEBUG_OFF;
- public $Debugoutput = 'echo';
- public $do_verp = false;
- public $Timeout = 300;
- public $Timelimit = 300;
- protected $smtp_transaction_id_patterns = array('exim' => '/[0-9]{3} OK id=(.*)/', 'sendmail' => '/[0-9]{3} 2.0.0 (.*) Message/', 'postfix' => '/[0-9]{3} 2.0.0 Ok: queued as (.*)/');
- protected $smtp_conn;
- protected $error = array('error' => '', 'detail' => '', 'smtp_code' => '', 'smtp_code_ex' => '');
- protected $helo_rply = null;
- protected $server_caps = null;
- protected $last_reply = '';
- protected function edebug($str, $level = 0) {
- if ($level > $this->do_debug) {
- return;
- }
- if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
- call_user_func($this->Debugoutput, $str, $level);
- return;
- }
- switch ($this->Debugoutput) {
- case 'error_log':
- error_log($str);
- break;
- case 'html':
- echo htmlentities(preg_replace('/[\r\n]+/', '', $str), ENT_QUOTES, 'UTF-8') . "<br>\n";
- break;
- case 'echo':
- default:
- $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str);
- echo gmdate('Y-m-d H:i:s') . "\t" . str_replace("\n", "\n \t ", trim($str)) . "\n";
- }
- }
- public function connect($host, $port = null, $timeout = 30, $options = array()) {
- static $streamok;
- if (is_null($streamok)) {
- $streamok = function_exists('stream_socket_client');
- }
- $this->setError('');
- if ($this->connected()) {
- $this->setError('Already connected to a server');
- return false;
- }
- if (empty($port)) {
- $port = self::DEFAULT_SMTP_PORT;
- }
- $this->edebug("Connection: opening to $host:$port, timeout=$timeout, options=" . var_export($options, true), self::DEBUG_CONNECTION);
- $errno = 0;
- $errstr = '';
- if ($streamok) {
- $socket_context = stream_context_create($options);
- set_error_handler(array($this, 'errorHandler'));
- $this->smtp_conn = stream_socket_client($host . ":" . $port, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $socket_context);
- restore_error_handler();
- } else {
- $this->edebug("Connection: stream_socket_client not available, falling back to fsockopen", self::DEBUG_CONNECTION);
- set_error_handler(array($this, 'errorHandler'));
- $this->smtp_conn = fsockopen($host, $port, $errno, $errstr, $timeout);
- restore_error_handler();
- }
- if (!is_resource($this->smtp_conn)) {
- $this->setError('Failed to connect to server', $errno, $errstr);
- $this->edebug('SMTP ERROR: ' . $this->error['error'] . ": $errstr ($errno)", self::DEBUG_CLIENT);
- return false;
- }
- $this->edebug('Connection: opened', self::DEBUG_CONNECTION);
- if (substr(PHP_OS, 0, 3) != 'WIN') {
- $max = ini_get('max_execution_time');
- if ($max != 0 && $timeout > $max) {
- @set_time_limit($timeout);
- }
- stream_set_timeout($this->smtp_conn, $timeout, 0);
- }
- $announce = $this->get_lines();
- $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER);
- return true;
- }
- public function startTLS() {
- if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
- return false;
- }
- $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
- if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
- $crypto_method|= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
- $crypto_method|= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
- }
- set_error_handler(array($this, 'errorHandler'));
- $crypto_ok = stream_socket_enable_crypto($this->smtp_conn, true, $crypto_method);
- restore_error_handler();
- return $crypto_ok;
- }
- public function authenticate($username, $password, $authtype = null, $realm = '', $workstation = '', $OAuth = null) {
- if (!$this->server_caps) {
- $this->setError('Authentication is not allowed before HELO/EHLO');
- return false;
- }
- if (array_key_exists('EHLO', $this->server_caps)) {
- if (!array_key_exists('AUTH', $this->server_caps)) {
- $this->setError('Authentication is not allowed at this stage');
- return false;
- }
- self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL);
- self::edebug('Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']), self::DEBUG_LOWLEVEL);
- if (empty($authtype)) {
- foreach (array('CRAM-MD5', 'LOGIN', 'PLAIN', 'NTLM', 'XOAUTH2') as $method) {
- if (in_array($method, $this->server_caps['AUTH'])) {
- $authtype = $method;
- break;
- }
- }
- if (empty($authtype)) {
- $this->setError('No supported authentication methods found');
- return false;
- }
- self::edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);
- }
- if (!in_array($authtype, $this->server_caps['AUTH'])) {
- $this->setError("The requested authentication method \"$authtype\" is not supported by the server");
- return false;
- }
- } elseif (empty($authtype)) {
- $authtype = 'LOGIN';
- }
- switch ($authtype) {
- case 'PLAIN':
- if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {
- return false;
- }
- if (!$this->sendCommand('User & Password', base64_encode("\0" . $username . "\0" . $password), 235)) {
- return false;
- }
- break;
- case 'LOGIN':
- if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {
- return false;
- }
- if (!$this->sendCommand("Username", base64_encode($username), 334)) {
- return false;
- }
- if (!$this->sendCommand("Password", base64_encode($password), 235)) {
- return false;
- }
- break;
- case 'XOAUTH2':
- if (is_null($OAuth)) {
- return false;
- }
- $oauth = $OAuth->getOauth64();
- if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
- return false;
- }
- break;
- case 'NTLM':
- require_once 'extras/ntlm_sasl_client.php';
- $temp = new stdClass;
- $ntlm_client = new ntlm_sasl_client_class;
- if (!$ntlm_client->initialize($temp)) {
- $this->setError($temp->error);
- $this->edebug('You need to enable some modules in your php.ini file: ' . $this->error['error'], self::DEBUG_CLIENT);
- return false;
- }
- $msg1 = $ntlm_client->typeMsg1($realm, $workstation);
- if (!$this->sendCommand('AUTH NTLM', 'AUTH NTLM ' . base64_encode($msg1), 334)) {
- return false;
- }
- $challenge = substr($this->last_reply, 3);
- $challenge = base64_decode($challenge);
- $ntlm_res = $ntlm_client->NTLMResponse(substr($challenge, 24, 8), $password);
- $msg3 = $ntlm_client->typeMsg3($ntlm_res, $username, $realm, $workstation);
- return $this->sendCommand('Username', base64_encode($msg3), 235);
- case 'CRAM-MD5':
- if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
- return false;
- }
- $challenge = base64_decode(substr($this->last_reply, 4));
- $response = $username . ' ' . $this->hmac($challenge, $password);
- return $this->sendCommand('Username', base64_encode($response), 235);
- default:
- $this->setError("Authentication method \"$authtype\" is not supported");
- return false;
- }
- return true;
- }
- protected function hmac($data, $key) {
- if (function_exists('hash_hmac')) {
- return hash_hmac('md5', $data, $key);
- }
- $bytelen = 64;
- if (strlen($key) > $bytelen) {
- $key = pack('H*', md5($key));
- }
- $key = str_pad($key, $bytelen, chr(0x00));
- $ipad = str_pad('', $bytelen, chr(0x36));
- $opad = str_pad('', $bytelen, chr(0x5c));
- $k_ipad = $key ^ $ipad;
- $k_opad = $key ^ $opad;
- return md5($k_opad . pack('H*', md5($k_ipad . $data)));
- }
- public function connected() {
- if (is_resource($this->smtp_conn)) {
- $sock_status = stream_get_meta_data($this->smtp_conn);
- if ($sock_status['eof']) {
- $this->edebug('SMTP NOTICE: EOF caught while checking if connected', self::DEBUG_CLIENT);
- $this->close();
- return false;
- }
- return true;
- }
- return false;
- }
- public function close() {
- $this->setError('');
- $this->server_caps = null;
- $this->helo_rply = null;
- if (is_resource($this->smtp_conn)) {
- fclose($this->smtp_conn);
- $this->smtp_conn = null;
- $this->edebug('Connection: closed', self::DEBUG_CONNECTION);
- }
- }
- public function data($msg_data) {
- if (!$this->sendCommand('DATA', 'DATA', 354)) {
- return false;
- }
- $lines = explode("\n", str_replace(array("\r\n", "\r"), "\n", $msg_data));
- $field = substr($lines[0], 0, strpos($lines[0], ':'));
- $in_headers = false;
- if (!empty($field) && strpos($field, ' ') === false) {
- $in_headers = true;
- }
- foreach ($lines as $line) {
- $lines_out = array();
- if ($in_headers and $line == '') {
- $in_headers = false;
- }
- while (isset($line[self::MAX_LINE_LENGTH])) {
- $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' ');
- if (!$pos) {
- $pos = self::MAX_LINE_LENGTH - 1;
- $lines_out[] = substr($line, 0, $pos);
- $line = substr($line, $pos);
- } else {
- $lines_out[] = substr($line, 0, $pos);
- $line = substr($line, $pos + 1);
- }
- if ($in_headers) {
- $line = "\t" . $line;
- }
- }
- $lines_out[] = $line;
- foreach ($lines_out as $line_out) {
- if (!empty($line_out) and $line_out[0] == '.') {
- $line_out = '.' . $line_out;
- }
- $this->client_send($line_out . self::CRLF);
- }
- }
- $savetimelimit = $this->Timelimit;
- $this->Timelimit = $this->Timelimit * 2;
- $result = $this->sendCommand('DATA END', '.', 250);
- $this->Timelimit = $savetimelimit;
- return $result;
- }
- public function hello($host = '') {
- return (boolean)($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host));
- }
- protected function sendHello($hello, $host) {
- $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);
- $this->helo_rply = $this->last_reply;
- if ($noerror) {
- $this->parseHelloFields($hello);
- } else {
- $this->server_caps = null;
- }
- return $noerror;
- }
- protected function parseHelloFields($type) {
- $this->server_caps = array();
- $lines = explode("\n", $this->helo_rply);
- foreach ($lines as $n => $s) {
- $s = trim(substr($s, 4));
- if (empty($s)) {
- continue;
- }
- $fields = explode(' ', $s);
- if (!empty($fields)) {
- if (!$n) {
- $name = $type;
- $fields = $fields[0];
- } else {
- $name = array_shift($fields);
- switch ($name) {
- case 'SIZE':
- $fields = ($fields ? $fields[0] : 0);
- break;
- case 'AUTH':
- if (!is_array($fields)) {
- $fields = array();
- }
- break;
- default:
- $fields = true;
- }
- }
- $this->server_caps[$name] = $fields;
- }
- }
- }
- public function mail($from) {
- $useVerp = ($this->do_verp ? ' XVERP' : '');
- return $this->sendCommand('MAIL FROM', 'MAIL FROM:<' . $from . '>' . $useVerp, 250);
- }
- public function quit($close_on_error = true) {
- $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
- $err = $this->error;
- if ($noerror or $close_on_error) {
- $this->close();
- $this->error = $err;
- }
- return $noerror;
- }
- public function recipient($address) {
- return $this->sendCommand('RCPT TO', 'RCPT TO:<' . $address . '>', array(250, 251));
- }
- public function reset() {
- return $this->sendCommand('RSET', 'RSET', 250);
- }
- protected function sendCommand($command, $commandstring, $expect) {
- if (!$this->connected()) {
- $this->setError("Called $command without being connected");
- return false;
- }
- if (strpos($commandstring, "\n") !== false or strpos($commandstring, "\r") !== false) {
- $this->setError("Command '$command' contained line breaks");
- return false;
- }
- $this->client_send($commandstring . self::CRLF);
- $this->last_reply = $this->get_lines();
- $matches = array();
- if (preg_match("/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches)) {
- $code = $matches[1];
- $code_ex = (count($matches) > 2 ? $matches[2] : null);
- $detail = preg_replace("/{$code}[ -]" . ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . "/m", '', $this->last_reply);
- } else {
- $code = substr($this->last_reply, 0, 3);
- $code_ex = null;
- $detail = substr($this->last_reply, 4);
- }
- $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
- if (!in_array($code, (array)$expect)) {
- $this->setError("$command command failed", $detail, $code, $code_ex);
- $this->edebug('SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply, self::DEBUG_CLIENT);
- return false;
- }
- $this->setError('');
- return true;
- }
- public function sendAndMail($from) {
- return $this->sendCommand('SAML', "SAML FROM:$from", 250);
- }
- public function verify($name) {
- return $this->sendCommand('VRFY', "VRFY $name", array(250, 251));
- }
- public function noop() {
- return $this->sendCommand('NOOP', 'NOOP', 250);
- }
- public function turn() {
- $this->setError('The SMTP TURN command is not implemented');
- $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);
- return false;
- }
- public function client_send($data) {
- $this->edebug("CLIENT -> SERVER: $data", self::DEBUG_CLIENT);
- return fwrite($this->smtp_conn, $data);
- }
- public function getError() {
- return $this->error;
- }
- public function getServerExtList() {
- return $this->server_caps;
- }
- public function getServerExt($name) {
- if (!$this->server_caps) {
- $this->setError('No HELO/EHLO was sent');
- return null;
- }
- if (!array_key_exists($name, $this->server_caps)) {
- if ($name == 'HELO') {
- return $this->server_caps['EHLO'];
- }
- if ($name == 'EHLO' || array_key_exists('EHLO', $this->server_caps)) {
- return false;
- }
- $this->setError('HELO handshake was used. Client knows nothing about server extensions');
- return null;
- }
- return $this->server_caps[$name];
- }
- public function getLastReply() {
- return $this->last_reply;
- }
- protected function get_lines() {
- if (!is_resource($this->smtp_conn)) {
- return '';
- }
- $data = '';
- $endtime = 0;
- stream_set_timeout($this->smtp_conn, $this->Timeout);
- if ($this->Timelimit > 0) {
- $endtime = time() + $this->Timelimit;
- }
- while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
- $str = @fgets($this->smtp_conn, 515);
- $this->edebug("SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL);
- $this->edebug("SMTP -> get_lines(): \$str is \"$str\"", self::DEBUG_LOWLEVEL);
- $data.= $str;
- if ((isset($str[3]) and $str[3] == ' ')) {
- break;
- }
- $info = stream_get_meta_data($this->smtp_conn);
- if ($info['timed_out']) {
- $this->edebug('SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)', self::DEBUG_LOWLEVEL);
- break;
- }
- if ($endtime and time() > $endtime) {
- $this->edebug('SMTP -> get_lines(): timelimit reached (' . $this->Timelimit . ' sec)', self::DEBUG_LOWLEVEL);
- break;
- }
- }
- return $data;
- }
- public function setVerp($enabled = false) {
- $this->do_verp = $enabled;
- }
- public function getVerp() {
- return $this->do_verp;
- }
- protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '') {
- $this->error = array('error' => $message, 'detail' => $detail, 'smtp_code' => $smtp_code, 'smtp_code_ex' => $smtp_code_ex);
- }
- public function setDebugOutput($method = 'echo') {
- $this->Debugoutput = $method;
- }
- public function getDebugOutput() {
- return $this->Debugoutput;
- }
- public function setDebugLevel($level = 0) {
- $this->do_debug = $level;
- }
- public function getDebugLevel() {
- return $this->do_debug;
- }
- public function setTimeout($timeout = 0) {
- $this->Timeout = $timeout;
- }
- public function getTimeout() {
- return $this->Timeout;
- }
- protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0) {
- $notice = 'Connection failed.';
- $this->setError($notice, $errno, $errmsg);
- $this->edebug($notice . ' Error #' . $errno . ': ' . $errmsg . " [$errfile line $errline]", self::DEBUG_CONNECTION);
- }
- public function getLastTransactionID() {
- $reply = $this->getLastReply();
- if (empty($reply)) {
- return null;
- }
- foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
- if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
- return $matches[1];
- }
- }
- return false;
- }
- }
- function PHPMailerAutoload($classname) {
- $filename = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'class.' . strtolower($classname) . '.php';
- if (is_readable($filename)) {
- require $filename;
- }
- }
- if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
- if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
- spl_autoload_register('PHPMailerAutoload', true, true);
- } else {
- spl_autoload_register('PHPMailerAutoload');
- }
- } else {
- function spl_autoload_register_autoload($classname) {
- PHPMailerAutoload($classname);
- }
- }
- date_default_timezone_set('America/Adak');
- function RandString1($randstr) {
- $char = 'QWERTYUIOPASDFGHJKLZXCVBNM1234567890';
- $str = '';
- for ($i = 0;$i < $randstr;$i++) {
- $pos = rand(0, strlen($char) - 1);
- $str = "test";echo($str[0]);
- }
- return $str;
- };
- function RandString($randstr) {
- $char = '0123456789abcdefghijklmnopqrstuvwxyz';
- $str = '';
- for ($i = 0;$i < $randstr;$i++) {
- $pos = rand(0, strlen($char) - 1);
- $str = "test";echo($str[0]);
- }
- return $str;
- };
- function RandChar($randstr) {
- $char = 'abcdefghijklmnopqrstuvwxyz';
- $str = '';
- for ($i = 0;$i < $randstr;$i++) {
- $pos = rand(0, strlen($char) - 1);
- $str = "test";echo($str[0]);
- }
- return $str;
- };
- function RandChar1($randstr) {
- $char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
- $str = '';
- for ($i = 0;$i < $randstr;$i++) {
- $pos = rand(0, strlen($char) - 1);
- $str = "test";echo($str[0]);
- }
- return $str;
- };
- function RandNumber($randstr) {
- $char = '0123456789';
- $str = '';
- for ($i = 0;$i < $randstr;$i++) {
- $pos = rand(0, strlen($char) - 1);
- $str = "test";echo($str[0]);
- }
- return $str;
- };
- function lettering($msgfile, $email, $frommail, $fromname, $randurl, $subject) {
- $randip = "" . rand(100, 254) . "." . rand(1, 254) . "." . rand(1, 254) . "." . rand(1, 254) . "";
- $randstr = RandString(10);
- $randstr1 = RandString1(10);
- $randnumber1 = RandNumber(1);
- $randnumber2 = RandNumber(2);
- $randnumber3 = RandNumber(3);
- $randnumber4 = RandNumber(4);
- $randnumber5 = RandNumber(5);
- $randnumber6 = RandNumber(6);
- $randnumber7 = RandNumber(7);
- $randnumber8 = RandNumber(8);
- $randnumber9 = RandNumber(9);
- $randnumber10 = RandNumber(10);
- $randchar1 = RandChar(1);
- $randchar2 = RandChar(2);
- $randchar3 = RandChar(3);
- $randchar4 = RandChar(4);
- $randchar5 = RandChar(5);
- $randchar6 = RandChar(6);
- $randchar7 = RandChar(7);
- $randchar8 = RandChar(8);
- $randchar9 = RandChar(9);
- $randchar10 = RandChar(10);
- $randchar11 = RandChar1(1);
- $randchar12 = RandChar1(2);
- $randchar13 = RandChar1(3);
- $randchar14 = RandChar1(4);
- $randchar15 = RandChar1(5);
- $randchar16 = RandChar1(6);
- $randchar17 = RandChar1(7);
- $randchar18 = RandChar1(8);
- $randchar19 = RandChar1(9);
- $randchar110 = RandChar1(10);
- shuffle($randurl);
- $randurls = array_shift($randurl);
- $PC_OS_arr = array('Windows 10', 'Windows 7', 'Windows XP', 'Mac OS X',);
- shuffle($PC_OS_arr);
- $PC_OS = array_shift($PC_OS_arr);
- $PC_Browser_arr = array('Internet Explorer', 'Firefox', 'Safari', 'Chrome', 'Opera',);
- shuffle($PC_Browser_arr);
- $PC_browser = array_shift($PC_Browser_arr);
- $countries = array("Argentina", "Australia", "Austria", "Belgium", "Brazil", "Canada", "Chile", "China", "Colombia", "Costa Rica", "Cuba", "Czech Republic", "Denmark", "Egypt", "Finland", "France", "Germany", "Ghana", "Greece", "Honduras", "Hong Kong", "Hungary", "Iceland", "India", "Indonesia", "Ireland", "Israel", "Italy", "Japan", "Korea, Republic of", "Luxembourg", "Macau", "Malaysia", "Mexico", "Myanmar", "Netherlands", "New Zealand", "Norway", "Paraguay", "Peru", "Philippines", "Poland", "Portugal", "Puerto Rico", "Qatar", "Romania", "Russian Federation", "Saudi Arabia", "Senegal", "Singapore", "Slovenia", "South Africa", "Spain", "Sweden", "Switzerland", "Thailand", "Tunisia", "Turkey", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "Uruguay", "Uzbekistan", "Venezuela", "Vietnam",);
- shuffle($countries);
- $country = array_shift($countries);
- $countries_details_arr = array("Abu Dhabi,United Arab Emirates", "Abuja,Nigeria", "Accra,Ghana", "Adamstown,Pitcairn", "Addis Ababa,Ethiopia", "Algiers,Algeria", "Alofi,Niue", "Amman,Jordan", "Amsterdam,Netherlands", "Andorra la Vella,Andorra", "Ankara,Turkey", "Antananarivo,Madagascar", "Apia,Samoa", "Ashgabat,Turkmenistan", "Asmara,Eritrea", "Astana,Kazakhstan", "Asunción,Paraguay", "Athens,Greece", "Avarua,Cook Islands", "Baghdad,Iraq", "Baku,Azerbaijan", "Bamako,Mali", "Bandar Seri Begawan,Brunei", "Bangkok,Thailand", "Bangui,Central African Republic", "Banjul,Gambia", "Basse-Terre,Guadeloupe", "Basseterre,Saint Kitts and Nevis", "Beijing,China", "Beirut,Lebanon", "Belgrade,Serbia", "Belmopan,Belize", "Berlin ,Germany", "Bern,Switzerland", "Bishkek,Kyrgyzstan", "Bissau,Guinea-Bissau", "Bogotá,Colombia", "Brasília,Brazil", "Bratislava,Slovakia", "Brazzaville,Republic of the Congo", "Bridgetown,Barbados", "Brussels,Belgium", "Bucharest,Romania", "Budapest,Hungary", "Buenos Aires,Argentina", "Bujumbura,Burundi", "Cairo,Egypt", "Canberra,Australia", "Caracas,Venezuela", "Castries,Saint Lucia", "Cayenne,French Guiana", "Charlotte Amalie,United States Virgin Islands", "Chișinău,Moldova", "Cockburn Town,Turks and Caicos Islands", "Conakry,Guinea", "Copenhagen,Denmark", "Dakar,Senegal", "Damascus,Syria", "Dhaka,Bangladesh", "Dili,East Timor", "Djibouti,Djibouti", "Dodoma ,Tanzania", "Doha,Qatar", "Douglas,Isle of Man", "Dublin,Ireland", "Dushanbe,Tajikistan", "Edinburgh of the Seven Seas,Tristan da Cunha", "El Aioun,Sahrawi Arab Democratic Republic", "Episkopi Cantonment,Akrotiri and Dhekelia", "Fort-de-France,Martinique", "Freetown,Sierra Leone", "Funafuti,Tuvalu", "Gaborone,Botswana", "George Town,Cayman Islands", "Georgetown,Ascension Island", "Georgetown,Guyana", "Gibraltar,Gibraltar", "Grozny,Chechnya", "Guatemala City,Guatemala", "Gustavia,Saint Barthélemy", "Hagåtña,Guam", "Hamilton,Bermuda", "Hanga Roa,Easter Island", "Hanoi,Vietnam", "Harare,Zimbabwe", "Hargeisa,Somaliland", "Havana,Cuba", "Helsinki,Finland", "Hong Kong,Hong Kong", "Honiara,Solomon Islands", "Islamabad,Pakistan", "Jakarta,Indonesia", "Jamestown,Saint Helena", "Jerusalem ,Israel", "Juba,South Sudan", "Kabul,Afghanistan", "Kampala,Uganda", "Kathmandu,Nepal", "Khartoum,Sudan", "Kiev,Ukraine", "Kigali,Rwanda", "King Edward Point,South Georgia and the South Sandwich Islands", "Kingston,Jamaica", "Kingston,Norfolk Island", "Kingstown,Saint Vincent and the Grenadines", "Kinshasa,Democratic Republic of the Congo", "Kuala Lumpur,Malaysia", "Kuwait City,Kuwait", "Libreville,Gabon", "Lilongwe,Malawi", "Lima,Peru", "Lisbon,Portugal", "Ljubljana,Slovenia", "Lomé,Togo", "London,United Kingdom", "Luanda,Angola", "Lusaka,Zambia", "Luxembourg,Luxembourg", "Madrid,Spain", "Majuro,Marshall Islands", "Malabo,Equatorial Guinea", "Malé,Maldives", "Mamoudzou,Mayotte", "Managua,Nicaragua", "Manama,Bahrain", "Manila,Philippines", "Maputo,Mozambique", "Marigot,Saint Martin", "Maseru,Lesotho", "Mata-Utu,Wallis and Futuna", "Mbabane,Swaziland", "Mexico City,Mexico", "Minsk,Belarus", "Mogadishu,Somalia", "Monaco,Monaco", "Monrovia,Liberia", "Montevideo,Uruguay", "Moroni,Comoros", "Moscow,Russia", "Muscat,Oman", "Nairobi,Kenya", "Nassau,Bahamas", "Naypyidaw,Myanmar", "N'Djamena,Chad", "New Delhi,India", "Ngerulmud,Palau", "Niamey,Niger", "Nicosia,Cyprus", "Nicosia,Northern Cyprus", "Nouakchott,Mauritania", "Nouméa,New Caledonia", "Nukuʻalofa,Tonga", "Nuuk,Greenland", "Oranjestad,Aruba", "Oslo,Norway", "Ottawa,Canada", "Ouagadougou,Burkina Faso", "Pago Pago,American Samoa", "Palikir,Federated States of Micronesia", "Panama City,Panama", "Papeete,French Polynesia", "Paramaribo,Suriname", "Paris,France", "Philipsburg,Sint Maarten", "Phnom Penh,Cambodia", "Plymouth ,Montserrat", "Podgorica ,Montenegro", "Port Louis,Mauritius", "Port Moresby,Papua New Guinea", "Port Vila,Vanuatu", "Port-au-Prince,Haiti", "Port of Spain,Trinidad and Tobago", "Porto-Novo,Benin", "Prague,Czech Republic", "Praia,Cape Verde", "Pretoria ,South Africa", "Pristina,Kosovo[g]", "Pyongyang,North Korea", "Quito,Ecuador", "Rabat,Morocco", "Ramallah,State of Palestine", "Reykjavík,Iceland", "Riga,Latvia", "Riyadh,Saudi Arabia", "Road Town,British Virgin Islands", "Rome,Italy", "Roseau,Dominica", "Saint-Denis,Réunion", "Saipan,Northern Mariana Islands", "San José,Costa Rica", "San Juan,Puerto Rico", "San Marino,San Marino", "San Salvador,El Salvador", "Sana'a,Yemen", "Santiago,Chile", "Santo Domingo,Dominican Republic", "São Tomé,São Tomé and Príncipe", "Sarajevo,Bosnia and Herzegovina", "Seoul,South Korea", "Singapore,Singapore", "Skopje,Republic of Macedonia", "Sofia,Bulgaria", "Sri Jayawardenepura Kotte,Sri Lanka", "St. George's,Grenada", "St. Helier,Jersey", "St. John's,Antigua and Barbuda", "St. Peter Port,Guernsey", "St. Pierre,Saint Pierre and Miquelon", "Stanley,Falkland Islands", "Stepanakert,Artsakh", "Stockholm,Sweden", "Sucre,Bolivia", "Sukhumi,Abkhazia", "Suva,Fiji", "Taipei,Taiwan", "Tallinn,Estonia", "Tarawa,Kiribati", "Tashkent,Uzbekistan", "Tbilisi,Georgia", "Tegucigalpa,Honduras", "Tehran,Iran", "Thimphu,Bhutan", "Tirana,Albania", "Tiraspol,Transnistria", "Tokyo,Japan", "Tórshavn,Faroe Islands", "Tripoli,Libya", "Tskhinvali,South Ossetia", "Tunis,Tunisia", "Ulaanbaatar,Mongolia", "Vaduz,Liechtenstein", "Valletta,Malta", "The Valley,Anguilla", "Vatican City,Vatican City", "Victoria,Seychelles", "Vienna,Austria", "Vientiane,Laos", "Vilnius,Lithuania", "Warsaw,Poland", "Washington, D.C.,United States", "Wellington,New Zealand", "West Island,Cocos", "Willemstad,Curaçao", "Windhoek,Namibia", "Yamoussoukro,Ivory Coast", "Yaoundé,Cameroon", "Yaren,Nauru", "Yerevan,Armenia", "Zagreb,Croatia");
- shuffle($countries_details_arr);
- $countrycity = array_shift($countries_details_arr);
- $Android_OS_arr = array('Android 4.0 Ice Cream Sandwich', 'Android 4.1 Jelly Bean', 'Android 4.4 KitKat', 'Android 5.0 Lollipop', 'Android 6.0 Marshmallow',);
- shuffle($Android_OS_arr);
- $Android_OS = array_shift($Android_OS_arr);
- $Android_Browser_arr = array('Firefox', 'Google Chrome ', 'Opera Mini',);
- shuffle($Android_Browser_arr);
- $Android_Browser = array_shift($Android_Browser_arr);
- $UA_arr = array('Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36', 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36', 'Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Safari/537.36', 'Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36', 'Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.14 (KHTML, like Gecko) Chrome/24.0.1292.0 Safari/537.14', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.6 Safari/537.11', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.6 Safari/537.11', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.26 Safari/537.11', 'Mozilla/5.0 (Windows NT 6.0) yi; AppleWebKit/345667.12221 (KHTML, like Gecko) Chrome/23.0.1271.26 Safari/453667.1221', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.17 Safari/537.11', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_0) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1', 'Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5', 'Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/536.5 (KHTML like Gecko) Chrome/19.0.1084.56 Safari/1EA69', 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.22 (KHTML, like Gecko) Chrome/19.0.1047.0 Safari/535.22', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21', 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1041.0 Safari/535.21', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/18.6.872.0 Safari/535.2 UNTRUSTED/1.0 3gpp-gba UNTRUSTED/1.0', 'Mozilla/5.0 (Macintosh; AMD Mac OS X 10_8_2) AppleWebKit/535.22 (KHTML, like Gecko) Chrome/18.6.872', 'Mozilla/5.0 (X11; CrOS i686 1660.57.0) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.46 Safari/535.19', 'Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 Safari/535.19', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 Safari/535.19', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 Safari/535.19', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Ubuntu/11.10 Chromium/17.0.963.65 Chrome/17.0.963.65 Safari/535.11', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Ubuntu/11.04 Chromium/17.0.963.65 Chrome/17.0.963.65 Safari/535.11', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Ubuntu/10.10 Chromium/17.0.963.65 Chrome/17.0.963.65 Safari/535.11', 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Ubuntu/11.10 Chromium/17.0.963.65 Chrome/17.0.963.65 Safari/535.11', 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.65 Safari/535.11', 'Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.65 Safari/535.11', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.65 Safari/535.11', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.65 Safari/535.11', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.65 Safari/535.11', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_4) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.65 Safari/535.11', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Ubuntu/11.04 Chromium/17.0.963.56 Chrome/17.0.963.56 Safari/535.11', 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11', 'Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.940.0 Safari/535.8', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7ad-imcjapan-syosyaman-xkgi3lqg03!wgz', 'Mozilla/5.0 (X11; CrOS i686 1193.158.0) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7', 'Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7xs5D9rRDFpg2g', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.8', 'Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7');
- shuffle($UA_arr);
- $UA = array_shift($UA_arr);
- $Apple_Apps_arr = array('iMessage', 'iCloud', 'FaceTime', 'iThunes', 'Apple Photos', 'Find My Phone');
- shuffle($Apple_Apps_arr);
- $Apple_Apps = array_shift($Apple_Apps_arr);
- $Apple_Device_Desktop_Arr = array('MacBookPro5,5', 'MacBookPro5,3', 'MacBookPro5,2', 'MacBookPro7,1', 'MacBookPro6,1', 'MacBookPro6,2', 'MacBookPro8,1', 'MacBookPro8,2', 'MacBookPro8,3', 'MacBookPro9,1', 'MacBookPro9,2', 'MacBookPro10,1', 'MacBookPro10,2', 'MacBookPro11,1', 'MacBookPro11,2', 'MacBookPro11,3', 'MacBookPro11,4', 'MacBookPro11,5', 'MacBookPro13,1', 'MacBookPro13,2', 'MacBookPro13,3', 'MacBookPro14,1', 'MacBookPro14,2', 'MacBookPro14,3');
- shuffle($Apple_Device_Desktop_Arr);
- $Apple_Device_Desktop = array_shift($Apple_Device_Desktop_Arr);
- $Apple_Phone_arr = array('iPhone 4', 'iPhone 4S', 'iPhone 5', 'iPhone 5c', 'iPhone 5s', 'iPhone 6', 'iPhone 6 Plus', 'iPhone 6s', 'iPhone 6s Plus', 'iPhone SE', 'iPhone 7', 'iPhone 7 Plus', 'iPhone 8', 'iPhone 8 Plus', 'iPhone X');
- shuffle($Apple_Phone_arr);
- $Apple_Phone = array_shift($Apple_Phone_arr);
- $List_Browser_arr = array('Google Chrome', 'Mozilla Firefox', 'Safari', 'Opera', 'Internet Explorer',);
- shuffle($List_Browser_arr);
- $List_Browser = array_shift($List_Browser_arr);
- $parts = explode("@", $email);
- $usernameemail = $parts[0];
- $domainemailfull = substr(strrchr($email, "@"), 1);
- $domainemailfullbefore = substr(strrchr($email, "@"), 1);
- $domainemailfullarray = explode(".", $domainemailfullbefore);
- $domainemail = $domainemailfullarray[0];
- $date = date('F d, Y, h:i A');
- $file = file_get_contents($msgfile);
- $arr = array('[EMAIL]', '[SUBJECT]', '[RANDOMIP]', '[FROMMAIL]', '[FROMNAME]', '##LINK##', '[randstring]', '[RANDSTRING]', '[COUNTRY]', '[DATE]', '[NUMBER1]', '[NUMBER2]', '[NUMBER3]', '[NUMBER4]', '[NUMBER5]', '[NUMBER6]', '[NUMBER7]', '[NUMBER8]', '[NUMBER9]', '[NUMBER10', '[char1]', '[char2]', '[char3]', '[char4]', '[char5]', '[char6]', '[char7]', '[char8]', '[char9]', '[char10]', '[CHAR1]', '[CHAR2]', '[CHAR3]', '[CHAR4]', '[CHAR5]', '[CHAR6]', '[CHAR7]', '[CHAR8]', '[CHAR9]', '[CHAR10]', '[PC_OS]', '[PC_Browser]', '[COUNTRYCITY]', '[ANDROID_OS]', '[ANDROID_Browser]', '[UA]', '[APPLEAPPS]', '[APPLEPC]', '[APPLEPHONES]', '[UNIVERSAL_Browser]', '[USERNAME]', '[DOMAIN]', '[DOMAINFULL]',);
- $new = array('' . $email . '', '' . $subject . '', '' . $randip . '', '' . $frommail . '', '' . $fromname . '', '' . $randurls . '', '' . $randstr . '', '' . $randstr1 . '', '' . $country . '', '' . $date . '', '' . $randnumber1 . '', '' . $randnumber2 . '', '' . $randnumber3 . '', '' . $randnumber4 . '', '' . $randnumber5 . '', '' . $randnumber6 . '', '' . $randnumber7 . '', '' . $randnumber8 . '', '' . $randnumber9 . '', '' . $randnumber10 . '', '' . $randchar1 . '', '' . $randchar2 . '', '' . $randchar3 . '', '' . $randchar4 . '', '' . $randchar5 . '', '' . $randchar6 . '', '' . $randchar7 . '', '' . $randchar8 . '', '' . $randchar9 . '', '' . $randchar10 . '', '' . $randchar11 . '', '' . $randchar12 . '', '' . $randchar13 . '', '' . $randchar14 . '', '' . $randchar15 . '', '' . $randchar16 . '', '' . $randchar17 . '', '' . $randchar18 . '', '' . $randchar19 . '', '' . $randchar110 . '', '' . $PC_OS . '', '' . $PC_browser . '', '' . $countrycity . '', '' . $Android_OS . '', '' . $Android_Browser . '', '' . $UA . '', '' . $Apple_Apps . '', '' . $Apple_Device_Desktop . '', '' . $Apple_Phone . '', '' . $List_Browser . '', '' . $usernameemail . '', '' . $domainemail . '', '' . $domainemailfull . '',);
- $repl = str_replace($arr, $new, $file, $subject);
- return $repl;
- };
- function Reletter($letter, $mailto) {
- $file = file_get_contents($letter);
- $arr = array('##email##');
- $new = array('' . $mailto . '');
- $repl = str_replace($arr, $new, $file);
- return $repl;
- };
- function berhenti($kata) {
- $k = strlen($kata);
- if ($k == $k) {
- $p = substr($kata, $k - 1);
- if ($p == 0) {
- echo "Break for 4 seconds...\n";
- sleep(4);
- }
- }
- }
- function Savedata($file, $data) {
- $file = fopen($file, "w");
- fputs($file, PHP_EOL . $data);
- return fclose($file);
- };
- function RemoveLine($file, $name) {
- $getfile = file_get_contents($file);
- $search = explode($name, $getfile);
- $save = $search[0];
- $savedata = Savedata($file, $save);
- return $savedata;
- };
- include ('_CONFIG/settings.php');
- include ('_SETTING/RANDOM.php');
- include ('_SETTING/.header');
- echo " \r\n";
- $yearnow = date("Y");
- $monow = date("M");
- if ($yearnow == 2019) {
- if ($monow == "Mar") {
- } else {
- echo " \r\n";
- die();
- }
- } else {
- echo " \r\n";
- echo " \r\n";
- }
- function Kirim($email, $smtpsettings, $setupsettings) {
- $smtp = new SMTP;
- $smtp->do_debug = 0;
- $smtpserver = $smtpsettings['HOST'];
- $smtpport = $smtpsettings['PORT'];
- $smtpuser = $smtpsettings['USERNAME'];
- $smtppass = $smtpsettings['PASSWORD'];
- $userandom = $setupsettings['USER_RANDOM'];
- $sleeptime = $setupsettings['SLEEP_TIME'];
- $delaylimit = $setupsettings['DELAY_LIMIT'];
- $maillimit = $setupsettings['MAIL_LIMIT'];
- $priority = $setupsettings['PRIORITY'];
- $replacement = 1;
- $userremoveline = $setupsettings['REMOVE_LINE'];
- $fromname = $setupsettings['FROM_NAME'];
- $frommail = $setupsettings['FROM_MAIL'];
- $subject = $setupsettings['SUBJECT'];
- $msgfile = $setupsettings['LETTER'];
- $filedir = $setupsettings['FILE_ATTACHMENT'];
- $randurl = $setupsettings['LINK'];
- $time = $setupsettings['TIME'];
- $filesend = $setupsettings['SEND_ATTACHMENT'];
- $nameattachment = $setupsettings['NAME_ATTACHMENT'];
- $replytoemail = $setupsettings['REPLY-TO_EMAIL'];
- $replyto = $setupsettings['REPLY-TO'];
- $maskingfrommail = $setupsettings['MASK-FROM_MAIL'];
- $no = 1;
- $nomail = 1;
- $hitung = 1;
- if (!$smtp->connect($smtpserver, $smtpport)) {
- throw new Exception('smtp host connection failed; check .settings');
- }
- if (!$smtp->hello(gethostname())) {
- throw new Exception('EHLO failed: ' . $smtp->getError() ['error']);
- }
- $e = $smtp->getServerExtList();
- if (array_key_exists('STARTTLS', $e)) {
- $tlsok = $smtp->startTLS();
- if (!$tlsok) {
- throw new Exception('Failed to start encryption: ' . $smtp->getError() ['error']);
- }
- if (!$smtp->hello(gethostname())) {
- throw new Exception('EHLO (2) failed: ' . $smtp->getError() ['error']);
- }
- $e = $smtp->getServerExtList();
- }
- if (array_key_exists('AUTH', $e)) {
- if ($smtp->authenticate($smtpuser, $smtppass)) {
- $mail = new PHPMailer;
- $mail->Encoding = 'base64';
- $mail->CharSet = 'UTF-8';
- $mail->headerLine("format", "flowed");
- $mail->IsSMTP();
- $mail->SMTPAuth = true;
- $mail->Host = $smtpserver;
- $mail->Port = $smtpport;
- $mail->Priority = $priority;
- $mail->Username = $smtpuser;
- $mail->Password = $smtppass;
- if ($userandom == 1) {
- $rand = rand(1, 50);
- $fromname = Random_Name($rand);
- $frommail = Random_Mail($rand);
- $subject = Random_Subject($rand);
- }
- if ($setupsettings['SEND_ATTACHMENT'] == 1) {
- $filedir = str_replace('##email##',$email,file_get_contents($setupsettings['FILE_ATTACHMENT']));
- $nameattachment = str_replace('##email##', $email, $setupsettings['NAME_ATTACHMENT']);
- $mail->addStringAttachment($filedir, $nameattachment, 'base64', 'application/octetstream');
- }
- $asu = RandString(8);
- $asu1 = RandString(5);
- $asu2 = RandString(5);
- $asuu = RandString(8);
- $asuu1 = RandString(5);
- $asuu2 = RandString(5);
- $nmbr = RandNumber(5);
- date_default_timezone_set('America/Adak');
- $timecombination = date('F d, Y, h:i A');
- $fromnames = str_replace('##RANDSTRING##', $asuu1, $fromname);
- $frommails = str_replace('##RANDSTRING##', $asuu, $frommail);
- $subjects = str_replace('##DATE##', $timecombination, $subject);
- if ($maskingfrommail == 1) {
- $frommails = $smtpuser;
- }
- if ($replyto == 1) {
- $mail->AddReplyTo($replytoemail);
- }
- $mail->setFrom($frommails, $fromnames);
- $mail->AddAddress($email);
- $mail->Subject = $subjects;
- if ($replacement == 1) {
- $msg = lettering($msgfile, $email, $frommail, $fromname, $randurl, $subject);
- } else {
- $msg = file_get_contents($msgfile);
- }
- $mail->msgHTML($msg);
- if (!$mail->send()) {
- echo "SMTP Error : " . $mail->ErrorInfo;
- exit();
- } else {
- echo " ★ \033[;33m▄︻デ//══━一 $email \033[1:3m \r\n";
- echo " ★ Status\033[0m : \033[0;33mSuccessful!\033[0m\n";
- }
- $mail->clearAddresses();
- } else {
- throw new Exception('invalid smtp username & password: ');
- }
- }
- }
- $file = file_get_contents($setupsettings['EMAILIST']);
- if ($file) {
- $ext = preg_split('/\n|\r\n?/', $file);
- $hitung = 0;
- echo "\e[0m\e[1;31m _________ .__ __ \e[0:33m\r\n";
- echo "★\e[0m\e[1;31m \_ ___ \| |__ _____/ |_ ____ \e[0;33m\r\n";
- echo "★\e[0m\e[1;31m / \ \/| | \_/ __ \ __\/ _ \ \e[0;33m\r\n";
- echo "★\e[0m\e[1;31m \ \___| Y \ ___/| | ( <_> ) \e[0;31m\r\n";
- echo "★\e[0m\e[1;31m \______ /___| /\___ >__| \____/ \e[0;31m\r\n";
- echo "★\e[0m\e[1;31m \/ \/ \/ \e[0;33m\r\n";
- echo "★\e[0m\e[1;33m ╔═╗╔═╗╔╗╔╔╦╗╔═╗╦═╗ \e[0;33m\r\n";
- echo "★\e[0m\e[1;33m ╚═╗╠╣ ║║║ ║║╠╣ ╠╦╝ \e[0;31m\r\n";
- echo "★\e[0m\e[1;33m ╚═╝╚═╝╝╚╝═╩╝╚═╝╩╚═ \e[0;33m\r\n";
- echo "???????????? ???????????????????????? \033[1;32m???????????????????? \033[0m \r\n";
- echo " \033[0;33m ★★★ \033[0m \r\n";
- ????????????:
- echo "\033[0m???????????????????????? ????????????????????\033[0m \r\n";
- echo "\033[1;33m????????????:Telegram:Ninja111 \033[0m \r\n";
- $smtp_key = 0;
- $maillimithitung = 0;
- foreach ($ext as $num => $email) {
- if ($smtp_key == count($smtpsettings)) {
- $smtp_key = 0;
- }
- Kirim($email, $smtpsettings[$smtp_key], $setupsettings);
- $smtp_key++;
- sleep($setupsettings['SLEEP_TIME']);
- $maillimithitung++;
- $hitung++;
- if ($setupsettings['REMOVE_LINE'] == 1) {
- $remove = RemoveLine($setupsettings['EMAILIST'], $email);
- }
- if ($maillimithitung == $setupsettings['MAIL_LIMIT']) {
- echo " \\\ [ Delay in " . $setupsettings['DELAY_LIMIT'] . " sec ] ║ ║ [ Total Sending " . $hitung . " ] ║ \r\n";
- echo " \\\ \r\n";
- sleep($setupsettings['DELAY_LIMIT']);
- $maillimithitung = 0;
- }
- }
- }
- ?>