PHP 第三方邮箱接口 PHP5.3及以上

直接上代码吧   
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Sendmail2 extends CI_Controller {



    function __construct() {
        parent::__construct();
        $this->load->helper(array('form', 'url')); 
        $this->load->model('db_model');
        $this->load->library('session');
    }

    public function index(){
  $conn=mysql_connect("localhost","root","root");
       mysql_select_db("qiye",$conn); 
 $_POST['mail']="3256105854@qq.com"; //设置默认的接收邮箱
$email = trim($_POST['mail']);
// $this->injectChk(stripslashes(trim($_POST['mail']))); 
 
$sql = "select id,username,password from `user` where `mail`='$email'"; 
$query = mysql_query($sql); 
$num = mysql_num_rows($query); 
if ($num == 0) {//该邮箱尚未注册! 
    echo 'noreg'; 
    exit; 
} else { 
    $row = mysql_fetch_array($query); 
    $getpasstime = time(); 
    $uid = $row['id']; 
    $token = md5($uid . $row['username'] . $row['password']); 
    $url = "http://www.qiye.com/sendmail3?email=" . $email . "&token=" . $token; 
    $time = date('Y-m-d H:i'); 
    $result = $this->sendmail($time, $email, $url); 
    if ($result == 1) {//邮件发送成功 
        $msg = '系统已向您的邮箱发送了一封邮件<br/>请登录到您的邮箱及时重置您的密码!'; 
        //更新数据发送时间 
        mysql_query("update `user` set `ddate`='$getpasstime' where id='$uid '"); 
    } else { 
        $msg = $result; 
    } 
    echo $msg; 
   
}

}

function sendmail($time, $email, $url) { 
    include_once("smtp.class.php"); //加载类
    $smtpserver = "smtp.163.com"; //SMTP服务器 
    $smtpserverport = 25; //SMTP服务器端口 
    $smtpusermail = "17862863705@163.com"; //SMTP服务器的用户邮箱 
    $smtpuser = "1786xxxx3705@163.com"; //SMTP服务器的用户帐号 
    $smtppass = "CPD1xxxx582724"; //SMTP服务器的用户密码 
   $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass);  //这里面的一个true是表示使用身份验证,否则不使用身份验证. 
    $emailtype = "HTML"; //信件类型,文本:text;网页:HTML 
    $smtpemailto = $email; 
    $smtpemailfrom = $smtpusermail; 
    $emailsubject = "素材火sucaihuo.com - 找回密码"; 
    $emailbody = "亲爱的" . $email . ":<br/>您在" . $time . "提交了找回密码请求。请点击下面的链接重置密码(按钮24小时内有效)。<br/><a href='" . $url . "' target='_blank'>" . $url . "</a><br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问。<br/>如果您没有提交找回密码请求,请忽略此邮件。"; 
    $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
    return $rs; 
} 
 
// function injectChk($sql_str) { //防止注入 
//     $check = eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); 
//     if ($check) { 
//         echo('非法字符串'); 
//         exit(); 
//     } else { 
//         return $sql_str; 
//     } 
// }

    }
<?php  
class Smtp{  
    /* Public Variables */
    //第三方类  
    var $smtp_port;  
    var $time_out;  
    var $host_name;  
    var $log_file;  
    var $relay_host;  
    var $debug;  
    var $auth;  
    var $user;  
    var $pass;  
  
    /* Private Variables */  
    var $sock;  
    /* Constractor */  
    function smtp($relay_host = "", $smtp_port = 25, $auth = false, $user, $pass) {  
        $this->debug = false;  
        $this->smtp_port = $smtp_port;  
        $this->relay_host = $relay_host;  
        $this->time_out = 30; //is used in fsockopen()  
        $this->auth = $auth; //auth  
        $this->user = $user;  
        $this->pass = $pass;  
        $this->host_name = "localhost"; //is used in HELO command  
        $this->log_file = "";  
        $this->sock = false;  
    }  
  
