PROGRAM ! Anruf: RUN('so_mapi.exe "EMail-Adresse|Absender Name|Empfänger Name|Pfad des Attechments|Name des Attechments"') MAP MODULE('mapi32.lib') ! Muss mit libmaker.exe hergestellt werden MAPILogoff(ULONG,ULONG,ULONG,ULONG),ULONG,PASCAL,RAW MAPILogon(ULONG,ULONG,ULONG,ULONG,ULONG,*ULONG),ULONG,RAW,PASCAL MAPISendMail(ULONG,ULONG,*GROUP,ULONG,ULONG),ULONG,RAW,PASCAL END Main ReadParam(*STRING),STRING END CODE Main RETURN !----------------------------------------------------------------------------------------------- Main PROCEDURE MAPI_LOGON_UI EQUATE(00000001h) ! Dispay logon UI MAPI_NEW_SESSION EQUATE(00000002h) ! Do not use default. MAPI_DIALOG EQUATE(00000008h) ! Display a send note UI MapiMessageType GROUP,TYPE ! MESSAGE DESCRIPTOR ulReserved ULONG ! Reserved, must be 0. lpszSubject ULONG ! Pointer to subject, CSTRING max 256 chars. lpszNoteText ULONG ! Pointer to text, CSTRING, CR at paragraphs. lpszMessageType ULONG ! Pointer to message type, null is default. lpszDateReceived ULONG ! Pointer to string in YYY/MM/DD format. lpszConversationID ULONG ! Ignored. flFlags ULONG ! 1 - MAPI_UNREAD ! 2 - MAPI_RECEIPT_REQUESTED ! 3 - MAPI_SENT lpOriginator ULONG ! Pointer to MapiRecipDesc group. nRecipCount ULONG ! Count of groups pointed to by lpRecips. lpRecips ULONG ! Pointer to array of recipient descriptor groups. nFileCount ULONG ! Count of file attachment groups pointed to by lpFiles. lpFiles ULONG ! Pointer to array of file attachment groups. END MapiRecipDescType GROUP,TYPE ! RECIPIENT DESCRIPTOR ulReserved ULONG ! Reserved, must be 0. ulRecipClass ULONG ! Recipients role in message ! 0 - MAPI_ORIG ! 1 - MAPI_TO ! 2 - MAPI_CC ! 3 - MAPI_BCC lpszName ULONG ! Pointer to diplayed name of recipient. lpszAddress ULONG ! Pointer to recipient's mail address. ulEIDSize ULONG ! Size (bytes) of binary data in lpEntryID. lpEntryID ULONG ! Pointer to binary data representing the recipient. END MapiFileDescType GROUP,TYPE ! FILE DESCRIPTOR ulReserved ULONG(0) ! Reserved, must be 0. flFlags ULONG(0) ! Ignored. nPosition ULONG ! where in the message text to place the file lpszPathName ULONG ! Pointer to full pathname of attached file. lpszFileName ULONG ! Pointer to file name seen by user. lpFileType ULONG(0) ! Reserved, must be NULL. END cSMAPIUsername STRING(255) cSMAPIPassword STRING(255) ulSMAPISession ULONG csSMAPIRecipientName CSTRING(256) csSMAPIRecipientAdr CSTRING(256) csSMAPITitle CSTRING(256) csSMAPIText CSTRING(256) ulAttachmentPosition ULONG csAttachmentPath CSTRING(256) csAttachmentFile CSTRING(256) TxMessage LIKE(MapiMessageType) ! Message info TxRecipient LIKE(MapiRecipDescType) ! Empfaenger info TxAttachment LIKE(MapiFileDescType) ! Attachment info cEMailAdresse STRING(255),AUTO cSender STRING(255),AUTO cEmpfaenger STRING(255),AUTO cAttachmentPfad STRING(255),AUTO cAttachmentDatei STRING(255),AUTO cCommand STRING(255),AUTO cSavePath STRING(255) IsAttachment BYTE refcString &STRING CODE ! Aufrufparamater einlesen ! Formt der Parameter: EMail-Adresse|Absender Name|Empfänger Name|Pfad des Attechments|Name des Attechments cCommand = COMMAND() refcString &= cCommand cEMailAdresse = ReadParam(refcString) ! EMail-Adresse einlesen IF NOT INSTRING('@',cEMailAdresse,1,1) ! kein @ in der EMail-Adresse RETURN END cSender = ReadParam(refcString) ! Absender einlesen cEmpfaenger = ReadParam(refcString) ! Empfänger einlesen cAttachmentPfad = ReadParam(refcString) ! Attachment-Pfad einlesen cAttachmentDatei = ReadParam(refcString) ! Attachment-Datei einlesen IF NOT CLIP(cAttachmentDatei) = '' IsAttachment = True END ! Verbindung zum E-Mail-Client herstellen cSMAPIUsername = CHR(0) cSMAPIPassword = CHR(0) IF MAPILogon(0,| ADDRESS(cSMAPIUsername),| ADDRESS(cSMAPIPassword),| MAPI_LOGON_UI + MAPI_NEW_SESSION,| 0,| ulSMAPISession) = 0 ! Verbindung ok csSMAPIRecipientAdr = CLIP(cEMailAdresse) & CHR(0) ! Kann alles weggelassen werden ! es muss dann nur ! csSMAPITitle = CHR(0) ! und ! csSMAPIText = CHR(0) ! eingesetzt werden !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IF IsAttachment ! csSMAPIRecipientName = CLIP(cEmpfaenger) ! cSender = 'Schülerdaten von Schule ' & CLIP(cSender) ! csSMAPIRecipientName = CLIP(cEmpfaenger) ! csSMAPIText = 'anbei die Schülerdaten unserer Schule' ! ulAttachmentPosition = LEN(CLIP(csSMAPIText)) + 1 ! csSMAPIText = CLIP(csSMAPIText) & ' ' & CHR(0) ! ELSE ! IF UPPER(CLIP(cSender)) = 'DEMO' OR CLIP(cSender) = '' ! cSender = 'Nachricht von' ! END ! IF UPPER(cEmpfaenger[1:5]) = 'HALLO' ! csSMAPIRecipientName = LEFT(cEmpfaenger[6 : LEN(CLIP(cEmpfaenger))]) ! ELSE ! csSMAPIRecipientName = CLIP(cEmpfaenger) ! END ! csSMAPIText = 'Sehr geehrte' ! CASE UPPER(cEmpfaenger[1:4]) ! OF 'HERR' ! csSMAPIText = CLIP(csSMAPIText) & 'r ' & CLIP(cEmpfaenger) ! OF 'FRAU' ! csSMAPIText = CLIP(csSMAPIText) & ' ' & CLIP(cEmpfaenger) ! ELSE ! IF UPPER(cEmpfaenger[1:5]) = 'HALLO' ! csSMAPIText = CLIP(cEmpfaenger) ! ELSE ! csSMAPIText = CLIP(csSMAPIText) & ' Damen und Herren' ! END ! END ! csSMAPIText = CLIP(csSMAPIText) & ',' ! ulAttachmentPosition = LEN(CLIP(csSMAPIText)) + 1 ! csSMAPIText = CLIP(csSMAPIText) & ' ' & CHR(0) ! END ! csSMAPITitle = CLIP(cSender) & CHR(0) ! csSMAPIRecipientName = CLIP(csSMAPIRecipientName) & CHR(0) ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CLEAR(TxMessage) TxMessage:lpszSubject = ADDRESS(csSMAPITitle) ! setzt Betreff TxMessage:lpszNoteText = ADDRESS(csSMAPIText) ! setzt Mailtext TxMessage:nRecipCount = 1 ! setzt Anzahl der Empfänger TxMessage:lpRecips = ADDRESS(TxRecipient) CLEAR(TxRecipient) TxRecipient:ulRecipClass = 1 ! sendet Mail nur zu einem Empfänger TxRecipient:lpszName = ADDRESS(csSMAPIRecipientName) ! setzt Empfänger Name TxRecipient:lpszAddress = ADDRESS(csSMAPIRecipientAdr) ! setzt Empfänger Adresse IF IsAttachment csAttachmentPath = CLIP(cAttachmentDatei) & CHR(0) csAttachmentFile = CLIP(cAttachmentDatei) & CHR(0) TxMessage:nFileCount = 1 ! setzt Anzahl der Attachment TxMessage:lpFiles = ADDRESS(TxAttachment) ! Pointer to array of file attachment groups. CLEAR(TxAttachment) TxAttachment:nPosition = ulAttachmentPosition ! setzt Position des Attachments im Messagetext (hinter das Ende der Nachricht) TxAttachment:lpszPathName = ADDRESS(csAttachmentPath) ! Pfad + Name der Attachment-Datei TxAttachment:lpszFileName = ADDRESS(csAttachmentFile) ! Name der Attachment-Datei cSavePath = PATH() SETPATH(cAttachmentPfad) ! E-Mail-Client ohne Dialogmodus starten IF MAPISendMail(ulSMAPISession,0,TxMessage,0,0). SETPATH(cSavePath) ELSE ! E-Mail-Client im Dialogmodus starten IF MAPISendMail(ulSMAPISession,0,TxMessage,MAPI_DIALOG,0). END ! Verbindung zum E-Mail-Client abbauen IF MAPILogoff(ulSMAPISession,0,0,0). ELSE MESSAGE('E-Mail-Client kann nicht gestartet werden.') END RETURN !---------------------------------------------------------------------------------------------------- ReadParam PROCEDURE(refcCommand) cRet STRING(255) cCommand STRING(255),AUTO bI BYTE,AUTO CODE cCommand = refcCommand IF NOT CLIP(cCommand) = '' bI = INSTRING('|',CLIP(cCommand),1,1) CASE bI OF 0 cRet = cCommand cCommand = '' OF 1 cCommand = cCommand[2 : LEN(CLIP(cCommand))] ELSE cRet = cCommand[1 : bI - 1] cCommand = cCommand[bI + 1 : LEN(CLIP(cCommand))] END refcCommand = cCommand END RETURN(cRet)