2005年11月07日

在输入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()