PHP簡單實現發送郵件和防被當成垃圾郵件處理

來源:互聯網
上載者:User
這篇文章主要介紹了關於PHP簡單實現發送郵件和防被當成垃圾郵件處理,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

郵件伺服器使用的是163郵箱的
需要去163郵箱申請郵箱和設定用戶端授權密碼。

設定方法

登入163郵箱->設定->POP3/SMTP/IMAP->用戶端授權密碼

圖片示範

設定好要記住!

下面就是代碼了

表單

index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>    <title>PHP發郵件 - BY TANKING</title>        <style type="text/css">    *{margin:0px;padding: 0px;}            h3{                    text-align: center;                    margin-top: 50px;            }                 #form-p{                        width: 300px;                        margin:20px auto;                }                 #form-p .input_style{                        width: 100%;                        height: 35px;                        font-size: 16px;                        text-indent: 5px;                        margin-bottom: 5px;                }                 #form-p .textarea_style{                        width: 100%;                        height: 65px;                        font-size: 16px;                        text-indent: 5px;                        resize: none;                }                 #form-p .sendbtn{                        width: 100%;                        height: 35px;                        font-size: 16px;                        cursor: pointer;                        margin-top: 5px;                }                 #result .yes{                        position: fixed;                        top: 0px;                        background: #5cb85c;                        width: 100%;                        height: 35px;                        line-height: 35px;                        text-align: center;                        color: #fff;                        font-weight: bold;                }                 #result .no{                        position: fixed;                        top: 0px;                        background: #c00;                        width: 100%;                        height: 35px;                        line-height: 35px;                        text-align: center;                        color: #fff;                        font-weight: bold;                }     </style></head><body><h3>PHP發郵件-BY TANKING</h3><p id="form-p">    <form action="mail.php" method="POST">       <input name="email" type="text" placeholder="接收郵箱" class="input_style"/><br/>       <input name="title" type="text" placeholder="標題" class="input_style"/><br/>       <input name="content" type="text" placeholder="內容" class="input_style"/><br/>       <input type="submit" value="發送" class="sendbtn"/>    </form></p></body></html>

提交表單

發送郵件處理

mail.php

<?php//擷取表單提交的郵件標題$title = $_POST["title"];//擷取表單提交的內容$content = $_POST["content"];include_once("smtp.class.php");    $smtpserver = "smtp.163.com"; //SMTP伺服器    $smtpserverport = 25; //SMTP伺服器連接埠    //擷取表單提交的郵件接收人郵箱號碼    $email = $_POST["email"];    $smtpusermail = "你的163郵箱地址"; //SMTP伺服器的使用者郵箱    $smtpuser = "你的163郵箱地址"; //SMTP伺服器的使用者帳號    $smtppass = "授權密碼"; //SMTP伺服器的授權密碼    $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //這裡面的一個true是表示使用身分識別驗證,否則不使用身分識別驗證.    $emailtype = "HTML"; //信件類型,文本:text;網頁:HTML    $smtpemailto = $email;    $smtpemailfrom = $smtpusermail;    $emailsubject = $title;    $emailbody = "<p>".$content."</p>";     //開始發送郵件    $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);    echo "發送成功!";?>

mail.php

裡面只需設定你的163帳號和授權密碼即可

還有一個檔案
smtp.class.php
這個不要動就行,拷貝到同一目錄。

<?php //TANKING//2018-7-7 error_reporting(0);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 = ereg_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 (!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;    }    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 (ereg($comment, $address)) {            $address = ereg_replace($comment, "", $address);        }        return $address;    }    function get_address($address) {        $address = ereg_replace("([ \t\r\n])+", "", $address);        $address = ereg_replace("^.*<(.+)>.*$", "\1", $address);        return $address;    }    function smtp_debug($message) {        if ($this->debug) {            echo $message . "                         ;";        }    }}?>

嘗試發郵件試試!

成功!不會進入垃圾箱!

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.