<?php
/*
* 域名检测异常自动邮件推送
*/
//SMTP 服务器地址
$smtp = 'smtp.qq.com';
//发信邮箱账号
$mailname = '';
//发信邮箱密码
$mailpass = '';
//收信邮箱地址
$formail = '';
//您要检测的域名
$url = '
//您的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>";
}
}}
评论
172条评论a'ゞ不言 Lv.1
Internet Explorer
iPhone iOS 16.1 回复
六
重庆市 电信
腾讯视频 Lv.3
Chrome 86.0.4240.198
Windows 回复
不错不错,味道好极了
广东省深圳市 鹏博士长城宽带
新云 Lv.1
Internet Explorer
iPhone iOS 16.3.1 回复
不错不错,味道好极了
上海市 电信
接口连接阿道夫 Lv.1
Chrome 111.0.0.0
Windows 回复
北京市 电信
787447 Lv.1
Chrome 86.0.4240.198
Windows 回复
支持一下,黑蜘蛛博客有你更精彩
云南省红河州 联通
q9837762 Lv.1
Sogou Explorer
Windows 7 x64 Edition 回复
够厉害的啊
江苏省南京市 电信
q9837762 Lv.1
Internet Explorer
iPhone iOS 14.8.1 回复
厉不厉害兄弟们
江苏省南京市 电信
上善若水linwei Lv.1
Chrome 109.0.0.0
Windows 回复
感谢楼主分享
广东省广州市越秀区 电信
腾讯视频 Lv.3
Chrome 112.0.0.0
Windows 回复
拿来学习
广东省广州市 联通
jdj Lv.1
Android Webkit
Android 10 回复
可以吗
上海市 电信