python script to windows exe
David C. Ullrich
dullrich at sprynet.com
Mon May 19 13:51:12 EDT 2008
On Mon, 19 May 2008 02:59:22 -0700 (PDT), sandeep
<shiningsandy at gmail.com> wrote:
>
>hi
>the py code that i have written is here.when i run this code i wont
>get any errors it just works fine for me.but when i created the exe i
>start getting an error in my 'getMailContent' function. The error
>description is
>
>TypeError:unsupported operand type(s) for :- 'instance' and 'int'
Are you and py2exe using the same version of Python?
(Make something in the exe that displays sys.version...)
>i dont know why i am start getting this error when i run it through
>the exe.
>
>
>import win32com,win32com.client
>import os,os.path
>import codecs
>import zipfile
>
>#@Author:::Sandeep Kumar Sharma
>
>#outlook application refrence
>outlook_app=0
>#outlook ids to access different folders look into msdn for more info.
>not a preffered way as i am hardcoding data here
>OlDefaultFolders={'olFolderCalendar':9,'olFolderConflicts':
>19,'olFolderContacts':10,'olFolderDeletedItems':3,'olFolderDrafts':
>16,'olFolderInbox':6,'olFolderJournal':11,'olFolderJunk':
>23,'olFolderLocalFailures':21,'olFolderNotes':12,'olFolderOutbox':
>4,'olFolderSentMail':5,'olFolderServerFailures':
>22,'olFolderSyncIssues':20,'olFolderTasks':
>13,'olPublicFoldersAllPublicFolders':18}
>#outlook types to save mailItem look into msdn for more info
>#although doesnot work for me :-(
>OlSaveAsType={'olTXT': 0,'olRTF':1,'olTemplate': 2,'olMSG': 3,'olDoc':
>4,'olHTML':5,'olVCard': 6,'olVCal':7,'olICal': 8};
>
>#refrence to content in inbox
>inbox_obj=0
>
>#function which will initialise outlook and return its reference
>def getAppRef():
> temp=win32com.client.Dispatch("OutLook.Application")
> return temp.GetNamespace("MAPI")
>
>#function to return the folders in the outlook
>def getOutLookFolders(a,b=OlDefaultFolders['olFolderInbox']):
> return a.GetDefaultFolder(b)
>
>#function to get email content
>def getMailContent(obj):
> txt_file=codecs.open('data.html',encoding='utf-8',mode='w')
> for kk in range(len(obj.Items),1,-1):
> #for kk in range(len(obj.Items-1),0,-1):
> #print 'hello'
> print 'writting file='+str(kk)
> mailItem=obj.Items[kk]
> writeData(mailItem,txt_file)
>
> #print mailItem.OlSaveAsType.olMSG
> #saveCopy(mailItem)
> #print "sender="+mailItem.SenderName+'
>SenderEmailId='+str(mailItem.SenderEmailAddress)+'
>Time='+str(mailItem.ReceivedTime)
> #print 'Subject='+mailItem.Subject+' size='+str(mailItem.Size)
>
> txt_file.close()
> '''
> file_zip=zipfile.ZipFile(txt_file,"w",zipfile.ZIP_DEFLATED)
> file_zip.write('data.log')
> file_zip.close()
> '''
>
>#function to create a directory
>#obviously not a best way :-( but i think can expected this sort of
>mistakes from beginners
>def createDir():
> path=os.path.abspath("\email")
> if(os.path.exists(path)):
> print "Directory already exists"
> else:
> os.system("md "+path)
>
>#function to save a copy of email
>def writeData(mailItem,file):
> data="<p>"
> sender='<h4>SenderName</
>h4>'+checkStringType(mailItem.SenderName)
> time='<br><h4>Time</
>h4>'+checkStringType(str(mailItem.ReceivedTime))
> attachment='<br><h5>Attachments Count</
>h5>'+str(len(mailItem.Attachments))
> edata='<h4>Email Content</h4>'+checkStringType(mailItem.Body)+"</
>p><hr/>"
> dataToWrite=data+sender+time+attachment+edata
> getAttachmentInfo(mailItem.Attachments)
> file.write(getHTMLString(dataToWrite))
> #checkStringType(dataToWrite)
>
>def getAttachmentInfo(atmts):
> for kk in range(1,len(atmts)):
> atmt=atmts[kk]
> #print "File Name="+atmt.FileName+'
>DisplayName='+atmt.DisplayName+' PathName='+atmt.PathName+' '
> abc=os.path.isdir(os.getcwd()+'\email')
>
> if(abc==True):
> print 'directory exists'
>
> else:
> os.mkdir(os.getcwd()+'\email')
>
> path=os.path.abspath(os.getcwd()+'\email')
> atmt.SaveAsFile(path+"\\"+atmt.DisplayName)
>
>
>
># function to check whether the character encoding is ascii or smthing
>else
>def checkStringType(a):
>
> if isinstance(a,str):
> b='not a unicode string'
>
> else:
> a.encode('utf-8')
> #print 'unicode type'
>
> return a
>
>#function to save the coopy of an email
>#:-( but smhow it generate error whenever i make a call to it
>def saveCopy(mailItem):
>
> name="\\"+mailItem.Subject+"__"+str(mailItem.ReceivedTime)
> print name
> #global outlook_app
> try:
> mailItem.SaveAs(path+name+".txt",OlSaveAsType['olTXT'])
> except BaseException:
> print BaseException
>
>def getHTMLString(b):
> a='<html><head><title>Your Email Data log is here</title></
>head><body>'+b+'</body></html>'
> return a
>
>#main entrance to the program
>def main():
> global outlook_app,inbox_obj
> outlook_app=getAppRef()
> #print outlook_app.OlSaveAsType.olMSG
> print '=================='
> print dir(outlook_app)
> print '=================='
> inbox_obj=getOutLookFolders(outlook_app)
> print dir(inbox_obj)
> print (inbox_obj.Items)
> #saveCopy(inbox_obj.Items[1])
> getMailContent(inbox_obj)
>
>
>
>main()
>
>
>my setup file has this code
>
>from distutils.core import setup
>import py2exe
>
>setup(console=['outlook.py'])
>
>
>i have just copied and pasted it from the tutorial available at the
>py2exe site and changed the filename with mine filename.
>
>
>thanks and regards
>sandeep kumar sharma
>
>> There is nothing special in executables produced by py2exe. I mean
>> that the debugging strategy is as always. A good start might be in
>> adding logging\tracing facilities both to script and the executable.
>> Comparing two trace files could give you some clue.
David C. Ullrich
More information about the Python-list
mailing list