作家
登录

telnet smtp 535 Error的分析和解决

作者: 来源: 2012-06-20 21:53:11 阅读 我要评论

telnet可以帮助我们连接SMTP服务器,不少人都会尝试这个方法来进行服务器的连接。但是也有很多朋友发现其中会出现很多错误。今天我们就来讲解一下telnet smtp 535 Error的错误内容和解决方法。通过telnet smtp服务器的25端口检查smtp服务器是否可用,或用程序采用socket通讯的方法与smtp服务器直接交互,往往在验证用户的时候出现这样的错误提示535 Error: authentication failed

这是因为当服务器要求客户端输入帐号,密码时必须是经过base64码转换的.有的人也转换了,但不知道为什么还出这种问题,实际上是因为你的转换没有成功.这种失败用.net socket编程时就比较多见.而用php作为工具进行转换就容易成功.笔者作过试验,在.net中,由于没有现成的Base64编码函数,于是从网上下了一个函数,用此函数对邮箱帐号,密码进行编码,在php中,有一个函数base64_encode() 可以直接调用,用php的函数直接对邮箱帐号,密码进行编码。结果发现两种结果不一样,主要体现在对帐号的上,这两种方式对后缀@163.com 编码效果就不一样,最后用telnet作测试,发现用php自带的base64_encode() 编码的结果是正确的.

这里还要提到两个有趣的现象:

1.很多人认为用telnet 25 或socket 通讯的方式与smtp服务器交互,可以确认某个邮件帐号是否存在,例如输入想要测试的邮箱帐号,再随便输个密码,希望服务器返回帐号密码错误的信息,以确认邮箱的确存在.但实际上这种方法多数情况下是不行的.因为即使帐号存在,密码错误,或帐号错误返回的信息都是一样的,都是:telnet smtp 535 Error: authentication failed.从而无法判断.

2.另一个是php和.net语法的的比较.php的确比.net语法上简单多了.

例如要实现socket通讯,

.net 的语法是:

建立连接:

TcpCliet client = new TcpClient(server,port);

NetWorkStream stream = client.GetStream();

发送数据:

byte[] arrayToSend=System.Text.Encoding.Default.GetBytes(stringToSend.ToCharArray());

stream.Write(arrayToSend,0,arrayToSend.Length);

得到数据:

int len = stream.Read(bb,0,bb.Length);

string read=System.Text.Encoding.UTF8.GetString(bb);

string result= read.Substring(0, len);

php就一句,类似:

建立连接

$fp=fsockopen ( $this->smtp, 25, $errno, $errstr, 60);

发送数据

fputs($fp, $lastact);

取数据

$lastmessage == fgets($fp,512);

再如要实现字符串转换为base64格式

.net

没现成的(可能是我不知道),还要从网上下一个函数,编译到自己的工程中.

php

提供了base64_encode() 搞定.其实这也体现了.net的确比较严谨,主要是对类,类型转换很严格,但的确是麻烦,也不好记.希望以上的方法,能够帮助大家解决telnet smtp 535 Error的问题。


  推荐阅读

  Telnet 1433端口不通之端口的监听

Telnet服务无法启动和连接,就直接影响了我们的使用。那么,前面我们分析了一部分Telnet 1433端口不通的原因。这里我们主要讲解一下如何检查1433是否在监听?或者检查有哪些端口在监听?那么希望文章的内容能够帮助到大>>>详细阅读


本文标题:telnet smtp 535 Error的分析和解决

地址:http://www.17bianji.com/xieyi/6016.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)