最近在用dede做站,看到后台有启用smtp方式发送邮件的设置,但没有验证。请问各位PHP大神,如何验证填写的smtp信息是否正确,验证包括端口、用户名、密码?求php代码实现,并输出这些错误信息,100分奉上!感谢。PHPSMTP密码邮件

解决方案 »

  1.   

    dede的启用smtp方式发送邮件的设置,你是安装的插件吗?
    我本地装的最新dede好像没这个功能设置哦
      

  2.   

    回楼上大牛,我只要能验证smtp信息是否正确就行,不需要做成dede插件。
      

  3.   

    //打开smtp服务器端口
    $fp = @fsockopen($smtp_host, 25);
    if (!$fp)
    echo "<b>Error:</b> Cannot conect to ".$smtp_host."<br>";
      

  4.   

    $smtp = array(
    //1、EHLO,期待返回220或者250
    array("EHLO ".$loc_host.$lb,"220,250","HELO error: "),
    //2、发送Auth Login,期待返回334
    array("AUTH LOGIN".$lb,"334","AUTH error:"),
    //3、发送经过Base64编码的用户名,期待返回334
    array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION error : "),
    //4、发送经过Base64编码的密码,期待返回235
    array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION error : ")
    );

    //5、发送Mail From,期待返回250
    $smtp[] = array("MAIL FROM: <".$from.">".$lb,"250","MAIL FROM error: ");
    //6、发送Rcpt To。期待返回250
    $smtp[] = array("RCPT TO: <".$to.">".$lb,"250","RCPT TO error: ");
    //7、发送DATA,期待返回354
    $smtp[] = array("DATA".$lb,"354","DATA error: ");
    //8.0、发送From
    $smtp[] = array("From: ".$from.$lb,"","");
    //8.2、发送To
    $smtp[] = array("To: ".$to.$lb,"","");
    //8.1、发送标题
    $smtp[] = array("Subject: ".$subject.$lb,"","");
    $result_str="";
    //发送smtp数组中的命令/数据
    foreach($smtp as $req)
    {
    //发送信息
    @fputs($fp, $req[0]);
    //如果需要接收服务器返回信息,则
    if($req[1])
    {
    //接收信息
    while($result = @fgets($fp, 1024))
    {
    if(substr($result,3,1) == " ")
    {
    break;
    }
    };
    if (!strstr($req[1],substr($result,0,3)))
    {
    $result_str.=$req[2].$result."<br>";
    }
    }
    }
    //关闭连接
    @fclose($fp);
    return $result_str;
    }
      

  5.   

    倒没有没弄过验证smtp的端口、用户名、密码,端口还好说,但用户名、密码的话,只能尝试去请求来判断了...
      

  6.   

    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;;