Python To Send Emails Via Outlook Express

Max M maxm at mxm.dk
Fri Dec 24 20:12:57 CET 2004


Lenard Lindstrom wrote:
> ian at kirbyfooty.com writes:
> 
> 
>>Hi Lenard,
>>You just beat me to it.
>>Suprise, suprise, I discovered the answer myself this time.
>>
>>I have modified the script to allow the attachment(s) to still be
>>passed as a string.
>>Some error checking is also done to verify the attachment file exists.
>>
>>I have also modified it so it can be used for multiple email addresses.
>>
>>Here is the updated working script ...
>>---------------------------------------------------------
>>
>>import os
>>from ctypes import *
>>
>>FLAGS = c_ulong
>>LHANDLE = c_ulong
>>LPLHANDLE = POINTER(LHANDLE)
>>
>>
>># Return codes
>>SUCCESS_SUCCESS = 0
>># Recipient class
>>MAPI_ORIG = 0
>>MAPI_TO = 1
>>
>>
>>NULL = c_void_p(None)
>>
>>
>>class MapiRecipDesc(Structure):
>>_fields_ = [('ulReserved', c_ulong),
>>('ulRecipClass', c_ulong),
>>('lpszName', c_char_p),
>>('lpszAddress', c_char_p),
>>('ulEIDSize', c_ulong),
>>('lpEntryID', c_void_p),
>>]
>>lpMapiRecipDesc = POINTER(MapiRecipDesc)
>>
>>
>>class MapiFileDesc(Structure):
>>_fields_ = [('ulReserved', c_ulong),
>>('flFlags', c_ulong),
>>('nPosition', c_ulong),
>>('lpszPathName', c_char_p),
>>('lpszFileName', c_char_p),
>>('lpFileType', c_void_p),
>>]
>>lpMapiFileDesc = POINTER(MapiFileDesc)
>>
>>
>>class MapiMessage(Structure):
>>_fields_ = [('ulReserved', c_ulong),
>>('lpszSubject', c_char_p),
>>('lpszNoteText', c_char_p),
>>('lpszMessageType', c_char_p),
>>('lpszDateReceived', c_char_p),
>>('lpszConversationID', c_char_p),
>>('flFlags', FLAGS),
>>('lpOriginator', lpMapiRecipDesc), # ignored?
>>('nRecipCount', c_ulong),
>>('lpRecips', lpMapiRecipDesc),
>>('nFileCount', c_ulong),
>>('lpFiles', lpMapiFileDesc),
>>]
>>lpMapiMessage = POINTER(MapiMessage)
>>
>>
>>MAPI = windll.mapi32
>>
>>
>>MAPISendMail=MAPI.MAPISendMail
>>MAPISendMail.restype = c_ulong          # Error code
>>MAPISendMail.argtypes = (LHANDLE,       # lhSession
>>c_ulong,       # ulUIParam
>>lpMapiMessage, # lpMessage
>>FLAGS,         # lpFlags
>>c_ulong,       # ulReserved
>>)
>>
>>
>>def SendMail(recipient, subject, body, attachfiles):
>>"""Post an e-mail message using Simple MAPI
>>
>>
>>recipient - string: address to send to (multiple address sperated
>>with a semicolin)
>>subject - string: subject header
>>body - string: message text
>>attach - string: files to attach (multiple attachments sperated
>>with a semicolin)
>>
>>Example usage
>>import simplemapi
>>
>>simplemapi.SendMail("to1address at server.com;to2address at server.com","My
>>Subject","My message body","c:\attachment1.txt;c:\attchment2")
>>
>>
>>"""
>>
>># get list of file attachments
>>attach = []
>>AttachWork = attachfiles.split(';')
>>
>>#verify the attachment file exists
>>for file in AttachWork:
>>if os.path.exists(file):
>>attach.append(file)
>>
>>
>>attach = map( os.path.abspath, attach )
>>nFileCount = len(attach)
>>
>>if attach:
>>MapiFileDesc_A = MapiFileDesc * len(attach)
>>fda = MapiFileDesc_A()
>>for fd, fa in zip(fda, attach):
>>fd.ulReserved = 0
>>fd.flFlags = 0
>>fd.nPosition = -1
>>fd.lpszPathName = fa
>>fd.lpszFileName = None
>>fd.lpFileType = None
>>lpFiles = fda
>>else:
>># No attachments
>>lpFiles = cast(NULL, lpMapiFileDesc) # Make NULL
>>
>># Get the number of recipients
>>RecipWork = recipient.split(';')
>>RecipCnt = len(RecipWork)
>>
>># Formulate the recipients
>>MapiRecipDesc_A = MapiRecipDesc * len(RecipWork)
>>rda = MapiRecipDesc_A()
>>for rd, ra in zip(rda, RecipWork):
>>rd.ulReserved = 0
>>rd.ulRecipClass = MAPI_TO
>>rd.lpszName = None
>>rd.lpszAddress = ra
>>rd.ulEIDSize = 0
>>rd.lpEntryID = None
>>recip = rda
>>
>># send the message
>>msg = MapiMessage(0, subject, body, None, None, None, 0,
>>cast(NULL, lpMapiRecipDesc), RecipCnt, recip,
>>nFileCount, lpFiles)
>>
>>
>>rc = MAPISendMail(0, 0, byref(msg), 0, 0)
>>if rc != SUCCESS_SUCCESS:
>>raise WindowsError, "MAPI error %i" % rc
>>-----------------------------------
> 
> 
> Looks good.
> 
> Lenard Lindstrom

Nice quoting

-- 

hilsen/regards Max M, Denmark

http://www.mxm.dk/
IT's Mad Science



More information about the Python-list mailing list