首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

关于python的两个难题,该如何解决

2012-02-13 
关于python的两个难题有两个问题不知如何解决。一、ftp编程时,如何返回ftpserver上的目录列表?二、发送mail时

关于python的两个难题
有两个问题不知如何解决。

一、ftp编程时,如何返回ftp   server上的目录列表?

二、发送mail时,smtp服务器要验证,该如何写代码发送邮件?

python虽然大家吹捧的挺厉害,但是我想可能就是跨平台、web编程稍微好一点,功能也并不十分强大,win平台下做什么事情的话,还是delphi来一下,感觉更爽。

[解决办法]
第一个很简单就不用说了,
第二个看我自己写的代码:
#************************************
#SMTP operation
#************************************
def smtpinit(self, sname, user, passwd, port = 25):
self.smtpsname = sname
self.smtpuser = user
self.smtppasswd = passwd
self.smtpport = port

def _smtpconnect(self):
self.smtpserver = smtplib.SMTP(self.smtpsname)
self.smtpserver.login(self.smtpuser,self.smtppasswd)

def smtpmailconfig(self, mto, mfrom, mheader, mmsg, msub, mcharset= 'utf8 ', mtype= 'plain ', mafile= ' '):
self.mailto = mto
self.mailfrom = mfrom
self.mailheader = mheader
self.mailmsg = mmsg
self.mailsub = msub
self.mailcharset = mcharset
self.mailtpye = mtype
self.mailafile = mafile

def smtpsend(self):
outer = MIMEMultipart()
#msg=email.Message.Message() #一个实例
outer[ 'Date ']=time.ctime() #时间日期
#outer[ 'To ']=COMMASPACE.join(To) #发送到哪里
outer[ 'To ']=self.mailto #发送到哪里
outer[ 'From ']=self.mailfrom #自己的邮件地址
#outer[ 'Subject ']=email.Header.Header( 'python_email_测试 ', 'gb2312 ')
outer[ 'Subject ']=email.Header.Header(self.mailheader,self.mailcharset)

#in testing***********************************
outer.preamble = 'You will not see this in a MIME-aware mail reader.\n '
outer.epilogue = ' '
#*********************************************

#msg=MIMEText( '******************邮件内容测试 ',_subtype= 'plain ',_charset= 'utf8 ')
msg=MIMEText(self.mailmsg, _subtype=self.mailtpye, _charset=self.mailcharset)

outer.attach(msg)

#如果有附件则添加附件
if self.mailafile != ' ':

ctype, encoding = mimetypes.guess_type(self.mailafile)
if ctype is None or encoding is not None:
ctype = 'application/octet-stream '
maintype, subtype = ctype.split( '/ ', 1)
# msg=MIMEText(open( 'D:\work\linsoft\project\python_mail\python_mail.py ', 'r ').read(),_subtype=subtype)
msg=MIMEText(open(self.mailafile, 'rb ').read(),_subtype= 'base64 ', _charset=self.mailcharset)
# Encoders.encode_base64(msg)
# msg.replace_header( 'Content-type ', 'application/txt;name= "python_mail.py " ')
rheader = 'application/ '+subtype+ ';name= " '+os.path.basename(self.mailafile)+ ' " '
msg.replace_header( 'Content-type ',rheader)

# msg.add_header( 'Content-type ', 'attachment;name= "python_mail.py " ')
aheader = 'attachment;name= " '+os.path.basename(self.mailafile)+ ' " '
msg.add_header( 'Content-type ',aheader)

if self.debuglevel > 0: print 'ctype= ',ctype
if self.debuglevel > 0: print 'subtype= ',subtype
if self.debuglevel > 0: print 'header= ',rheader


if self.debuglevel > 0: print 'aheader= ',aheader
if self.debuglevel > 0: print 'msg= ',msg

outer.attach(msg)

self.smtpserver=smtplib.SMTP(self.smtpsname) #你发送服务器的地址
self.smtpserver.login(self.smtpuser, self.smtppasswd) #用户名和密码

# server.sendmail(self.mailfrom,self.mailto,msg.as_string()+body.as_string())
self.smtpserver.sendmail(self.mailfrom,self.mailto,outer.as_string())

if self.debuglevel > 0: print outer.as_string()
[解决办法]
首先建议参看ESMTP的RFC文档,或者参看一本叫做《Internet Email编程》的书。

在已知mail服务器需要验证的前提下,如下:
import smtplib
server = smptlib.SMTP( "smpt.sohu.com ")
server.ehlo()
server.login( "username ", "password ")

ehlo方法的调用是可选的,如果在调用login方法之前没有调用ehlo,那么login会替你完成此项工作。ehlo方法的返回值包含mail服务器对ehlo命令的相应文本,从中能够判断出mail服务器是否需要登录验证。

热点排行