我愿意出我所有的分解决发邮件的问题,代码已写好,帮忙看看哪有问题!!!!

时间:2021-02-05 21:22:54
我用的sendmail.inc这个类!
发邮件的程序为:
$mail=new SendMail();  //初始化mail主体
$smtpServer="202.205.161.3";  //这里为smtp服务器地址.
$mail->from = "liut@crtvu.edu.cn";
$mail->to=$rs["mail"];
$mail->subject="用户".getUserName()."的课件超市订单";
$mail->body="正文";
$data=$mail->getMail(); 
$mail->authLoginName     = "liut";
$mail->authLoginPassword = "******";
$mail->debugMode=true;  //debug模式
$mail->authMode=true;   //smtp服务器验证模式(如果服务器要验证才需要)
$success = $mail->send($smtpServer,$mail->from,$mail->to,$data);  //发送邮件

如果不写authLoginName,也就是用户名和密码,把authMode改为false那只能发送后缀为@crtvu.edu.cn的邮件,都能成功,但如果发到其他的,好比liut@tcl.com就不可以,所以我把authMode=true,把用户名和密码写上了,密码肯定没问题,谁用过?能帮我!!!!!!!!!!!!!!!!!我很着急啊,希望各位朋友帮忙!

QQ:68497170
希望各位指点,谢谢

8 个解决方案

#1


现在的发送信息为:
CONNECTING 202.205.161.3 ...Succeed!
RESPONSE: 220 mail.crtvu.edu.cn Microsoft ESMTP MAIL Service, Version: 5.0.2195.5329 ready at Wed, 11 Jun 2003 16:16:06 +0800 
CWD: HELO 
RESPONSE: 250 mail.crtvu.edu.cn Hello [202.205.161.99] 
CWD: AUTH LOGIN 
RESPONSE: 503 5.5.2 Send hello first. 
CWD: bGl1dA== 
RESPONSE: 500 5.3.3 Unrecognized command 
CWD: MjUxOTEz 
RESPONSE: 500 5.3.3 Unrecognized command 
CWD: MAIL FROM: liut@crtvu.edu.cn 
RESPONSE: 250 2.1.0 liut@crtvu.edu.cn....Sender OK 
SMTP Protocol failure (250 2.1.0 liut@crtvu.edu.cn....Sender OK ).


但收不到邮件!
RESPONSE: 500 5.3.3 Unrecognized command 是怎么个意思?

#2


up

#3


class SendMail拿来看看呀

#4


auth login后,用户名与密码以base64编码发送,本人在sina vip通过,
另外对方也可能使用其它编码方式发送用户名或密码,

给我一个用户名密码?

#5


220 mail.crtvu.edu.cn Microsoft ESMTP MAIL Service, Version: 5.0.2195.5329 ready
 at  Wed, 11 Jun 2003 18:32:11 +0800
250-mail.crtvu.edu.cn Hello [61.149.53.153]
250-TURN
250-ATRN
250-SIZE
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250-X-EXPS GSSAPI NTLM LOGIN
250-X-EXPS=LOGIN
250-AUTH GSSAPI NTLM LOGIN
250-AUTH=LOGIN
250-X-LINK2STATE
250-XEXCH50
250 OK
500 5.3.3 Unrecognized command
334 VXNlcm5hbWU6
334 UGFzc3dvcmQ6
535 5.7.3 Authentication unsuccessful.

#6


如果只是发信的话就别用smtp转发了
目前smtp转发都需要用户名和密码验证,很烦很烦的
不如直接发到对方信箱所在的服务器
我搞了一天终于弄明白其中的奥秘
不需smtp转寄 则你要知道对方的服务器地址
例如 one@abc.com 要知道abc.com主机的邮件主机ip
 要得到此ip需要得到abc.com这个域的mx纪录,mx记录了邮件服务器的地址
