对接API实现微信域名报毒自动推送邮箱

<?php
/*
* 域名检测异常自动邮件推送
*/
//SMTP 服务器地址
$smtp  = 'smtp.qq.com';
//发信邮箱账号
$mailname  = '';
//发信邮箱密码
$mailpass  = '';
//收信邮箱地址
$formail  = '';

//您要检测的域名
$url     =  'http://baidu.com/';
//您的Token
//前往http://check.uomg.com/获取
$token    =    '';

$content = get_check($token,$url);
$data = json_decode($content,true);

if($data['code'] == 200){
    echo "域名正常";
}else{
    $x = new SMTP($smtp,25,true,$mailname,$mailpass);
    $x->send_mail(
        $formail 
        , '域名检测结果'
        , '域名:'. $url . '<br />' . $data['msg']
    );
    echo $data['msg'];
}

function get_check($token,$domain){
    $url = 'https://check.uomg.com/api/urlsec/vx?';
    $url .= http_build_query(array(
        'token'        =>    $token
        ,'domain'    =>    $domain
    ));
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_TIMEOUT,5);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
    $data = curl_exec($ch);
    if($data){
        curl_close($ch);
        return $data;
    }else {
        $error = curl_errno($ch);
        curl_close($ch);
        return false;
    }
}



class SMTP {
    public $smtp_port;
    public $time_out;
    public $host_name;
    public $log_file;
    public $part_boundary = '--PART-BOUNDARY-ID-WRG11-Y4RD1-5AS1D-RE4D1-AF1EG---';
    public $relay_host;
    public $debug;
    public $auth;
    public $user;
    public $pass;
    public $sock;
    public $log;
    public $error;
    public $att = array(); //附件内容
    public $ssl = false;

    public function __construct($relay_host = '', $smtp_port = 25, $auth = false, $user, $pass , $ssl = false) {
        $this ->debug = false;
        $this ->smtp_port = $smtp_port;
        if ($ssl == true) {
            $this->ssl = true;
            $relay_host = 'ssl://' . $relay_host;
        }
        $this ->relay_host = $relay_host;
        $this ->time_out = 30;
        $this ->auth = $auth;
        $this ->user = $user;
        $this ->pass = $pass;
        $this ->host_name = "localhost";
        $this ->log_file = "";
    }
    public function send_mail($to, $sub, $msg) {
        $this->att = array();
        if(self::send($to , $this ->user , $sub , $msg, '优启梦')) {
          return 1;
        } else {
          return $this->log;
        }
    }
    /**
     * 添加一个附件
     * @param string $name 文件名
     * @param string $value 文件内容
     */ 
    public function addatt($name , $value = '') {
        $this->att[$name] = $value;
    }

    public function send($to, $from, $subject = "", $body = "", $fromname = "RedUrl", $reply = '', $cc = "", $bcc = "", $additional_headers = "") {
        if (empty($reply)) {
            $reply = $from;
        }
        $header = "";
        $mail_from = $this ->get_address($this ->strip_comment($from));
        $from = "=?UTF-8?B?".base64_encode($fromname)."?= " . "<$from>";
        $body = mb_ereg_replace("(^|(\r\n))(\\.)", "\\1.\\3", $body);
        $header .= "MIME-Version:1.0\r\n";
        $header .= 'Content-Type: multipart/mixed; boundary="'.$this->part_boundary.'"' . "\r\n";
        $header .= "To: " . $to . "\r\n";
        if ($cc!="") $header .= "Cc: " . $cc . "\r\n";
        $header .= "From: " . $from . "\r\n";
        $header .= "Subject: " . $subject . "\r\n";
        $header .= $additional_headers;
        $header .= "Date: " . date("r") . "\r\n";
        $header .= 'Reply-To: ' . $reply . "\r\n";
        $header .= "Content-Transfer-Encoding: base64\r\n";
        list($msec, $sec) = explode(" ", microtime());
        $header .= "Message-ID: <" . date("YmdHis", $sec) . "." . ($msec*1000000) . "." . $mail_from . ">\r\n";
        $TO = explode(",", $this ->strip_comment($to));
        if ($cc!="") $TO = array_merge($TO, explode(",", $this ->strip_comment($cc)));
        if ($bcc!="") $TO = array_merge($TO, explode(",", $this ->strip_comment($bcc)));
        $sent = true;
        foreach ($TO as $rcpt_to) {
            $rcpt_to = $this ->get_address($rcpt_to);
            if (!$this ->smtp_sockopen($rcpt_to)) {
                $this ->log_write("Error: Cannot send email to [ " . $rcpt_to . " ] (Step 1)<br/>" . $this->error);
                $sent = false;
                continue;
            }
            if ($this ->smtp_send($this ->host_name, $mail_from, $rcpt_to, $header, $body)) {
                $this ->log_write("邮件已成功发送到 [" . $rcpt_to . "]\n");
            } else {
                $this ->log_write("Error: Cannot send email to [ " . $rcpt_to . " ] (Step 2)<br/>" . $this->error);
                $sent = false;
            }
            fclose($this ->sock);
        }
        return $sent;
    }

