实现新版本PHP下STMP发送前端表单到邮箱(无Deprecated错误)

实现新版本PHP下STMP发送前端表单到邮箱

最近在实现前端发送表单到邮箱的功能时,使用php出现ereg、ereg_replace报Deprecated错,查找了一下原因,原来是新版本php中,已经将废除,替换了preg_match、preg_replace以后,不再提示Deprecated错误。

先来了解一下

ereg_replace和preg_replace

1. preg_replace

(PHP 4, PHP 5, PHP 7, PHP 8)

preg_replace — 执行一个正则表达式的搜索和替换

2. ereg_replace

(PHP 4, PHP 5)

ereg_replace — 正则表达式替换

这个函数在PHP 5.3.0 中就已经不赞成使用,并在 PHP 7.0.0.中被移除

替换方式

语法中最大的变化是添加了分隔符。

ereg(‘^hello’, $str);

preg_match(‘/^hello/’, $str);

在PHP 7.0.0中ereg_replace 函数可使用preg_replace代替,只是将ereg_replace中的$pattern两边加上”/“以闭合如"/pattern/"。

下面贴一下代码

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TEST</title>
</head>
<body>
    <div>
        <form class="form" action="sendmail.php" method="post">
          <div class="option" id="formitem">
            <label for="dutycompany">ご担当社名:</label>
            <input
              class="input"
              type="text"
              name="dutycompany"
              id="dutycompany"
              required
            />
          </div>
          <div class="option">
            <label for="companyname">会社名:</label>
            <input
              class="input"
              type="text"
              name="companyname"
              id="companyname"
              required
            />
          </div>
          <div class="option">
            <label for="emailaddress">メールアドレス:</label>
            <input
              class="input"
              type="email"
              name="emailaddress"
              id="emailaddress"
              required
            />
          </div>
          <div class="option">
            <label for="telnumber">電話番号:</label>
            <input
              class="input"
              type="number"
    
              name="telnumber"
              id="telnumber"
              required
            />
          </div>
          <div class="option m_option">
            <label>お問い合わせの目的:</label>
    
            <input
              class="checkbox"
              type="radio"
              value="ご相談"
              name="contact"
              id="talk"
            />
            <label for="talk">ご相談</label>
    
            <input
              class="checkbox"
              type="radio"
              value="お問合せ"
              name="contact"
              id="meet"
            />
            <label for="meet">お問合せ</label>
    
            <input
              class="checkbox"
              type="radio"
              value="その他"
              name="contact"
              id="other"
            />
            <label for="other">その他</label>
          </div>
          <div class="option m_option">
            <label>ご希望のご回答方法:</label>
    
            <input
              class="checkbox"
              type="radio"
              value="電話"
              name="answer"
              id="telanswer"
            />
            <label for="telanswer">電話</label>
    
            <input
              class="checkbox"
              type="radio"
              value="メール"
              name="answer"
              id="mailanswer"
            />
            <label for="mailanswer">メール</label>
    
            <input
              class="checkbox"
              type="radio"
              value="どちらでもいい"
              name="answer"
              id="bothanswer"
            />
            <label for="                  name="bothanswer"
            ">どちらでもいい</label>
          </div>
    
          <div class="option">
            <label for="advice">ご意見 / ご要望:</label>
            <textarea name="advice" id="advice"></textarea>
          </div>
    
          <button class="submit_btn " type="submit" name="submit" value="Send">
            <a class="section1_05 "   >
              無料相談する
            </a>      
          </button>
         
        </form>
      </div>
    
</body>
</html>

sendmail.php

<meta charset="utf-8"> 

<?php 
    error_reporting(E_ALL ^ E_NOTICE);
    require_once "email.class.php"; 

    //******************** info ******************************** 
    $smtpserver = "stmp服务器地址";                         //SMTP server address
    $smtpserverport = 465;                                 //SMTP port
    $smtpusermail = "发送邮件的邮箱地址";                //SMTP user mail address
    $smtpemailto = "要发送的邮箱地址";                    //mail to
    $smtpuser = "发送邮件的邮箱地址(账号)";                    //SMTP user 
    $smtppass = "发送邮件的邮箱密码(密钥)";                        //SMTP password
    $mailtitle = $_POST['companyname'].'のe-mail';                        //mail title
    $mailcontent1 = $_POST['dutycompany'];    //ご担当社名
    $mailcontent2 = $_POST['companyname'];    //会社名
    $mailcontent3 = $_POST['emailaddress'];    //メールアドレス
    $mailcontent4 = $_POST['telnumber'];    //電話番号
    $mailcontent5 = $_POST['contact'];    //お問い合わせの目的
    $mailcontent6 = $_POST['answer'];    //ご希望のご回答方法
    $mailcontent7 = $_POST['advice'];    //ご意見 / ご要望
    $mailcontent = "                                   
    ご担当社名:$mailcontent1<br />
    会社名:$mailcontent2<br />
    メールアドレス:$mailcontent3<br />
    電話番号:$mailcontent4<br />
    お問い合わせの目的:$mailcontent5<br />
    ご希望のご回答方法:$mailcontent6<br />
    ご意見 / ご要望:$mailcontent7";                      //mail content
    $mailtype = "HTML";                                    //mail type(html/txt)
    // //************************ info end ****************************


     
    
    $smtp = new Smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);
    //id confirm (true/false)
    $smtp->debug = false;//debug info(true/false)
    $state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype); 
    #echo "<div style='width:300px; margin:36px auto;'>"; 
    if($state==""){ 
    
    echo "Sorry!!!"; 
    echo "<a href='index.html'>点此返回</a>"; 
    exit(); 
    }
    echo "Successful!!!"; 
    echo "<a href='index.html'>点此返回</a>"; 
    echo "</div>"; 

error_reporting(E_ALL ^ E_NOTICE);

?>

email.class.php

<?php 
    class Smtp 
    { 
        var $smtp_port; 
        var $time_out; 
        var $host_name; 
        var $log_file; 
        var $relay_host; 
        var $debug; 
        var $auth; 
        var $user; 
        var $pass; 
        var $sock; 
        
        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 = 3600; 
            $this->auth = $auth; 
            $this->user = $user; 
            $this->pass = $pass; 
            $this->host_name = "localhost"; 
            $this->log_file = ""; 
            $this->sock = FALSE; 
        } 

        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; 
        } 
        
        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, $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 = preg_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; 
            } 
        } 
    } 
?>

到此为止了,记录一下,以后备用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值