Probleme mit Mail an viele Adressen

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Probleme mit Mail an viele Adressen

Beitrag von Wolfgang_B »

Hallo, habe wieder mal ein Problem.

Wenn ich Mail aus meiner Appl. versenden will, verwende ich folgenden Aufruf, wobei in sMail die Emailadresse(n) steht(en). Das klappt bei einer oder auch wenigen Email Adressen recht gut.

RunShell( "url.dll,FileProtocolHandler mailto:" + sEmail +"?subject=" + "" + "" + "" , 'Rundll32.exe' )

Wenn ich das für z.B. 100 Email Adressen mache, kommt ein Fenster mit einer Fehlermeldung:

Verknüpfungsproblem "mailto: mein Adressstring + ?subject=" konnte nicht geöffnet werden

Gibt es hier eine Größenbeschränkung des eMailadressen Strings?


Ich habe in diesem Zusammenhang was von der socmapi.dll in einem Thread gelesen, mit der das alles besser funktionieren soll. Wo bekomme ich diese her? Bei Alaska steht nur so eine Kurzbeschreibung mit der ich nichts anfangen kann.

Viele Grüße
Wolfgang
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Wolfgang,
das wurde doch bereits alles geklärt und (auch Dir) erklärt?
Schau mal hier: http://www.xbaseforum.de/viewtopic.php?t=1794

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

die Größenbegrenzung liegt in der maximalen Anzahl von Parametern die man in Runshell angeben kann. Wie hoch die ist weiß ich jetzt auch nicht (kann man im CMD Fenster mal prüfen ;-) ) aber am besten man nimmt die beschriebene DLL.
Gruß
Hubert
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag von Wolfgang_B »

Hallo Martin, hallo Hubert,

jetzt hab ichs verstanden - Anzahl Parameter .... klingt logisch. Aber mit dem Thema socmapi.dll kann ich immer noch nichts anfangen. Finde die nirgends. Wie gesagt, bei Alaska liegt nur:

SocMapi.DLL
Easy Xbase++ accessible interface to Windows MAPI
- Version 1.02 -

und Text und eine Beschreibung eines MAPIDEMO.PRG die im Anhang stehen soll. Welcher Anhang ???

Tut mir ja leid, daß ich Euch nerve ..

Gruß Wolfgang
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag von Wolfgang_B »

Hab da noch was zu RunSehll gefunden ...

http://techsupt.winbatch.com/TS/T000001050F91.html

Gruß Wolfgang
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Wolfgang,
genau - lade Dir mal die DLL herunter und entzippe sie, dann findest Du auch die MAPIDEMO.PRG :D

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag von Wolfgang_B »