    private function smtp_send($helo, $from, $to, $header, $body = "") {
        if (!$this ->smtp_putcmd("HELO", $helo)) return $this ->smtp_error("sending HELO command");
        if ($this ->auth) {
            if (!$this ->smtp_putcmd("AUTH LOGIN", base64_encode($this ->user))) return $this ->smtp_error("sending HELO command");
            if (!$this ->smtp_putcmd("", base64_encode($this ->pass))) return $this ->smtp_error("sending HELO command");
        }
        if (!$this ->smtp_putcmd("MAIL", "FROM:<" . $from . ">")) return $this ->smtp_error("sending MAIL FROM command");
        if (!$this ->smtp_putcmd("RCPT", "TO:<" . $to . ">")) return $this ->smtp_error("sending RCPT TO command");
        if (!$this ->smtp_putcmd("DATA")) return $this ->smtp_error("sending DATA command");
        if (!$this ->smtp_message($header)) return $this ->smtp_error("sending head message");
        if (!$this ->smtp_sendbody($body)) return $this ->smtp_error("sending body message");
        if (!$this ->smtp_sendatt()) return $this ->smtp_error("sending attachments message");
        if (!$this ->smtp_sendend()) return $this ->smtp_error("sending end message");
        if (!$this ->smtp_eom()) return $this ->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");
        if (!$this ->smtp_putcmd("QUIT")) return $this ->smtp_error("sending QUIT command");
        return true;
    }

    private function smtp_sockopen($address) {
        if ($this ->relay_host=="") return $this ->smtp_sockopen_mx($address); else return $this ->smtp_sockopen_relay();
    }

    private function smtp_sockopen_relay() {
        $this ->log_write("Trying to " . $this ->relay_host . ":" . $this ->smtp_port . "\n");
        $this ->sock = @fsockopen($this ->relay_host, $this ->smtp_port, $errno, $errstr, $this ->time_out);
        if (!($this ->sock && $this ->smtp_ok())) {
            $this ->log_write("Error: Cannot connenct to relay host " . $this ->relay_host . "\n");
            $this ->log_write("Error: " . $errstr . " (" . $errno . ")\n");
            return false;
        }
        $this ->log_write("Connected to relay host " . $this ->relay_host . "\n");
        return true;;
    }

    private function smtp_sockopen_mx($address) {
        $domain = ereg_replace("^.+@([^@]+)$", "\\1", $address);
        if (!@getmxrr($domain, $MXHOSTS)) {
            $this ->log_write("Error: Cannot resolve MX \"" . $domain . "\"\n");
            return false;
        }
        foreach ($MXHOSTS as $host) {
            $this ->log_write("Trying to " . $host . ":" . $this ->smtp_port . "\n");
            $this ->sock = @fsockopen($host, $this ->smtp_port, $errno, $errstr, $this ->time_out);
            if (!($this ->sock && $this ->smtp_ok())) {
                $this ->log_write("Warning: Cannot connect to mx host " . $host . "\n");
                $this ->log_write("Error: " . $errstr . " (" . $errno . ")\n");
                continue;
            }
            $this ->log_write("Connected to mx host " . $host . "\n");
            return true;
        }
        $this ->log_write("Error: Cannot connect to any mx hosts (" . implode(", ", $MXHOSTS) . ")\n");
        return false;
    }

    private function smtp_message($header) {
        fputs($this ->sock, $header . "\r\n");
        $this ->smtp_debug("> " . str_replace("\r\n", "\n" . "> ", $header . "\n>"));
        return true;
    }