    /* Main Function */  
    function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "") {  
        $mail_from = $this->get_address($this->strip_comment($from));  
        $body = preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $body);  
        $header= "MIME-Version:1.0\r\n";  
        if ($mailtype == "HTML") {  
            $header .= "Content-Type:text/html\r\n";  
        }  
        $header .= "To: " . $to . "\r\n";  
        if ($cc != "") {  
            $header .= "Cc: " . $cc . "\r\n";  
        }  
        $header .= "From: $from<" . $from . ">\r\n";  
        $header .= "Subject: " . $subject . "\r\n";  
        $header .= $additional_headers;  
        $header .= "Date: " . date("r") . "\r\n";  
        $header .= "X-Mailer:By Redhat (PHP/" . phpversion() . ")\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 . "\n");  
                $sent = false;  
                continue;  
            }  
  
            if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {  
                $this->log_write("E-mail has been sent to <" . $rcpt_to . ">\n");  
            } else {  
                $this->log_write("Error: Cannot send email to <" . $rcpt_to . ">\n");  
                $sent = false;  
            }  
            fclose($this->sock);  
            $this->log_write("Disconnected from remote host\n");  
        }  
        return $sent;  
    }  
  
    /* Private Functions */  
  
    function smtp_send($helo, $from, $to, $header, $body = "") {  
        if (!$this->smtp_putcmd("HELO", $helo)) {  
            return $this->smtp_error("sending HELO command");  
        }  
        // auth  
        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, $body)) {  
            return $this->smtp_error("sending 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;  
    }  
  
    function smtp_sockopen($address) {  
        if ($this->relay_host == "") {  
            return $this->smtp_sockopen_mx($address);  
        } else {  
            return $this->smtp_sockopen_relay();  
        }  
    }  
  
    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;  
        ;  
    }  
  
    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;  
    }  
  
    function smtp_message($header, $body) {  
        fputs($this->sock, $header . "\r\n" . $body);  
        $this->smtp_debug("> " . str_replace("\r\n", "\n" . "> ", $header . "\n> " . $body . "\n> "));  
        return true;  
    }  
  
    function smtp_eom() {  
        fputs($this->sock, "\r\n.\r\n");  
        $this->smtp_debug(". [EOM]\n");  
        return $this->smtp_ok();  
    }  
  
    function smtp_ok() {  
        $response = str_replace("\r\n", "", fgets($this->sock, 512));  
        $this->smtp_debug($response . "\n");  
        if (!preg_match("/^[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;  
    }  
  
    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();  
    }  
  
    function smtp_error($string) {  
        $this->log_write("Error: Error occurred while " . $string . ".\n");  
        return false;  
    }  
  
    function log_write($message) {  
        $this->smtp_debug($message);  
  
        if ($this->log_file == "") {  
            return true;  
        }  
  
        $message = date("M d H:i:s ") . get_current_user() . "[" . getmypid() . "]: " . $message;  
        if (!@ file_exists($this->log_file) || !($fp = @ fopen($this->log_file, "a"))) {  
            $this->smtp_debug("Warning: Cannot open log file \"" . $this->log_file . "\"\n");  
            return false;  
            ;  
        }  
  
        flock($fp, LOCK_EX);  
        fputs($fp, $message);  
        fclose($fp);  
        return true;  
    }  
  
    function strip_comment($address) {  
        $comment = "/[()]∗/";  
        while (preg_match($comment, $address)) {  
            $address = preg_replace($comment, "", $address);  
        }  
        return $address;  
    }  
  
    function get_address($address) {  
        $address = preg_replace("/([ \t\r\n])+/", "", $address);  
        $address = preg_replace("/^.*<(.+)>.*$/", "\1", $address);  
        return $address;  
    }  
  
    function smtp_debug($message) {  
        if ($this->debug) {  
            echo $message . "  
            ;";  
        }  
    }  
}  
?>  


 
<?php
//判断是否过期
  $conn=mysql_connect("localhost","root","root");
       mysql_select_db("qiye",$conn); 
$token = stripslashes(trim($_GET['token'])); 
$email = stripslashes(trim($_GET['email'])); 
$sql = "select * from `user` where mail='$email'"; 
 
$query = mysql_query($sql); 
$row = mysql_fetch_array($query); 
if($row){ 
    $mt = md5($row['id'].$row['username'].$row['password']); 
    if($mt==$token){ 
        if(time()-$row['ddate']>24*60*60){ 
            $msg = '该链接已过期!'; 
        }else{ 
            //重置密码... 
            $msg = '请重新设置密码,显示重置密码表单,<br/>这里只是演示,略过。'; 
        } 
    }else{ 
        $msg =  '无效的链接<br/>'.$mt.'<br/>'.$token; 
    } 
}else{ 
    $msg =  '错误的链接!';     
} 
echo $msg;

?>


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值