class faxlib: import ftplib import string import os import tempfile import cStringIO host='' port=4559 user='' passwd='' ftp_object=ftplib.FTP() def connect(self,host,port,user,passwd=''): self.host=host self.port=port self.user=user self.passwd=passwd result=self.ftp_object.connect(host,port) if result[0:3]=='220': result=self.login() if result==1: return 1 else: return -1,"login error!" else: return -1,result[4:] def login(self): result=self.ftp_object.login(self.user,self.passwd) if result[0:3]=='230': return 1 else: return -1 def get_jobid(self,par_string): import string result=par_string[self.string.find(par_string,"jobid:")+6:self.string.find(par_string,"groupid:")] #if the end of jobid string have backsapce or blank character ,it may cause error result=self.string.strip(result) return result def put_file(self,source_file): import string #from socket import * #s_socket=socket(AF_INET,SOCK_STREAM) import socket s_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) fd=open(source_file,'r') if fd<0: return -1,"file open error!" else: s_line=self.ftp_object.sendcmd('pasv') pasv_port=self.parse_pasv_port(s_line) if pasv_port <0: return -1,"set passive mode error!" else: s_socket.connect((self.host,pasv_port)) s_line=self.ftp_object.sendcmd("stot") filename_begin=s_line.find(":")+1 filename_end=s_line.find("(") filename=s_line[filename_begin:filename_end] filename=string.strip(filename) line=fd.readline() while line: s_socket.send(line) line=fd.readline() s_socket.close() fd.close() self.ftp_object.getline() return 1,filename def get_file(self,source,target_file): result=self.ftp_object.retrbinary('retr '+source,open(target_file,'wb').write) if result[0:3]=='226': return 1 else: return -1 def send_fax(self,dialstring,fax_file,notifyaddr='',jobfmt=''): from time import localtime,time,strftime #ps files is a ascii file result_flag,result_message=self.put_file(fax_file) if result_flag: filename=result_message error_flag=0 error_status='' if not result_flag: error_flag=1 error_status='upload file error!' if not error_flag: result=self.ftp_object.sendcmd('job default') print "job default:"+result if result[0:3]<>'200': error_flag=1 error_status='[job default] command fail!' if not error_flag: result=self.ftp_object.sendcmd('jnew') if result[0:3]<>'200': error_flag=1 error_status='[jnew] command fail!' else: jobid=self.get_jobid(result) print "jobid:"+jobid if not error_flag: result=self.ftp_object.sendcmd("JPARM DIALSTRING "+dialstring) print result if result[0:3]<>'213': error_flag=1 error_status='[jparm dialstring] command fail!' if not error_flag: result=self.ftp_object.sendcmd('jparm lasttime 000300') if result[0:3]<>'213': error_flag=1 error_status='[jparm lasttime] command fail!' if not error_flag: result=self.ftp_object.sendcmd('jparm document '+filename) print result if result[0:3]<>'200': error_flag=1 error_status='[jparm document] command fail!' if not error_flag: if len(notifyaddr)>0: result=self.ftp_object.sendcmd('jparm NOTIFYADDR '+notifyaddr) if result[0:3]<>'213': error_flag=1 error_status='[jparm NOTIFYADDR] command fail!' if not error_flag: if len(jobfmt)>0: result=self.ftp_object.sendcmd('jobfmt '+jobfmt) if result[0:3]<>'200': error_flag=1 error_status='[jobfmt] command fail!' if not error_flag: result=self.ftp_object.sendcmd('jsubm '+jobid) if result[0:3]<>'200': error_flag=1 error_status='[jsubm] command fail!' if error_flag: return -1,error_status else: return 1,jobid def query_recvq(self): ret_value=self.cStringIO.StringIO() result=self.ftp_object.retrlines('LIST /recvq',ret_value.write) if result[0:3]<>'226': return -1,'[LIST /recvq] command fail!' else : return 1,ret_value def query_sendq(self): ret_value=self.cStringIO.StringIO() result=self.ftp_object.retrlines('LIST /sendq',ret_value.write) if result[0:3]<>'226': return -1,'[LIST /sendq] command fail!' else: return 1,ret_value def query_doneq(self): ret_value=self.cStringIO.StringIO() result=self.ftp_object.retrlines('LIST /doneq',ret_value.write) if result[0:3]<>'226': return -1,'[LIST /doneq] command fail!' else: return 1,ret_value def query_recvq_list(self): return self.ftp_object.nlst('recvq') def get_recv(self,filename): error_flag=0 error_status temp_dir=self.os.getenv('winbootdir') if len(temp)==0: temp_file='c:\\'+filename else: temp_file=temp_dir+"\\"+filename file_list=query_recvq_list() if self.string.count(file_list,filename)>0: result=self.get_file(filename,temp_file) if not result: error_flag=0 error_status="get file fail!" else : error_flag=1 error_status="file not found !" if error_flag==0: return 1,temp_file else: return -1,error_status def parse_pasv_port(self,s_line): import string port_begin=s_line.find("(")+1 port_end=s_line.find(")") host_port=string.split(s_line[port_begin:port_end],",") pasv_port=string.atoi(host_port[4])*256+string.atoi(host_port[5]) return pasv_port def abort_fax(self,jobid): self.ftp_object.sendcmd('jkill ',jobid) self.ftp_object.sendcmd('jdele ',jobid) def quit(self): self.ftp_object.quit()