通常有好几个,备用
选择其中一个能用的发信过去就可以了,这个时候是绝对不会来问你密码的
得到mx记录的php函数是getmxrr(),不过windows下没有这个函数
用nslookup能得到mx纪录,不过是外部命令
linux下没有问题,win32下要调用exec()来执行nslookup -type=mx abc.com. 来查询mx
具体程序还没有
不过我用telnet发信成功,相信用php的socket也没问题

#7


说明:this为smtp类,$smtp为smtp连接handle

function smtp_auth_login($smtp)
{

        //auth login
        fputs($smtp,"AUTH LOGIN\r\n");

        $line = fgets($smtp, 1024);
        
        //echo "auth_login".$line;
        
$this->sessionlog .= "Rcvd: $line";

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] = substr($line, 0, 1);

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULTTXT'] = substr($line, 0, 1024);

        //334
if ($SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] <>  '3')

return new Exception($html_smtp_error_unexpected." ".$line);



        //user  以base64编码发送用户名和密码

        //echo "smtp_user".$this->smtp_user;
        //echo "smtp_pass".$this->smtp_pass;

        fputs($smtp,base64_encode($this->smtp_user)."\r\n");

        $line = fgets($smtp, 1024);
        
        //echo "user:".$line;

$this->sessionlog .= "Rcvd: $line";

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] = substr($line, 0, 1);

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULTTXT'] = substr($line, 0, 1024);

        //334
if ($SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] <>  '3')

return new Exception($html_smtp_error_unexpected." ".$line);



        //pass
        fputs($smtp,base64_encode($this->smtp_pass)."\r\n");
        
        //fputs($smtp,"PASS $this->smtp_pass\r\n");

        $line = fgets($smtp, 1024);

//echo "pass:".$line;

        $this->sessionlog .= "Rcvd: $line";

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] = substr($line, 0, 1);

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULTTXT'] = substr($line, 0, 1024);

        //235 Authtication successful
if ($SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] <>  '2')

return new Exception($html_smtp_error_unexpected." ".$line);

return (true);


    }

#8


function smtp_auth_login($smtp)
{

        //auth login
        fputs($smtp,"AUTH LOGIN\r\n");

        $line = fgets($smtp, 1024);
        
        echo "auth_login".$line;

        //user  以base64编码发送用户名和密码

        //echo "smtp_user".$this->smtp_user;
        //echo "smtp_pass".$this->smtp_pass;

        fputs($smtp,base64_encode($this->smtp_user)."\r\n");

        $line = fgets($smtp, 1024);
        
        echo "user:".$line;

        //password
        fputs($smtp,base64_encode($this->smtp_pass)."\r\n");
        
        $line = fgets($smtp, 1024);

        echo "pass:".$line;

        return (true);

}

#1


现在的发送信息为:
CONNECTING 202.205.161.3 ...Succeed!
RESPONSE: 220 mail.crtvu.edu.cn Microsoft ESMTP MAIL Service, Version: 5.0.2195.5329 ready at Wed, 11 Jun 2003 16:16:06 +0800 
CWD: HELO 
RESPONSE: 250 mail.crtvu.edu.cn Hello [202.205.161.99] 
CWD: AUTH LOGIN 
RESPONSE: 503 5.5.2 Send hello first. 
CWD: bGl1dA== 
RESPONSE: 500 5.3.3 Unrecognized command 
CWD: MjUxOTEz 
RESPONSE: 500 5.3.3 Unrecognized command 
CWD: MAIL FROM: liut@crtvu.edu.cn 
RESPONSE: 250 2.1.0 liut@crtvu.edu.cn....Sender OK 
SMTP Protocol failure (250 2.1.0 liut@crtvu.edu.cn....Sender OK ).


但收不到邮件!
RESPONSE: 500 5.3.3 Unrecognized command 是怎么个意思?

#2


up

#3


class SendMail拿来看看呀

#4


auth login后,用户名与密码以base64编码发送,本人在sina vip通过,
另外对方也可能使用其它编码方式发送用户名或密码,

给我一个用户名密码?

#5


