如何判断,邮件是否发送成功,
如果发送失败,是否服务器端会返回什么值。请高手赐教下。。

解决方案 »

  1.   

    我不知道你是用哪中方式发送邮件的!前段时间我正好写了个以smtp方式发送邮件的类,你可以参考下,每个步骤都是有返回状态的:
    <?
    class BMail{ /**
     * <p>以SMTP的方式发送邮件</p>
     * 
     * @return true,false - 是否成功发送bool
     * @param $mailcfg array - 邮件发送的配置
     * @param $mail array - 邮件的内容
     */    public static function send($mailcfg,$mail){
            //无法连接上smtp服务器
            if(!$fp = fsockopen($mailcfg['server'], $mailcfg['port'], $errno, $errstr, 50)) {
                //echo ('无法连接');
                return false;
            }
            stream_set_blocking($fp, true);
            $lastmessage = fgets($fp, 512);
            if(substr($lastmessage, 0, 3) != '220') {
                $error_msg = "$mailcfg[server]:$mailcfg[port] CONNECT - $lastmessage";
                //echo ('连接错误');
                return false;
            }
            //发送用户名
            fputs($fp, ($mailcfg['auth'] ? 'EHLO' : 'HELO')." ".$mailcfg['auth_username']."\r\n");
            $lastmessage = fgets($fp, 512);
            if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
                
                $error_msg = "($mailcfg[server]:$mailcfg[port]) HELO/EHLO - $lastmessage";
                //echo ('身份错误');
                return false;
            }
            while(1) {
                if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) {break;}
                $lastmessage = fgets($fp, 512);
            }
            //登陆验证
            if($mailcfg['auth']) {
                fputs($fp, "AUTH LOGIN\r\n");
                $lastmessage = fgets($fp, 512);
                if(substr($lastmessage, 0, 3) != 334) {
                    //登陆模式错误
                    $error_msg = "($mailcfg[server]:$mailcfg[port]) AUTH LOGIN - $lastmessage";
                    //echo ('登陆模式错误');
                    return false;
                }
                fputs($fp, base64_encode($mailcfg['auth_username'])."\r\n");
                $lastmessage = fgets($fp, 512);
                if(substr($lastmessage, 0, 3) != 334) {
                    //用户名不正确
                    $error_msg = "($mailcfg[server]:$mailcfg[port]) USERNAME - $lastmessage";
                    //echo ('用户名不正确');
                    return false;
                }
                fputs($fp, base64_encode($mailcfg['auth_password'])."\r\n");
                $lastmessage = fgets($fp, 512);
                if(substr($lastmessage, 0, 3) != 235) {
                    //用户密码不正确
                    $error_msg = "($mailcfg[server]:$mailcfg[port]) PASSWORD - $lastmessage";
                    //echo ('用户密码不正确');
                    return false;
                }
                
                $email_from = $mailcfg['from'];
            }
            fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n");
            $lastmessage = fgets($fp, 512);
            if(substr($lastmessage, 0, 3) != 250) {
                //发送地址错误
                $error_msg = "($mailcfg[server]:$mailcfg[port]) MAIL FROM - $lastmessage";
                //echo ('发送地址错误');
                return false;      
            }
        
            $email_to=$mail['to'];
            //循环对逐个收件人发送
            foreach(explode(',', $email_to) as $touser) {
                $touser = trim($touser);
                if($touser) {
                    fputs($fp, "RCPT TO: <$touser>\r\n");
                    $lastmessage = fgets($fp, 512);
                    if(substr($lastmessage, 0, 3) != 250) {
                        //目标地址错误
                        $error_msg = "($mailcfg[server]:$mailcfg[port]) RCPT TO - $lastmessage";
                        //echo ('目标地址错误');
                        return false; 
                    }
                }
            }
            fputs($fp, "DATA\r\n");
            $lastmessage = fgets($fp, 512);
            if(substr($lastmessage, 0, 3) != 354) {
                $error_msg = "($mailcfg[server]:$mailcfg[port]) DATA - $lastmessage";
                //echo ('数据错误');
                return false; 
            }
        
            $from = $mailcfg['from'];
            $fromname = $mailcfg['fromname'];
            $subject = $mail['subject'];
            $content = $mail['content'];
            
            $charset = $mailcfg['charset'];
            $headers = "MIME-Version: 1.0\r\nContent-type: $mailcfg[type]; charset=".$charset."\r\n\r\n";//头文件避免出现乱码
            
            //构建邮件数据
            $str="To: $email_to\r\nFrom: $fromname <$from>\r\nSubject: ".$subject."\r\n".$headers.$content."\r\n.\r\n";
            fputs($fp, "$str\r\n");
            fputs($fp, "QUIT\r\n");     
            return true;
        }}/********
    //以下为调用例子
    define("REG_SMTP_HOST", "smtp服务器地址如:smtp.163.com");//如果是ssl类型的smtp,改成'ssl://smtp.163.com' 即可
    define("REG_SMTP_USER", "你用来发送邮件的邮箱账号名如:xxxx");
    define("REG_SMTP_PASS", "邮箱密码");
    define("REG_SMTP_FROM", "你的邮箱全称如:[email protected]");require_once('b-mail.php');$mailcfg = array(
                  'server'=>REG_SMTP_HOST,
                  'port'=>'25',//smtp服务器端口
                  'auth'=>1,
                  'from'=>REG_SMTP_FROM,
                  'charset'=>'utf-8',//信件编码
                  'type'=>'text/html',//发送的类型是html格式
                  //'type'=>'text/plain',//发送的类型是文本格式
                  'fromname'=>'邮件发送方署名(本邮件来自csdn)',
                  'auth_username'=>REG_SMTP_USER,
                  'auth_password'=>REG_SMTP_PASS);
                  $mail = array(
               'to'=>'接收邮件的地址([email protected])',
               'subject'=>'邮件标题',
               'content'=>'我是要发送的邮件内容');
                      
    $rst = BMail::send($mailcfg,$mail);
    if(!$rst){
        echo 'mail fail';
    }else{
        echo 'mail succ!';
    }
    **********/
    ?> 
    希望对你有所帮助!