在输入base64的用户名和密码时,怎么smtp.163.com的不需要+CRLF,
而一般的服务器需要发送base64(user)+"\r\n"和base64(pass)+"\r\n"呢?
运行环境: python2.4+winXP
from socket import *
import base64
def Myconnect():
clientsock = socket(AF_INET, SOCK_STREAM)
clientsock.connect((’smtp.163.com’,25))
#***************************************
rv = clientsock.recv(1024)
print "RECV: " + rv
#***************************************
sd = ‘EHLO moloto@163.com\r\n’
print "SEND: " + sd
clientsock.send(sd)
rv = clientsock.recv(1024)
print "RECV: " + rv
#***************************************
sd = ‘auth login\r\n’
print "SEND: " + sd
clientsock.send(sd)
rv = clientsock.recv(1024)
print "RECV: " + rv
#***************************************
user = ‘username’
pw = ‘password’
sendto = ‘<moloto@163.com>\r\n’
sub = ‘主题’
body = ‘你好,这里是从Python发出的信件’
sd = base64.encodestring(user)
print "SEND: " + sd
clientsock.send(sd)
# clientsock.send(‘\r\n’)
rv = clientsock.recv(1024)
print "RECV: " + rv
sd = base64.encodestring(pw)
print "SEND: " + sd
clientsock.send(sd)
# clientsock.send(‘\r\n’)
rv = clientsock.recv(1024)
print "RECV: " + rv
#***************************************
sd = ‘mail from:<moloto@163.com>\r\n’
print "SEND: " + sd
clientsock.send(sd)
rv = clientsock.recv(1024)
print "RECV: " + rv
#***************************************
#***************************************
sd = ‘RCPT TO:’+sendto+’\r\n’
print "SEND: " + sd
clientsock.send(sd)
rv = clientsock.recv(1024)
print "RECV: " + rv
#***************************************
sd = ‘DATA\r\n’
print "SEND: " + sd
clientsock.send(sd)
rv = clientsock.recv(1024)
print "RECV: " + rv
#***************************************
sd = ’subject:’+sub+’\r\n’
print "SEND: " + sd
clientsock.send(sd)
sd = ‘\r\n’
print "SEND: " + sd
clientsock.send(sd)
sd = body
print "SEND: " + sd
clientsock.send(sd)
sd = ‘\r\n.\r\n’
print "SEND: " + sd
clientsock.send(sd)
rv = clientsock.recv(1024)
print "RECV: " + rv
#***************************************
sd = ‘QUIT\r\n’
print "SEND: " + sd
clientsock.send(sd)
rv = clientsock.recv(1024)
print "RECV: " + rv
#***************************************
clientsock.close()
raw_input("")
if __name__ == ‘__main__’:
Myconnect()
