Lenard Lindstrom wrote:
[EMAIL PROTECTED] 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("[EMAIL PROTECTED];[EMAIL PROTECTED]","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
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to