www.phpe.net
class
邮件都能成功

解决方案 »

  1.   

    function send22($to,$from,$subject, $message,$html=0)
    {
    //使用本函数之前,务必请定义好以下变量
    #############################################

    $smtp ="smtp.163.com";            //SMTP 服务器
    $check = 1;
    //SMTP需要要身份验证设值为 1 不需要身份验证值为 0,现在大多数的SMTP服务商都要验证,如不清楚请与你的smtp 服务商联系。
    if ($check) {

    $username = "[email protected]";   //您的email帐号名称
    $password = "exmaple";  //您的email密码
    }

    $s_from = "[email protected]";  //此email 必需是发信服务器上的email
    ###############################################

    //连接服务器
    $fp = fsockopen ( $smtp, 25, $errno, $errstr, 60);
    if (!$fp ) return "联接服务器失败".__LINE__;
    set_socket_blocking($fp, true );
    $lastmessage=fgets($fp,512);

    if ( substr($lastmessage,0,3) != 220 ) return "错误信息A:".$lastmessage.__LINE__;

    //HELO
    $yourname = "admin";
    if($check == "1") $lastact="EHLO ".$yourname."\r\n";
    else $lastact="HELO ".$yourname."\r\n";

    fputs($fp, $lastact);
    $lastmessage == fgets($fp,512);
    if (substr($lastmessage,0,3) != 220 ) return "错误信息B$lastmessage".__LINE__;
    while (true) {
    $lastmessage = fgets($fp,512);
    if ( (substr($lastmessage,3,1) != "-")  or  (empty($lastmessage)) )
    break;
    }


    //身份验证
    if ($check=="1") {
    //验证开始
    $lastact="AUTH LOGIN"."\r\n";
    fputs( $fp, $lastact);
    $lastmessage = fgets ($fp,512);
    if (substr($lastmessage,0,3) != 334) return "错误信息C$lastmessage".__LINE__;
    //用户姓名
    $lastact=base64_encode($username)."\r\n";
    fputs( $fp, $lastact);
    $lastmessage = fgets ($fp,512);
    if (substr($lastmessage,0,3) != 334) return "错误信息D$lastmessage".__LINE__;
    //用户密码
    $lastact=base64_encode($password)."\r\n";
    fputs( $fp, $lastact);
    $lastmessage = fgets ($fp,512);
    if (substr($lastmessage,0,3) != "235") return "错误信息E$lastmessage".__LINE__;
    }

    //FROM:
    //$lastact="MAIL FROM: $s_from" . "\r\n";
    $lastact="MAIL FROM: ".$s_from. "\r\n";
    fputs( $fp, $lastact);
    $lastmessage = fgets ($fp,512);
    if (substr($lastmessage,0,3) != 250) return "错误信息F$lastmessage".__LINE__;

    //TO:
    $lastact="RCPT To: $to" . "\r\n";
    fputs( $fp, $lastact);
    $lastmessage = fgets ($fp,512);
    if (substr($lastmessage,0,3) != 250) return "错误信息G$lastmessage".__LINE__;

    //DATA
    $lastact="DATA\r\n";
    fputs($fp, $lastact);
    $lastmessage = fgets ($fp,512);
    if (substr($lastmessage,0,3) != 354) return "错误信息H$lastmessage".__LINE__;


    //处理Subject头
    $head="Subject: $subject\r\n";
    $message = $head."\r\n".$message;

    //处理From头
    $head="From: $from\r\n";
    $message = $head.$message;

    //处理To头
    $head="To: $to\r\n";
    $message = $head.$message;
    if($html==1)
    {
    $head = "Content-type:text/html\r\n";
    $message =$head.$message;
    }

    //加上结束串
    $message .= "\r\n.\r\n";

    //发送信息
    fputs($fp, $message);
    $lastact="QUIT\r\n";

    fputs($fp,$lastact);
    fclose($fp);
    return 0;
    }
      

  2.   

    Warning: fsockopen(): unable to connect to smtp.163.com:25 in C:\1.php on line 12发生以前错误,代码如下: $smtp ="smtp.163.com";            //SMTP 服务器
    $check = 1;
    if ($check) {
    $username = "ted58";   //您的email帐号名称
    $password = "1111";  //您的email密码
    }

    $s_from = "[email protected]";  //此email 必需是发信服务器上的email
    //连接服务器
    $fp = fsockopen ( $smtp, 25, $errno, $errstr, 3600);
      

  3.   

    没有啊,我就是用163的啊。
    难道要自已的SMTP服务器才行吗?
      

  4.   

    你确认在PHP程序的服务器上, telnet smtp.163.com 25 可以正常连接?