das hatte ich ja fast alles schon so mit der alten Methode programmiert, lief leider nicht.
Nun habe ich etwas dazugelernt und neu programmiert...
läuft fehlerfrei durch, E-Mails werden aber nicht in Ausgangskorb gelegt und es wird auch nichts versendet, ich bekomme auch keine E-Mails die an mich kommen müssten
dann funktioniert es in soweit, dass jede E-Mail in Outlook geöffnet wird und mit klick auf senden kommt diese in den Ausgangskorb und es folgt das gleich Prozedere bei der nächsten E-Mail
nun noch einmal der ganze Code, vielleicht habe ich ja doch etwas übersehen...
Code: Alles auswählen
#define ....
//--Message Flags
#define NOFLAG 0
#define FLAG_UNREAD 1
#define FLAG_RECEIPT_REQUESTED 2
#define FLAG_SENT 4
//--SKIP Flags
#define SKIP_ONLY 0
#define DELETE_THEN_SKIP 1
//--Function Handles
STATIC snDllHandle := 0
STATIC scDLLSocMapiIsInit := "" //Determines if MAPI is already initialized
STATIC scDLLSocMapiInit := "" //Initializes MAPI
STATIC scDLLSocMapiDeInit := "" //DeInitializes MAPI
STATIC scDLLSocMapiIsLoggedOn:= "" //Dertermines if already logged onto a MAPI session.
STATIC scDLLSocMapiLogon := "" //Loggs onto a MAPI session
STATIC scDLLSocMapiLogoff := "" //Loggs off from a MAPI session
STATIC scDLLSocMapiSendMail := "" //Opens the mail editor with some preset Data.
STATIC scDLLSocMapiPostMail := "" //Directly puts a mail in the outbox (without a Dialog)
STATIC scDLLInboxOpen := "" //Initializes for further actions with the Inbox
STATIC scDLLInboxClose := "" //Frees memory that has been allocated with the inbox functions
STATIC scDLLInboxGoTop := "" //Positions the "Record pointer" to the first message in the inbox and reads it.
STATIC scDLLInboxSkip := "" //Skips to the next message in the inbox and reads it.
STATIC scDLLAskFlag := "" //Determines the Flags of a message (unread, Receipt requested, sent)
STATIC scDLLAskBufferSize := "" //Determines, how much buffer must be allocated for the following "StuffBuffer" call.
STATIC scDLLStuffBuffer := "" //Stuffs the buffer with a string for the desired message-element.
STATIC scDLLCountRecipients := "" //Counts the number of recipients for the current message.
STATIC scDLLCountAttachments := "" //counts the number of attachments for the current message.
STATIC scDLLSaveAttachments := "" //Stores all attachments of a message to temporary files.
STATIC scDLLMarkAsRead := "" //Marks current message as read
//*************************************************************************** Init Procedure
// Init PROCEDURE //
////////////////////
STATIC lisRunning := .F. // Fieldwide STATIC ob der Thread läuft
INIT PROCEDURE SocMapiI()
//Load DLL
snDllHandle := DllLoad( "SocMapi.Dll" )
if snDllHandle == 0
MsgBox("SOCMAPI.DLL not found!")
QUIT
endif
//Get Function handles from DLL.
scDLLSocMapiIsInit := DllPrepareCall( snDllHandle, DLL_STDCALL, "SocMapiIsInit" )
scDLLSocMapiInit := DllPrepareCall( snDllHandle, DLL_STDCALL, "SocMapiInit" )
scDLLSocMapiDeInit := DllPrepareCall( snDllHandle, DLL_STDCALL, "SocMapiDeInit" )
scDLLSocMapiIsLoggedOn:= DllPrepareCall( snDllHandle, DLL_STDCALL, "SocMapiIsLoggedOn" )
scDLLSocMapiLogon := DllPrepareCall( snDllHandle, DLL_STDCALL, "SocMapiLogon" )
scDLLSocMapiLogoff := DllPrepareCall( snDllHandle, DLL_STDCALL, "SocMapiLogoff" )
scDLLSocMapiSendMail := DllPrepareCall( snDllHandle, DLL_STDCALL, "SocMapiSendMail" )
scDLLSocMapiPostMail := DllPrepareCall( snDllHandle, DLL_STDCALL, "SocMapiPostMail" )
scDLLInboxOpen := DllPrepareCall( snDllHandle, DLL_STDCALL, "InboxOpen" )
scDLLInboxClose := DllPrepareCall( snDllHandle, DLL_STDCALL, "InboxClose" )
scDLLInboxGoTop := DllPrepareCall( snDllHandle, DLL_STDCALL, "InboxGoTop" )
scDLLInboxSkip := DllPrepareCall( snDllHandle, DLL_STDCALL, "InboxSkip" )
scDLLAskFlag := DllPrepareCall( snDllHandle, DLL_STDCALL, "AskFlag" )
scDLLAskBufferSize := DllPrepareCall( snDllHandle, DLL_STDCALL, "AskBufferSize" )
scDLLStuffBuffer := DllPrepareCall( snDllHandle, DLL_STDCALL, "StuffBuffer" )
scDLLCountRecipients := DllPrepareCall( snDllHandle, DLL_STDCALL, "CountRecipients" )
scDLLCountAttachments := DllPrepareCall( snDllHandle, DLL_STDCALL, "CountAttachments" )
scDLLSaveAttachments := DllPrepareCall( snDllHandle, DLL_STDCALL, "SaveAttachments" )
scDLLMarkAsRead := DllPrepareCall( snDllHandle, DLL_STDCALL, "MarkAsRead" )
//initialize MAPI
if DllExecuteCall( scDLLSocMapiIsInit ) == 0
nErr := DllExecuteCall( scDLLSocMapiInit )
if nErr != 0
MsgBox("MAPI could not be initialized! Errorcode: " + ALLTRIM(str(nErr)) )
QUIT
endif
endif
return
//*************************************************************************** Init Procedure
Procedure emmailou // das eigentliche Main für dieses Routine
// LOCAL Homepath := LEFT( APPNAME( .T. ), LEN( APPNAME( .T. ) ) - LEN( APPNAME( .F. ) ) )
// Local cAdresses := (Emilwer)
// local cSubject := (Betrmail)
// local cMessage := (infmess0)+(Chr(13))+(Chr(13))+(infmess1)+(Chr(13))+(infmess2)+(Chr(13))+(Chr(13))+(infmesss)+(Chr(13))+(Chr(13))+(infmess3b)+(Chr(13))+(infmess3c)+(Chr(13))+(Chr(13))+(infmess4)+(Chr(13))+(infmess3)+(Chr(13))+(infmess5)+(Chr(13))+(Chr(13))+(infmess6)+(Chr(13))+(Chr(13))+(infmess7)+(Chr(13))+(Chr(13))+(infmess8a)+(Chr(13))+(infmess8)+(Chr(13))+(infmess9)+(Chr(13))+(Chr(13))+(infmess10)+(Chr(13))+(Chr(13))+(infmess11)+(Chr(13))+(Chr(13))+(infmess12)
// das ist das Muster => wichtig in Anfhrungszeichen Local cAttachments := "C:\MBNETZ\MAB\DRUWORD\BUEPOB.PDF;C:\MBNETZ\MAB\DRUWORD\BUEPLogo.PDF"
// Local cAttachments := &Anhangx
// local nFlag := NOFLAG
// Grundeinstellungen erfolgen in Global*.PRG (MAIN) laut Programm-Anmeldung User
// Emailadresse Empfänger = cAdresses eventuell ändern
// public betrmail = cSubject eventuell ändern
// public Anlage1 = cAttachments eventuell ändern
// z.B. cAttachments cAttachments := (verzword)+ "/BUEPLogo.PDF"
// wählt die Anzahl der Anhänge aus, je nach Emailart mit 1 2 oder 3 Anhängen
// Public AnzAnhaenge ANzahl in VZerstna vorgegeben
// ist die Variable die die Anhänge für
// Public Anhangx
// wenn Nutzer geprüft und ok Variablen belegen
// public Emilwer Emailadresse Empfänger = cAdresses
// Vorbelegung für Anrede und Grüße in Email
// public PERSWER
// public betrmail = cSubject
// public Anlage = cAttachments
// Public infmess0 Text in mail = cMessage Sehr geehrte Damen und Herren oder Hallo
// Public infmess1 Text um was es geht
// Public infmess2 Grußformel Mit freundlichen Grüßen bzw. Viele Grüße
// Public infmess3 Geschäftsfhrer
// Public infmess3b Unterzeichner
// Public infmess3c Abteilung
// Public infmess4 Name Firma
// Public infmess5 Firmensitz
// Public infmess6 Web und EMail
// Public infmess7 bei GMBH Registergericht und Nummer
// Public infmess8 Registrierungsstelle des Vermittlers
// Public infmess9 www.vermittlerregister.info
// Public infmess10 Art der Tätigkeit und Nummer
// Public infmess11 Anschrift Gewerbeamt
// Public infmess12 Versicherung und Nummer
Public cAnrede := "" // Public cAnrede :="" falls in anderen Programmen gebraucht
Public cGruss := ""
Public infmesss := ""
Public Infmess1 := ""
Public Infmess2 := ""
Public cAdresses := (Emilwer)
Public cSubject := (Betrmail)
// local cMessage := (infmess0) + (Chr(13))+(Chr(13))+(infmess1)+(Chr(13))+(infmess2)+(Chr(13))+(Chr(13))+(infmesss)+(Chr(13))+(Chr(13))+(infmess3b)+(Chr(13))+(infmess3c)+(Chr(13))+(Chr(13))+(infmess4)+(Chr(13))+(infmess3)+(Chr(13))+(infmess5)+(Chr(13))+(Chr(13))+(infmess6)+(Chr(13))+(Chr(13))+(infmess7)+(Chr(13))+(Chr(13))+(infmess8a)+(Chr(13))+(infmess8)+(Chr(13))+(infmess9)+(Chr(13))+(Chr(13))+(infmess10)+(Chr(13))+(Chr(13))+(infmess11)+(Chr(13))+(Chr(13))+(infmess12)
Public cMessage := (Infmess0)
// das ist das Muster => wichtig in Anfhrungszeichen Local cAttachments := "C:\MBNETZ\MAB\DRUWORD\BUEPOB.PDF;C:\MBNETZ\MAB\DRUWORD\BUEPLogo.PDF"
// Local cAttachments := &Anhangx
Public cAttachments := (Anhangx)
Public nFlag := NOFLAG
Public nErr
set default to (substr(FESTWO,1,1) + ":")
set path to (substr(FESTWO,1,1) + ":")
set default to (verzword)
SET PATH to (verzword)
// Datenbank unabh„ngige Variable "betrmail" fr alle Sendungen gleich
ersit400 := ConvToAnsiCP("Newsletter")
betrmail := (ersit400)
// anhangx mit 2 Varianten gesch„ftlich oder privat
if firmist = .t.
ersitz17b := '"' + (verzword) + '\' + ConvToAnsiCP('NEWSG.PDF') + '"'
else
ersitz17b := '"' + (verzword) + '\' + ConvToAnsiCP('NEWSP.PDF') + '"'
endif
anhangx := (ersitz17b)
cAttachments := &Anhangx
store " " to infmess1
store " " to infmess2
store 1 to AnzAnhaenge
set default to (substr(FESTWO,1,1) + ":")
set path to (substr(FESTWO,1,1) + ":")
set default to (verzdat)
SET PATH to (verzdat)
sele j
use
// Datenbank ausw„hlen
cDatei := "KUMAIL" // die DBF ( Namen sprechend) um die es geht
use (cDatei) shared new // DBF in neuem Arbeitsbeeich ”ffnen
nKumail := select() // Arbeitsbereich (mit sprechendem Namen) benennen
cPersdu := upper(Persdu) // Datenbankfeld "D" = Kunde per Du
cVorname := alltrim(Vorname)
cName := alltrim(Name)
cPPname := alltrim(PPname) // Partner Vorname
cPAName := alltrim(PAName) // Partner Nachname
cANR := alltrim(ANR) // Herrn, Frau, Firma, Praxis, WEG usw.
cFLOSKEL := alltrim(Floskel) // Erg„nzung nach sehr geehrt "e Damen und Herren" bzw. "er Herr" bzw. "e Frau"
cPG := upper(PG) // Partner M = M„nnlich W = weiblich
cKG := upper(KG) // Kunde M = M„nnlich W = weiblich
cKOMO := upper(KOMO) // Achtung Public Variable "KOMO" aus dem Vorprogramm bergeben
nZEICHINH := Zeichinh // Firmeninhaber = 1 2. Inhaber = 2
isfirmist := Firmist = .t.
DO WHILE !EOF()
// Anrede speichern, alle abh„ngigen Infos bergeben ...
infmess0 := GetAnrede( cPersdu, cKOMO, IsFirmist, NZEICHINH, cVorname, cName, cPPname, cFloskel, cPG, cKG, cANR )
// Grussformel in der Email
infmesss := GetGruss( cPersdu, cKOMO )
if Isfirmist
if nZEICHINH = 1
emilwer := alltrim((nKumail)->EMAIL)
if len(Emilwer) < 2
emilwer := alltrim((nKumail)->EAMAIL)
else
if len(Emilwer) < 2
emilwer := '"Keine E-Mail von Kunde, Arbeitgeber gespeichert"'
endif
endif
else
emilwer := alltrim((nKumail)->EPMAIL)
if len(Emilwer) < 2
emilwer := alltrim((nKumail)->EAMAIL)
else
if len(Emilwer) < 2
emilwer := '"Keine E-Mail von Partner, Arbeitgeber gespeichert"'
endif
endif
endif
else
emilwer := alltrim((nKumail)->EMAIL)
if len(Emilwer) < 2
emilwer := alltrim((nKumail)->EPMAIL)
if len(Emilwer) < 2
emilwer := alltrim((nKumail)->EAMAIL)
else
if len(Emilwer) < 2
emilwer := '"Keine E-Mail von Kunde, Partner, Arbeitgeber gespeichert"'
endif
endif
endif
endif
IF cPersdu = "D"
infmess1 := "in der Anlage erh„ltst Du unseren Newsletter mit aktuellen Informationen."
infmess2 := "Viel Spaá beim lesen des Newsletters, gerne stehen wir Dir fr weitere Fragen zur Verfgung."
else
infmess1 := "in der Anlage erhalten Sie unseren Newsletter mit aktuellen Informationen."
infmess2 := "Viel Spaá beim lesen des Newsletters, gerne stehen wir Ihnen fr weitere Fragen zur Verfgung."
endif
infmesss := ConvToAnsiCP(cGruss)
infmess0 := ConvToAnsiCP(cAnrede)
infmess1 := ConvToAnsiCP(infmess1)
infmess2 := ConvToAnsiCP(infmess2)
EMILWER := ConvToAnsiCP(EMILWER)
cAdresses := (Emilwer)
cMessage := (infmess0)+(Chr(13))+(Chr(13))+(infmess1)+(Chr(13))+(infmess2)+(Chr(13))+(Chr(13))+(infmesss)+(Chr(13))+(Chr(13))+(infmess3b)+(Chr(13))+(infmess3c)+(Chr(13))+(Chr(13))+(infmess4)+(Chr(13))+(infmess3)+(Chr(13))+(infmess5)+(Chr(13))+(Chr(13))+(infmess6)+(Chr(13))+(Chr(13))+(infmess7)+(Chr(13))+(Chr(13))+(infmess8a)+(Chr(13))+(infmess8)+(Chr(13))+(infmess9)+(Chr(13))+(Chr(13))+(infmess10)+(Chr(13))+(Chr(13))+(infmess11)+(Chr(13))+(Chr(13))+(infmess12)
set default to (substr(FESTWO,1,1) + ":")
set path to (substr(FESTWO,1,1) + ":")
set default to (verzexe)
SET PATH to (verzexe)
sendnews(cAdresses, cSubject, cMessage, cAttachments, nflag) // LOCAL als Parameter bergeben
SKIP
ENDDO
return
PROCEDURE SENDNEWS( cAdresses, cSubject, cMessage, cAttachments, nFlag )
//
LOCAL oMAPI
Local Homepath := (verzexe)
oMAPI := Thread() :new()
oMAPI:start( "SENDNOW", cAdresses, cSubject, cMessage, cAttachments, nFlag)
SLEEP( 100 )
DO WHILE lisRunning = .T.
SLEEP( 10 )
ENDDO
SLEEP( 100 )
CurDrive( SUBSTR( Homepath, 1, 1 ) )
CURDIR( Homepath )
RETURN
PROCEDURE SENDNOW( cAdresses, cSubject, cMessage, cAttachments, nFlag )
// Flag setzen
lisRunning := .T.
BEGIN SEQUENCE
// //-- Pop up maileditor
// MsgBox("mail will be send with Maileditor popping up")
// nErr := DllExecuteCall( scDLLSocMapiSendMail , cAdresses, cSubject, cMessage, cAttachments, nFlag)
// if nErr != SUCCESS_SUCCESS .and. nErr != MAPI_USER_ABORT
// break nErr
// endif
//
// ODER ( aber NICHT UND !!! )
//
//-- Store mail directly to outbox
//MsgBox("mail will be stored directly to outbox")
nErr := DllExecuteCall( scDLLSocMapiPostMail , cAdresses, cSubject, cMessage, cAttachments, nFlag)
if nErr != SUCCESS_SUCCESS
break nErr
endif
// MsgBox("mail successfully stored to outbox")
RECOVER USING nErr
// Fehlerbehandlung
END SEQUENCE
// Flag ausschalten
lisRunning := .F.
RETURN