Python To Send Emails Via Outlook Express

Lenard Lindstrom len-1 at telus.net
Thu Dec 23 21:34:18 CET 2004


ian at kirbyfooty.com writes:

> Hi Lenard,
> 
> As the risk of severely embarassing myself can I ask for your help one
> more time.
> I have tried changing your script to include attachments, but guess
> what, (and this should come as no suprise) I can't do it.
> So....
> Here is my feeble attempt at changing the script..

Actually the only real problem is with the lpFiles argument
to the MapiMessage constructor call.

> ----------------------------------------------------------------------------------------
[snip]
> 
> def SendMail(recipient, subject, body, attach=[]):
> """Post an e-mail message using Simple MAPI
> 
> 
> recipient - string: address to send to
> subject - string: subject header
> body - string: message text
> attach - string: files to attach
> """
> 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

Add this else clause to the "if attach:"

    else:
        # No attachments
        lpFiles = cast(NULL, lpMapiFileDesc) # Make NULL

> 
> 
> recip = MapiRecipDesc(0, MAPI_TO, None, recipient, 0, None)
> #msg = MapiMessage(0, subject, body, None, None, None, 0,
> #                 cast(NULL, lpMapiRecipDesc), 1, pointer(recip),
> #                 nFileCount, cast(NULL, lpMapiFileDesc))
> msg = MapiMessage(0, subject, body, None, None, None, 0,
> cast(NULL, lpMapiRecipDesc), 1, pointer(recip),
> nFileCount, cast(NULL, lpFiles))

Replace "cast(NULL, lpFiles)" with "lpFiles".
> 
> 
> rc = MAPISendMail(0, 0, byref(msg), 0, 0)
> if rc != SUCCESS_SUCCESS:
> raise WindowsError, "MAPI error %i" % rc

And that is it.

The "cast(NULL, lpFiles)" was a way of assigning a null value to
the lpFiles member of the MapiMessage structure. Using None did
not work. But recasting a c_void_p(None) did.

Lenard Lindstrom
<len-l at telus.net>



More information about the Python-list mailing list