[python] odeslání e-mailu přes Lotus Notes
Mix
mix na svobodnik.cz
Pátek Listopad 6 11:46:30 CET 2009
dobrý den,
prosím o radu potřebuji odesílat automaticky e-mail přes lotus a chtěl
jsem k tomu použít modul simplemapi.py
který zavolám souborem odeslat.py
e-mail se sice vytvoří, vloží se tam přílohy, předmět a tělo, ale
nezobrazí se tam e-mailové adresy a neodešle se.
prosím poradíte jak to udělat. nebo nějaké jiné řešení.
aby to fungovalo alespoň takto tak musí být lotus spuštěn, takže jestli
by bylo možné to odesílat i bez spuštěného lotusu tak by to bylo úplně super
děkuji
Pavel svobodník
_*odeslat.py
------------------------------------------------------------------------------------
*_
import simplemapi
simplemapi.SendMail("xx na xx.cz","predmet","telo XXX","c:\\aa.txt")
_*simplemapi.py
*__*------------------------------------------------------------------------------------*_
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(Structure):
_fields_ = [('voidptr', c_void_p)]
NULL = c_void_p(None)
#NULL=STRUCT( None ) # Create an instance with voidptr field NULL
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
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.SendMail("to1address na server.com;to2address na 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)
print RecipWork
print RecipCnt
# Formulate the recipients
MapiRecipDesc_A = MapiRecipDesc * len(RecipWork)
rda = MapiRecipDesc_A()
print rda
print lpMapiRecipDesc
print cast(NULL, lpMapiRecipDesc)
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)
print msg
rc = MAPISendMail(0, 0, byref(msg), 0, 0)
if rc != SUCCESS_SUCCESS:
raise WindowsError, "MAPI error %i" % rc
Další informace o konferenci Python