在http://hi.baidu.com/kwunkuklan/blog/item/455f121749120a044b90a75e.html这个网址看到了如何使用telnet登录到163的smtp服务器.
里面提到在认证账号和密码时要使用base64格式的字符。
我在visual studio 2005里使用以下代码获得base64格式字符:
string temp = "username";
byte[] b = Encoding.Unicode.GetBytes(temp);
string s = Convert.ToBase64String(b);
但是将获得的账号和密码发送到163的smtp服务器后,服务器返回认证失败。因为我用的是xp,而介绍里使用的是linux,所以觉得应该是编码的问题。在visual studio里使用同样的代码转化前面网址里在介绍时使用的用户名,转化的结果与介绍里的转化结果不同。数了一下位数,发现在visual studio里转化的结果的位数正好是linux里的2倍。看来有可能是使用Encoding.Unicode的原因。Unicode貌似是两个字节表示一个字符,不论这个字符是英文还是汉字。而linux貌似仍旧使用比较老的编码,还是一个字节表示一个字符。
如果这个猜想对的话,163的smtp服务器使用的编码应该与linux上的一样,也是比较老的,没有采用Unicode。
果然如果采用如下编码转化的话就与linux下的结果一样了。
string temp = "crazywill";
byte[] b = Encoding.UTF8.GetBytes(temp);
string s = Convert.ToBase64String(b); //s="Y3Jhenl3aWxs"
我再用上面的方法获得我的账号密码的base64格式字符,认证时也获得了成功。