最近想调用一个发送邮件的函数,于是在网上下载了一个smtp_mail.php的函数,函数编写的php版本比较低,都用的是ereg,ereg_replace.但是我现在的PHP版本比较高,因此需要用preg_match代替ereg,preg_replace代替ereg_replace,代替之后出现warning,由于之前也没用怎么学过正则表达式,麻烦大牛帮忙修改一下。修改之前:$body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
修改之后:$body = preg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
Warning: preg_replace(): Unknown modifier '(' in ......$response = str_replace("\r\n", "", fgets($this->sock, 512)); 
修改之前:if (!ereg("^[23]", $response))
修改之后:if (!preg_match("^[23]", $response))
Warning: preg_match(): No ending delimiter '^' found in ......$comment = "\([^()]*\)";
修改之前:ereg($comment, $address)
修改之后:preg_match($comment, $address)
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in......修改之前:$address = ereg_replace("([ \t\r\n])+", "", $address);
修改之后:$address = preg_replace("([ \t\r\n])+", "", $address);
Warning: preg_replace(): Unknown modifier '+' in ......修改之前:$address = ereg_replace("^.*<(.+)>.*$", "\1", $address); 
修改之后:$address = preg_replace("^.*<(.+)>.*$", "\1", $address); 
Warning: preg_replace(): No ending delimiter '^' found in ......

解决方案 »

  1.   

    preg 的正则表达式需要有定界符(ereg的不需要)
    修改之后:$body = preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $body);
    其他类同
      

  2.   

    要用 /  /   定义正则表达式的边界,如: preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $body);
      

  3.   

    @xuzuning  @jam00 
    嗯,已经加了定界符,不报错了,但是邮件发不出去了。修改之前邮件时可以发送出去的,会提示发送成功,但是修改之后,虽然没有帖子中的报错信息,但是提交之后页面就空白了,卡死了,没有提示发送成功,也收不到邮件。应该还是帖子中的这几行代码有问题,麻烦再帮忙看看这几句,是不是和修改之前的意思不一样了。实在不懂正则语句,学习起来有点费时间,但是又急着用,多谢了!!!修改之前:$body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
    修改之后:$body = preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $body);    //加了定界符$response = str_replace("\r\n", "", fgets($this->sock, 512)); 
    修改之前:if (!ereg("^[23]", $response))
    修改之后:if (!preg_match("/^[23]/", $response))          //加了定界符$comment = "/\([^()]*\)/";                      //加了定界符
    修改之前:ereg($comment, $address)
    修改之后:preg_match($comment, $address)修改之前:$address = ereg_replace("([ \t\r\n])+", "", $address);
    修改之后:$address = preg_replace("/([ \t\r\n])+/", "", $address);         //加了定界符修改之前:$address = ereg_replace("^.*<(.+)>.*$", "\1", $address); 
    修改之后:$address = preg_replace("/^.*<(.+)>.*$/", "\1", $address);      //加了定界符
      

  4.   

    修改了之后还是发送不了邮件,把所有修改的地方贴上来再帮忙看看,多谢了
    $body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
    $body = preg_replace("/(^|(\r\n))(\.)/", "\\1.\\3", $body);   // 加了定界符,\1.\3修改成了\\1.\\3$domain = ereg_replace("^.+@([^@]+)$", "\1", $address); 
    $domain = preg_replace("/^.+@([^@]+)$/", "\\1", $address);    // 加了定界符,\1修改成了\\1$response = str_replace("\r\n", "", fgets($this->sock, 512)); 
    $this->smtp_debug($response."\n"); 
    if (!ereg("^[23]", $response))            //修改为 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; 
    } $comment = "\([^()]*\)";       //修改为$comment = "/ \([^()]*\) /";   加了定界符 
    while (preg_match($comment, $address))  

        $address = ereg_replace($comment, "", $address);    修改为:$address = preg_replace($comment, "", $address); }$address = ereg_replace("([ \t\r\n])+", "", $address);      
    $address = preg_replace("/([ \t\r\n])+/", "", $address);   //  加了定界符$address = ereg_replace("^.*<(.+)>.*$", "\1", $address);   
    $address = preg_replace("/^.*<(.+)>.*$/", "\\1", $address);  //  加了定界符且\1修改成了\\1
      

  5.   

    好吧,但是我修改之前是可以正常发送邮件的,就是修改了帖子中的那几行语句:把ereg修改为preg,所以现在的版本是发送不了邮件的了。所以我怀疑问题就出现在这几行修改了的语句中。麻烦版主有空再稍微帮我看看那几行语句,如果确实没有问题的话,我再尝试看看是不是其它别的问题。多谢啦
      

  6.   

    请问你解决了  smtp发送邮件这个问题了吗?我现在遇到了同样的问题,求解答