da gibts nichts zum Downloaden :(
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Doch :!:
Gehe links im Menü auf DOwnload, dann auf ACSN und ganz unten auf der Seite hast Du die SOCMAPI.
Unten in dem Block hast Du einen Verweis auf die Hilfe und oben rechts in dem Block hast Du den link auf die socmapi3.zip

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag von Wolfgang_B »

sorry, habe nicht weit genug runtergescrolled.

Vielen Dank einstweilen

Gruß Wolfgang :?
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag von Wolfgang_B »

Hallo,

habe mir jetzt mal das mapidemo.prg installiert und laufen lassen. Klingt alles ganz logisch. Bringt mir allerdings gleich zu Anfang den Fehler "Unknown Mapi Error". Die socmapi.dll ist aber ordnungsgemäß geladen?? Zumindest läuft die INIT PROCEDURE SocMapiI() durch.

Stehe wieder mal auf dem Schlauch ...


Gruß Wolfgang
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Wolfgang,
so habe ich das bei mir eingebunden:

Code: Alles auswählen

snDllHandle       := DllLoad( "SocMapi.Dll" )
if snDllHandle == 0
	MsgBox("SOCMAPI.DLL nicht gefunden!")
	return
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 kann nicht initialisiert werden!  Errorcode: " + ALLTRIM(str(nErr)) )
		return
	endif
endif

//if not already logged on, Logon to new MAPI session 
if  DllExecuteCall( scDLLSocMapiIsLoggedOn  ) == 0
	if (nErr := DllExecuteCall(scDLLSocMapiLogon)) != SUCCESS_SUCCESS
		NotifyError( nErr )
		return
	endif
endif

.....

				BEGIN SEQUENCE
					nErr := DllExecuteCall( scDLLSocMapiSendMail , mailadr , ConvToAnsiCP( alltrim( ::Subject:editBuffer() ) ), ConvToAnsiCP( mailtext ), "", NOFLAG )
					if nErr != SUCCESS_SUCCESS .and. nErr != MAPI_USER_ABORT
						break nErr
					endif
				RECOVER USING nErr
					NotifyError (nErr)
				END SEQUENCE

....

//Logoff from MAPI session
DllExecuteCall(scDLLSocMapiLogoff)
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag von Wolfgang_B »

Hallo Martin,

bin gerade erst dazu gekommen, Deine Lösung mal auszuprobieren. Leider bringt er immer noch den Fehler: "Unknown Mapi Error" und zwar an der Stelle wo er ein Mapi Logon versucht. Hast Du eine Ahnung, an was das liegen könnte?

Code: Alles auswählen

//if not already logged on, Logon to new MAPI session
if  DllExecuteCall( scDLLSocMapiIsLoggedOn  ) == 0
   if (nErr := DllExecuteCall(scDLLSocMapiLogon)) != SUCCESS_SUCCESS
      NotifyError( nErr )
      return
   endif
endif 
Gruß Wolfgang
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Wolfgang,
hast Du denn bei Dir überhaupt eine MAPI-fähige Anwendung installiert und als Standardmailer im System angemeldet?
Was passiert denn, wenn Du im Webbrowser auf einen mailto:-link klickst?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag von Wolfgang_B »

... dann geht der Standardmailer auf. Ist auf meinem Firmenrechner und Privatrechner der gleiche Effekt. Auch der Fehler ist gleich.

Naja, ich geh jetzt erst mal 3 Tage Gleitschirmfliegen.

Einen schönen Feiertag und danke erstmal.

Gruß Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

war da nicht was, dass MS Outlook Express nicht per Mapi gesteuert werden kann, oder war das ActiveX ?

PS: Gleitschirmfliegen ... hier kann man nur Regenschirm stehen, ich hoffe du hast besseres Wetter ;-)
Gruß
Hubert
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag von Wolfgang_B »

Hi Hubert, ist nicht Outlook sondern Lotus hier in der Firma, und zu Hause irgendein anderes Programm (Name fällt mir gerade nicht ein).

Wetter hier -> strahlender Sonnenschein mit Blick zu den Alpen mit noch viel Schnee (München aus dem 22. Stock).

:-))

Gruß Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
wasi01 hat geschrieben: Leider bringt er immer noch den Fehler: "Unknown Mapi Error" und zwar an der Stelle wo er ein Mapi Logon versucht.

Code: Alles auswählen

//if not already logged on, Logon to new MAPI session
if  DllExecuteCall( scDLLSocMapiIsLoggedOn  ) == 0
   if (nErr := DllExecuteCall(scDLLSocMapiLogon)) != SUCCESS_SUCCESS
      NotifyError( nErr )
      return
   endif
endif 
hm ... wenn "mailto" funktioniert ist MAPI eingerichtet ...
hast du auch die ganzen #define Konstanten drin ?

startest du das ganze als Thread ?

Code: Alles auswählen

//--error codes from MAPI.H
#define SUCCESS_SUCCESS   0
...
//--ID´s for Message items
#define ID_SUBJECT                0
...
//--Message Flags
#define NOFLAG  0
...
//--SKIP Flags
#define SKIP_ONLY   0
...
//--Function Handles
STATIC snDllHandle        := 0
...

