Hi Lenard
Hopefully I have understood you properly.
The updated script is now as follows, or you can download it from
http://www.kirbyfooty.com/simplemapi.py
Thanks again for all your help!!!
Kindest regards
Ian Cook
--------------------------------------------------------------------------
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
class STRUCT(Structur e):
_fields_ = [('voidptr', c_void_p)]
#NULL = c_void_p(None)
NULL=STRUCT( None ) # Create an instance with voidptr field NULL
class MapiRecipDesc(S tructure):
_fields_ = [('ulReserved', c_ulong),
('ulRecipClass' , c_ulong),
('lpszName', c_char_p),
('lpszAddress', c_char_p),
('ulEIDSize', c_ulong),
('lpEntryID', c_void_p),
]
lpMapiRecipDesc = POINTER(MapiRec ipDesc)
class MapiFileDesc(St ructure):
_fields_ = [('ulReserved', c_ulong),
('flFlags', c_ulong),
('nPosition', c_ulong),
('lpszPathName' , c_char_p),
('lpszFileName' , c_char_p),
('lpFileType', c_void_p),
]
lpMapiFileDesc = POINTER(MapiFil eDesc)
class MapiMessage(Str ucture):
_fields_ = [('ulReserved', c_ulong),
('lpszSubject', c_char_p),
('lpszNoteText' , c_char_p),
('lpszMessageTy pe', c_char_p),
('lpszDateRecei ved', c_char_p),
('lpszConversat ionID', c_char_p),
('flFlags', FLAGS),
('lpOriginator' , lpMapiRecipDesc ), # ignored?
('nRecipCount', c_ulong),
('lpRecips', lpMapiRecipDesc ),
('nFileCount', c_ulong),
('lpFiles', lpMapiFileDesc) ,
]
lpMapiMessage = POINTER(MapiMes sage)
MAPI = windll.mapi32
MAPISendMail=MA PI.MAPISendMail
MAPISendMail.re stype = c_ulong # Error code
MAPISendMail.ar gtypes = (LHANDLE, # lhSession
c_ulong, # ulUIParam
lpMapiMessage, # lpMessage
FLAGS, # lpFlags
c_ulong, # ulReserved
)
def SendMail(recipi ent, subject, body, attachfiles):
"""Post an e-mail message using Simple MAPI
Special thanks to Lenard Lindstrom!
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.Send Mail("to******* *@server.com;to ********@server .com","My
Subject","My message body","c:\attac hment1.txt;c:\a ttchment2")
"""
# get list of file attachments
attach = []
AttachWork = attachfiles.spl it(';')
#verify the attachment file exists
for file in AttachWork:
if os.path.exists( file):
attach.append(f ile)
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
--------------------------------------------------------------------------------