    private function smtp_sendbody($body) {
        $head  = "\r\n\r\n" . '--' .  $this->part_boundary;
        $head .= "\r\n" . 'Content-Type: text/html; charset="utf-8"';
        $head .= "\r\n" . 'Content-Transfer-Encoding: base64';
        $head .= "\r\n\r\n" . base64_encode($body);
        return fputs($this ->sock, $head . "\r\n");
    }

    private function smtp_sendatt() {
        $head = '';
        foreach ($this->att as $n => $v) {
            $head .= "\r\n\r\n" . '--' .  $this->part_boundary;
            $head .= "\r\n" . 'Content-Type: ' . get_mime(get_extname($n)) . '; charset="utf-8"; name="'.$n.'"';
            $head .= "\r\n" . 'Content-Disposition: attachment; filename="'.$n.'"';
            $head .= "\r\n" . 'Content-Transfer-Encoding: base64';
            $head .= "\r\n\r\n" . base64_encode($v);
        }
        return fputs($this ->sock, $head . "\r\n");
    }

    private function smtp_sendend() {
        return fputs($this ->sock, "\r\n\r\n" . '--' . $this->part_boundary . '--');
    }

    private function smtp_eom() {
        fputs($this ->sock, "\r\n.\r\n");
        $this ->smtp_debug(". [EOM]\n");
        return $this ->smtp_ok();
    }

    private function smtp_ok() {
        $response = str_replace("\r\n", "", fgets($this ->sock, 512));
        $this ->smtp_debug($response . "\n");
        if (!mb_ereg("^[23]", $response)) {
            fputs($this ->sock, "QUIT\r\n");
            fgets($this ->sock, 512);
            $this ->log_write("Error: Remote host returned \"" . $response . "\"\n");
            return false;
        }
        return true;
    }

    private function smtp_putcmd($cmd, $arg = "") {
        if ($arg!="") {
            if ($cmd=="") $cmd = $arg; else
                $cmd = $cmd . " " . $arg;
        }
        fputs($this ->sock, $cmd . "\r\n");
        $this ->smtp_debug("> " . $cmd . "\n");

        return $this ->smtp_ok();
    }

    private function smtp_error($string) {
        $this ->error .= "<br/>Error: Error occurred while " . $string . ".<br/>";
        return false;
    }

    private function log_write($message) {
        $this->log .= '<br/>'.$message.'<br/>';
        return true;
    }

    private function strip_comment($address) {
        $comment = "\\([^()]*\\)";
        while (mb_ereg($comment, $address)) {
            $address = mb_ereg_replace($comment, "", $address);
        }
        return $address;
    }

    private function get_address($address) {
        $address = mb_ereg_replace("([ \t\r\n])+", "", $address);
        $address = mb_ereg_replace("^.*<(.+)>.*$", "\\1", $address);
        return $address;
    }

    public function smtp_debug($message) {
        if ($this ->debug) {
            return $message . "<br>";
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.
  • 210.
  • 211.
  • 212.
  • 213.
  • 214.
  • 215.
  • 216.
  • 217.
  • 218.
  • 219.
  • 220.
  • 221.
  • 222.
  • 223.
  • 224.
  • 225.
  • 226.
  • 227.
  • 228.
  • 229.
  • 230.
  • 231.
  • 232.
  • 233.
  • 234.
  • 235.
  • 236.
  • 237.
  • 238.
  • 239.
  • 240.
  • 241.
  • 242.
  • 243.
  • 244.
  • 245.
  • 246.
  • 247.
  • 248.
  • 249.
  • 250.
  • 251.
  • 252.
  • 253.
  • 254.
  • 255.
  • 256.
  • 257.
  • 258.
  • 259.
  • 260.
  • 261.
  • 262.
  • 263.
  • 264.
  • 265.
  • 266.
  • 267.
  • 268.
  • 269.
  • 270.
  • 271.
  • 272.
  • 273.
  • 274.
  • 275.
  • 276.
  • 277.
  • 278.
  • 279.
  • 280.
  • 281.
  • 282.
  • 283.
  • 284.
  • 285.
  • 286.
  • 287.
  • 288.
  • 289.
  • 290.
  • 291.
  • 292.
  • 293.
  • 294.

 

作者:Alone°李道长ご