PROCEDURE MAPISEND( cJahr, cMonat, aJOB )
LOCAL cAdresses    := "AUGE_OHR@WEB.de"
LOCAL cSubject     := "DATEV Dateien 20" + cJahr + "/" + cMonat
LOCAL cMessage     := ""
LOCAL cAttachments := ""
LOCAL nFlag        := NOFLAG
LOCAL oMAPI
...
   oMAPI := Thread():new()
   oMAPI:start( "SENDNOW",;
                   cAdresses,;
                   cSubject,;
                   cMessage,;
                   cAttachments,;
                   nFlag )

RETURN

PROCEDURE SENDNOW( cAdresses, cSubject, cMessage, cAttachments, nFlag )

LOCAL nErr

   //if not already logged on, Logon to new MAPI session
   IF DllExecuteCall( scDLLSocMapiIsLoggedOn ) == 0
      IF ( nErr := DllExecuteCall( scDLLSocMapiLogon ) ) != SUCCESS_SUCCESS
         NOTIFYERROR( nErr )
         RETURN
      ENDIF
   ENDIF

   BEGIN SEQUENCE
      //-- Pop up maileditor
      *        MsgBox("”ffne Maileditor")
      nErr := DllExecuteCall( scDLLSocMapiSendMail,;
                    cAdresses,;
                    cSubject,;
                    cMessage,;
                    cAttachments,;
                    nFlag )
      IF nErr != SUCCESS_SUCCESS .AND. nErr != MAPI_USER_ABORT
         BREAK nErr
      ENDIF
   RECOVER USING nErr
      NotifyError( nErr )
   END SEQUENCE

   DllExecuteCall( scDLLSocMapiLogoff )

RETURN
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Hallo,

soweit mir bekannt ist, funktioniert das mit Lotus(IBM) nicht.

M$ <-> IBM passt nicht wirklich zusammen ;-)
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo zusammen,

ich bin gerade dabei, daß bei mir auszuprobieren um z.B. die
xpperror.log an mich zu senden. Installiert ist bei mit Outlook express

wird auch gestartet. der Betreff wird eingetragen. Aber wie kann ich die xpperror.log als Dateianhang automatisch anhängen. Ich finder hierüber keine Doku. Geht das denn ?

Ich kann natürlich die xpperror.log in eine Variable lesen. Wollte ich aber eigentlich nicht.

Code: Alles auswählen

Function Fehlersenden()
If File("xpperror.log")
	RunShell( "url.dll,FileProtocolHandler mailto: sprinter-ramacher@t-online.de" +"?subject=xpperror.log"+"&body=xpperror.log", 'Rundll32.exe' ) 
EndIf
Return Nil
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi Rolf,

suche mal nach mailto da gibt es einiges - besonders im Outlook Thread - sind Dateianhänge zu erkennen, vielleicht hilft es dir ja.

Ich persönlich nutze die ASINET und eine eMail-Adresse bei GMX um im Hintergrund die XPPERROR.LOG zu mir selbst zu senden.
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi,

@Hubert ich habe mal gesucht, aber kein Beispiel gefunden wie dies anzuwenden ist.

Mein Code sieht so aus:

Code: Alles auswählen

Function Fehlersenden()
If File("xpperror.log")
	RunShell( "url.dll,FileProtocolHandler mailto: sprinter-ramacher@t-online.de" +"?subject=xpperror.log"+"&body=xpperror.log"+;
				+"&attach=xpperror.log", 'Rundll32.exe' ) 
EndIf
Return Nil
Ich habe schon "attachName " auch "attachfile" benutzt
es erfolgt kein Fehler weder beim compilieren noch beim Start des Programms.

Kennt jemand den Syntax um die Datei anzuhängen ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Beitrag von Bertram Hansen »

Hallo Rolf,

bist Du Dir sicher das man über Mailto auch Dateianhänge versenden kann. Ich glaube das geht gar nicht.
Bei uns kann der User auch eine Fehlermeldung per eMail versenden. Dazu fülle ich den "Body" mit der Fehlermeldung.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

nein, nicht mit RUNSHELL ... dort wird die MAPI-DLL erklärt, die man von Alaska frei herunterladen kann.
Gruß
Hubert
Antworten