220 mail.crtvu.edu.cn Microsoft ESMTP MAIL Service, Version: 5.0.2195.5329 ready
 at  Wed, 11 Jun 2003 18:32:11 +0800
250-mail.crtvu.edu.cn Hello [61.149.53.153]
250-TURN
250-ATRN
250-SIZE
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250-X-EXPS GSSAPI NTLM LOGIN
250-X-EXPS=LOGIN
250-AUTH GSSAPI NTLM LOGIN
250-AUTH=LOGIN
250-X-LINK2STATE
250-XEXCH50
250 OK
500 5.3.3 Unrecognized command
334 VXNlcm5hbWU6
334 UGFzc3dvcmQ6
535 5.7.3 Authentication unsuccessful.

#6


如果只是发信的话就别用smtp转发了
目前smtp转发都需要用户名和密码验证,很烦很烦的
不如直接发到对方信箱所在的服务器
我搞了一天终于弄明白其中的奥秘
不需smtp转寄 则你要知道对方的服务器地址
例如 one@abc.com 要知道abc.com主机的邮件主机ip
 要得到此ip需要得到abc.com这个域的mx纪录,mx记录了邮件服务器的地址
通常有好几个,备用
选择其中一个能用的发信过去就可以了,这个时候是绝对不会来问你密码的
得到mx记录的php函数是getmxrr(),不过windows下没有这个函数
用nslookup能得到mx纪录,不过是外部命令
linux下没有问题,win32下要调用exec()来执行nslookup -type=mx abc.com. 来查询mx
具体程序还没有
不过我用telnet发信成功,相信用php的socket也没问题

#7


说明:this为smtp类,$smtp为smtp连接handle

function smtp_auth_login($smtp)
{

        //auth login
        fputs($smtp,"AUTH LOGIN\r\n");

        $line = fgets($smtp, 1024);
        
        //echo "auth_login".$line;
        
$this->sessionlog .= "Rcvd: $line";

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] = substr($line, 0, 1);

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULTTXT'] = substr($line, 0, 1024);

        //334
if ($SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] <>  '3')

return new Exception($html_smtp_error_unexpected." ".$line);



        //user  以base64编码发送用户名和密码

        //echo "smtp_user".$this->smtp_user;
        //echo "smtp_pass".$this->smtp_pass;

        fputs($smtp,base64_encode($this->smtp_user)."\r\n");

        $line = fgets($smtp, 1024);
        
        //echo "user:".$line;

$this->sessionlog .= "Rcvd: $line";

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] = substr($line, 0, 1);

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULTTXT'] = substr($line, 0, 1024);

        //334
if ($SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] <>  '3')

return new Exception($html_smtp_error_unexpected." ".$line);



        //pass
        fputs($smtp,base64_encode($this->smtp_pass)."\r\n");
        
        //fputs($smtp,"PASS $this->smtp_pass\r\n");

        $line = fgets($smtp, 1024);

//echo "pass:".$line;

        $this->sessionlog .= "Rcvd: $line";

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] = substr($line, 0, 1);

$SMTP_GLOBAL_STATUS[$smtp]['LASTRESULTTXT'] = substr($line, 0, 1024);

        //235 Authtication successful
if ($SMTP_GLOBAL_STATUS[$smtp]['LASTRESULT'] <>  '2')

return new Exception($html_smtp_error_unexpected." ".$line);

return (true);


    }

#8


function smtp_auth_login($smtp)
{

        //auth login
        fputs($smtp,"AUTH LOGIN\r\n");

        $line = fgets($smtp, 1024);
        
        echo "auth_login".$line;

        //user  以base64编码发送用户名和密码

        //echo "smtp_user".$this->smtp_user;
        //echo "smtp_pass".$this->smtp_pass;

        fputs($smtp,base64_encode($this->smtp_user)."\r\n");

        $line = fgets($smtp, 1024);
        
        echo "user:".$line;

        //password
        fputs($smtp,base64_encode($this->smtp_pass)."\r\n");
        
        $line = fgets($smtp, 1024);

        echo "pass:".$line;

        return (true);

}