Discussion:
Delphi 2010 MAPI Mailversand
(zu alt für eine Antwort)
Stefan Koschke
2010-04-16 07:59:46 UTC
Permalink
Hallo zusammen,

seit Umstieg auf D2010 funktioniert mein Mailversand per MAPI nicht mehr.
Unter D5 und 2007 ging es noch, es wurde Outlook angestoßen und nach
Sicherheitsabfrage die Mail verschickt.
Selbst die (aktuelle?) JCL-Mapi funktioniert nicht (Windows-Meldung
Programm funktioniert nicht mehr...), ich habe nicht die geringste
Ahnung warum!
Eine andere Komponente (TEmail) , die ich sonst benutzt habe weigert
sich beharrlich, da passiert überhaupt nichts mehr beim Senden.

Auch ausschließlich auf Code ohne Komponenten aufbauender Mailversand
funktioniert nicht mehr (siehe unten)!

Da aber gleichzeitig in letzter Zeit unser Exchange-Server umgestellt
wurde, habe ich keine Ahnung, wo ich suchen soll :-(

Könnte bitte jemand mal folgendes testen?

function SendFileMail(const FileName: ansistring; const Subject, BodyText,
RecipAdress: ansiString): String;
var
mMessage: TMapiMessage;
mlpFiles: TMapiFileDesc;
mRecips: TMapiRecipDesc;
begin
if not FileExists(FileName) then
begin
Result := 'File "' + FileName + '" not found!';
Exit;
end;

with mRecips do
begin
ulRecipClass := MAPI_TO;
lpszName := PansiChar(RecipAdress);
lpszAddress := PansiChar(RecipAdress);
ulEIDSize := 0;
lpEntryID := nil;
end;

with mlpFiles do
begin
flFlags := 0;
nPosition := 0;
lpszPathName := Pansichar(filename);
lpszFileName := nil;
lpFileType := nil;
end;

with mMessage do
begin
lpszSubject := PansiChar(Subject);
lpszNoteText := PansiChar(BodyText);
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
lpOriginator := nil;
nRecipCount := 1;
lpRecips := @mRecips;
nFileCount := 1;
lpFiles := @mlpFiles;
end;

case MapiSendMail(0, 0, mMessage, MAPI_LOGON_UI or MAPI_NEW_SESSION,
0) of
MAPI_E_AMBIGUOUS_RECIPIENT:
Result := 'A recipient matched more than one of the recipient
descriptor structures and MAPI_DIALOG was not set!';
MAPI_E_ATTACHMENT_NOT_FOUND:
Result := 'The specified attachment was not found!';
MAPI_E_ATTACHMENT_OPEN_FAILURE:
Result := 'The specified attachment could not be open!';
MAPI_E_BAD_RECIPTYPE:
Result := 'The type of a recipient was not MAPI_TO, MAPI_CC, or
MAPI_BCC!';
MAPI_E_FAILURE:
Result := 'One or more unspecified errors occurred!';
MAPI_E_INSUFFICIENT_MEMORY:
Result := 'There was insufficient memory to proceed!';
MAPI_E_LOGIN_FAILURE:
Result := 'There was no default logon, and the user failed to log
on successfully when the logon dialog box was displayed!';
MAPI_E_TEXT_TOO_LARGE:
Result := 'The text in the message was too large to sent!';
MAPI_E_TOO_MANY_FILES:
Result := 'There were too many file attachments!';
MAPI_E_TOO_MANY_RECIPIENTS:
Result := 'There were too many recipients!';
MAPI_E_UNKNOWN_RECIPIENT:
Result := 'A recipient did not appear in the address list!';
MAPI_E_USER_ABORT:
Result := 'The user canceled one of the dialog boxes!';
end;
end;

Dann bekomme ich nach Abschicken folgende Meldung zurück:

Das E-Mail-System hatte ein Problem bei der Verarbeitung dieser
Nachricht. Microsoft Exchange versucht nicht, diese Nachricht erneut für
Sie zuzustellen. Versuchen Sie, diese Nachricht erneut zu senden, oder
wenden Sie sich mit dem folgenden Diagnosetext an Ihren Systemadministrator.
Mit Microsoft Exchange Server 2007 gesendet
Diagnoseinformationen für Administratoren:

Generierender Server: xxxxxxxxx.xxxxxxxxx

***@xxxxx.xx
#554 5.6.0 STOREDRV.Submit.Exception:PropertyValidationException; Failed
to process message due to a permanent exception ##


Ehe Fragen, warum nicht per SMTP kommen, das ist als zweiter Weg
natürlich im Programm enthalten und funktioniert auch problemlos!
Es gibt leider Kunden, die auf dem Outlook-Weg (auch mir der
Sicherheitsabfrage durch Windows) weiterhin bestehen, weil sie z.B. dann
im Postausgang die gesendeten Mails archivieren usw.

Ciao
Stefan
Achim Kalwa
2010-04-16 08:29:05 UTC
Permalink
Hallo Stefan,
Post by Stefan Koschke
Könnte bitte jemand mal folgendes testen?
[...]

ich hatte ebenfalls ein Problem beim Versenden von E-Mails via MAPI,
aber nur wenn eine Datei angehängt werden sollte (hier: PDF).

Ursache war ein falscher Wert für TMapiFileDesc.nPosition. Je nach
Outlook-Version kam ein Fehler, oder der Versand hat funktioniert.

Probier' mal aus, ob die folgende Änderung eine Verbesserung bringt:

[...]
Post by Stefan Koschke
with mlpFiles do
begin
flFlags := 0;
nPosition := cardinal($FFFFFFFF);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Post by Stefan Koschke
lpszPathName := Pansichar(filename);
lpszFileName := nil;
lpFileType := nil;
end;
HTH
Achim
Stefan Koschke
2010-04-16 08:37:17 UTC
Permalink
Post by Achim Kalwa
Hallo Stefan,
Post by Stefan Koschke
Könnte bitte jemand mal folgendes testen?
[...]
ich hatte ebenfalls ein Problem beim Versenden von E-Mails via MAPI,
aber nur wenn eine Datei angehängt werden sollte (hier: PDF).
Ursache war ein falscher Wert für TMapiFileDesc.nPosition. Je nach
Outlook-Version kam ein Fehler, oder der Versand hat funktioniert.
[...]
Post by Stefan Koschke
with mlpFiles do
begin
flFlags := 0;
nPosition := cardinal($FFFFFFFF);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Post by Stefan Koschke
lpszPathName := Pansichar(filename);
lpszFileName := nil;
lpFileType := nil;
end;
HTH
Achim
Hallo Achim,

danke, funktioniert leider immer noch nicht!
Auch mit Thunderbird anstelle Outlook bekomme ich "Senden
fehlgeschlagen" :-(

Ciao
Stefan
Achim Kalwa
2010-04-16 09:25:34 UTC
Permalink
Hallo,
Post by Stefan Koschke
danke, funktioniert leider immer noch nicht!
Auch mit Thunderbird anstelle Outlook bekomme ich "Senden
fehlgeschlagen" :-(
Schade.
Welche Windows Version?
Was ist mit Outlook Express?

Ich setze mal voraus, dass das manuelle Versenden einer E-Mail Nachricht
mit Attachment direkt aus dem jeweiligen E-Mail-Client funktioniert :-)

Weitere Ideen:

Stelle der Empfänger-Adresse mal "SMTP:" voran,
also <SMTP:***@domain.invalid>

HTH
Achim
Stefan Koschke
2010-04-16 10:20:20 UTC
Permalink
Post by Achim Kalwa
Hallo,
Post by Stefan Koschke
danke, funktioniert leider immer noch nicht!
Auch mit Thunderbird anstelle Outlook bekomme ich "Senden
fehlgeschlagen" :-(
Schade.
Welche Windows Version?
Windows 7
Post by Achim Kalwa
Was ist mit Outlook Express?
da mein Code weder mit Outlook noch Thunderbird funktioniert, lass ich
Outlook Express mal außen vor, ich möchte aber annehmen daß es da auch
nicht funktioniert.
Post by Achim Kalwa
Ich setze mal voraus, dass das manuelle Versenden einer E-Mail Nachricht
mit Attachment direkt aus dem jeweiligen E-Mail-Client funktioniert :-)
na klar doch :-)))
Post by Achim Kalwa
Stelle der Empfänger-Adresse mal "SMTP:" voran,
nö, bringt genau so wenig!

Was tut mein Code bei Dir?

Ciao
Stefan
Achim Kalwa
2010-04-16 12:14:41 UTC
Permalink
Hello Stefan,
Post by Stefan Koschke
Windows 7
Bei Windows 7 ist out-of-the-box kein E-Mail-Programm installiert;
der Registry-Zweig
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Messaging Subsystem\

ist leer oder nicht vorhanden. Genau dieser Registry-Key wird aber in
Unit "mapi.pas" ausgelesen (procedure InitMapi); der Aufruf von
LoadLibrary() wird übersprungen.

Falls dies bei Dir der Fall ist, sollte der Aufruf von MapiSendMail()
fehlschlagen; Fehlercode -1.
Post by Stefan Koschke
Was tut mein Code bei Dir?
Ich muss zugeben, das ich hatte ich bislang nicht ausprobiert. Also...

Code funktioniert! (Delphi 2010, Windows XP Prof, Lotus Notes)

Dann wird der Fehler wohl irgendwo in Deiner
Outlook/Exchange-Konfiguration liegen.

Wird denn bei Dir die "vorbereitete" E-Mail in Entwürfe/Postausgang von
Outlook/Thunderbird angezeigt?


Achim
Stefan Koschke
2010-04-16 13:25:50 UTC
Permalink
Hallo Achim,
Post by Achim Kalwa
Hello Stefan,
Post by Stefan Koschke
Windows 7
Bei Windows 7 ist out-of-the-box kein E-Mail-Programm installiert;
der Registry-Zweig
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Messaging Subsystem\
ist leer oder nicht vorhanden. Genau dieser Registry-Key wird aber in
Unit "mapi.pas" ausgelesen (procedure InitMapi); der Aufruf von
LoadLibrary() wird übersprungen.
bei mir ist Outlook installiert und Eintrag nicht leer
Post by Achim Kalwa
Falls dies bei Dir der Fall ist, sollte der Aufruf von MapiSendMail()
fehlschlagen; Fehlercode -1.
nein, es gibt keinen Fehler bei MapiSendMail
Post by Achim Kalwa
Post by Stefan Koschke
Was tut mein Code bei Dir?
Ich muss zugeben, das ich hatte ich bislang nicht ausprobiert. Also...
Code funktioniert! (Delphi 2010, Windows XP Prof, Lotus Notes)
verdammt, was ist da bei mir los? :-(
Post by Achim Kalwa
Dann wird der Fehler wohl irgendwo in Deiner
Outlook/Exchange-Konfiguration liegen.
Wird denn bei Dir die "vorbereitete" E-Mail in Entwürfe/Postausgang von
Outlook/Thunderbird angezeigt?
die wird nicht in Entwürfe oder Postausgang, sondern unter Gesendete
Objekte angezeigt! Das heißt für mich sie ist in Outlook rausgegangen,
aber Exchange hat sie nicht weiter senden können, so verstehe ich auch
die Fehlermeldungsmail vom Exchange-Server...

Ciao
Stefan
Arno Garrels
2010-04-16 10:43:16 UTC
Permalink
Post by Stefan Koschke
Da aber gleichzeitig in letzter Zeit unser Exchange-Server umgestellt
wurde, habe ich keine Ahnung, wo ich suchen soll :-(
Das ist doch schonmal ein Hinweis, wo man suchen kann.
Post by Stefan Koschke
Könnte bitte jemand mal folgendes testen?
Klar, das funktioniert bei mir mit D2010 und OE v6 einwandfrei.
Post by Stefan Koschke
Das E-Mail-System hatte ein Problem bei der Verarbeitung dieser
Nachricht. Microsoft Exchange versucht nicht, diese Nachricht erneut
für Sie zuzustellen. Versuchen Sie, diese Nachricht erneut zu senden,
oder wenden Sie sich mit dem folgenden Diagnosetext an Ihren
Systemadministrator. Mit Microsoft Exchange Server 2007 gesendet
Generierender Server: xxxxxxxxx.xxxxxxxxx
#554 5.6.0 STOREDRV.Submit.Exception:PropertyValidationException; Failed
to process message due to a permanent exception ##
Ehe Fragen, warum nicht per SMTP kommen, das ist als zweiter Weg
natürlich im Programm enthalten und funktioniert auch problemlos!
Mit dem selben Exchange-Server, FROM, TO, Attachment etc.?
Es sieht mir doch eher nach einem Exchange- oder Einstellungsproblem aus.
Teste das mal mit Outlook und dem Standard-Konto sowie identischen
Daten incl. Attachment. Wenn das funktioniert, solltest du entweder die
Pakete, die über den Draht gehen loggen und vergleichen, z.B. mit
WireShark, oder tatsächlich den Admin fragen.

--
Arno Garrels
Stefan Koschke
2010-04-16 10:58:29 UTC
Permalink
Hallo Arno,
Post by Arno Garrels
Post by Stefan Koschke
Da aber gleichzeitig in letzter Zeit unser Exchange-Server umgestellt
wurde, habe ich keine Ahnung, wo ich suchen soll :-(
Das ist doch schonmal ein Hinweis, wo man suchen kann.
jein, da es mit Thunderbird ebenfalls nicht geht...
Post by Arno Garrels
Post by Stefan Koschke
Könnte bitte
jemand mal folgendes testen?
Post by Arno Garrels
Klar, das funktioniert bei mir mit D2010 und OE v6 einwandfrei.
Ohne jegliche Codeänderungen?
Welches Windows?
Post by Arno Garrels
SMTP...
Mit dem selben Exchange-Server, FROM, TO, Attachment etc.?
ja, nur da muß ich mich einloggen...
Post by Arno Garrels
Es sieht mir doch eher nach einem Exchange- oder Einstellungsproblem aus.
Teste das mal mit Outlook und dem Standard-Konto sowie identischen
Daten incl. Attachment. Wenn das funktioniert, solltest du entweder die
Pakete, die über den Draht gehen loggen und vergleichen, z.B. mit
WireShark, oder tatsächlich den Admin fragen.
wie gesagt, mit gleichen daten direkt aus Outlook (oder Thunderbird)
kann ich manuell problemlos Mails versenden!

Ciao
Stefan
Arno Garrels
2010-04-16 12:40:04 UTC
Permalink
Post by Stefan Koschke
Hallo Arno,
Post by Arno Garrels
Post by Stefan Koschke
Da aber gleichzeitig in letzter Zeit unser Exchange-Server
umgestellt wurde, habe ich keine Ahnung, wo ich suchen soll :-(
Das ist doch schonmal ein Hinweis, wo man suchen kann.
jein, da es mit Thunderbird ebenfalls nicht geht...
Huch? Wenn es plötzlich mit beiden, Outlook und TB nicht mehr geht,
ist der Server bestimmt einer der Hauptverdächtigen.
Post by Stefan Koschke
Post by Arno Garrels
Post by Stefan Koschke
Könnte bitte
jemand mal folgendes testen?
Post by Arno Garrels
Klar, das funktioniert bei mir mit D2010 und OE v6 einwandfrei.
Ohne jegliche Codeänderungen?
Ja, aber mit Outlook Express und einem normalen SMTP-Server.
Post by Stefan Koschke
Welches Windows?
Win-XP
Post by Stefan Koschke
Post by Arno Garrels
SMTP...
Mit dem selben Exchange-Server, FROM, TO, Attachment etc.?
ja, nur da muß ich mich einloggen...
Manuell, vor jedem Versenden?
Und der Passwortdialog erscheint nicht mit MAPI?
Der erscheint hier nur, falls kein Passwort in OE gespeichert ist.
Bist du sicher, dass du den manuellen Test mit dem
*STANDARD-KONTO* gemacht hast?

--
Arno Garrels
Stefan Koschke
2010-04-16 13:34:55 UTC
Permalink
Post by Arno Garrels
Post by Stefan Koschke
Hallo Arno,
Post by Arno Garrels
Post by Stefan Koschke
Da aber gleichzeitig in letzter Zeit unser Exchange-Server
umgestellt wurde, habe ich keine Ahnung, wo ich suchen soll :-(
Das ist doch schonmal ein Hinweis, wo man suchen kann.
jein, da es mit Thunderbird ebenfalls nicht geht...
Huch? Wenn es plötzlich mit beiden, Outlook und TB nicht mehr geht,
ist der Server bestimmt einer der Hauptverdächtigen.
wieso?
Thunderbird hat ja absolut nichts mit dem Exchange zu tun, das greift
auf ein Arcor-Mailkonto zum Versenden zu.
Daher denke ich daß mein Code eine kaputte Mail erstellt, nur wie
bekomme ich raus was den beiden (Thunderbird und Exchange) nicht gefällt.
Post by Arno Garrels
Post by Stefan Koschke
Post by Arno Garrels
SMTP...
Mit dem selben Exchange-Server, FROM, TO, Attachment etc.?
ja, nur da muß ich mich einloggen...
Manuell, vor jedem Versenden?
Meine SMTP-Mailvariante arbeitet mit den Overbyte-Komponenten, denen
wird Benutzer, Paßwort usw. natürlich jedes mal mitgegeben wenn eine
Mail rausgehen soll
Post by Arno Garrels
Und der Passwortdialog erscheint nicht mit MAPI?
Bei Mapi setze ich Thunderbird oder Outlook als Standard-Mailprogramm
fest und sende dann mit dem geposteten Code.
Post by Arno Garrels
Der erscheint hier nur, falls kein Passwort in OE gespeichert ist.
Bist du sicher, dass du den manuellen Test mit dem
*STANDARD-KONTO* gemacht hast?
Bei Thunderbird kommt eine (abschaltbare) Warnung daß ein Programm Mails
versenden möchte und dann eine Fehlermeldung aus Thunderbird daß die
mail wegen Fehlern nicht gesendet werden konnte.
Bei Outlook kommt die analoge (nicht abschaltbare) Windows-Meldung, wo
man erst 5 sec warten muß und dann das Senden erlauben kann.
Dann wird die mail verschickt, steht als gesendet in Gesendete Objekte
und wenige sec danach kommt eine Mail vom Exchange daß die mail nicht
verschickt werden konnte.

In beiden Programmen kann ich manuell eine Mail erstellen, den gleichen
Anhang dranhängen und versenden ohne Probleme.

Kann man sich daraus irgendeinen reim machen?

Ciao
Stefan
Arno Garrels
2010-04-16 14:15:01 UTC
Permalink
Post by Stefan Koschke
Thunderbird hat ja absolut nichts mit dem Exchange zu tun, das greift
auf ein Arcor-Mailkonto zum Versenden zu.
Und warum erfahren wir das erst jetzt ;)
Post by Stefan Koschke
Daher denke ich daß mein Code eine kaputte Mail erstellt,
Ist denn das mit MAPI überhaupt möglich?
Die hier von OE v6 erzeugte MAPI-Mail sieht jedenfalls perfekt aus.
Post by Stefan Koschke
nur wie
bekomme ich raus was den beiden (Thunderbird und Exchange) nicht gefällt.
Guck dir doch die rohe E-Mail an, wenn die im Ordner gesendete Objekte
liegt. Die kannst du auch als .eml speichern und mit einem Texteditor
oder TB öffnen.

--

Arno Garrels
Stefan Koschke
2010-04-19 06:52:34 UTC
Permalink
Post by Arno Garrels
Post by Stefan Koschke
Thunderbird hat ja absolut nichts mit dem Exchange zu tun, das greift
auf ein Arcor-Mailkonto zum Versenden zu.
Und warum erfahren wir das erst jetzt ;)
Post by Stefan Koschke
Daher denke ich daß mein Code eine kaputte Mail erstellt,
Ist denn das mit MAPI überhaupt möglich?
Die hier von OE v6 erzeugte MAPI-Mail sieht jedenfalls perfekt aus.
Post by Stefan Koschke
nur wie
bekomme ich raus was den beiden (Thunderbird und Exchange) nicht gefällt.
Guck dir doch die rohe E-Mail an, wenn die im Ordner gesendete Objekte
liegt. Die kannst du auch als .eml speichern und mit einem Texteditor
oder TB öffnen.
Hallo Arno,

inzwischen bin ich etwas weiter:
Result := MapiSendMail(MAPI_Session, Handle,
MapiMessage, MAPI_DIALOG, 0);

öffnet eine Thunderbird E-Mail die ich manuell absenden kann, dabei
funktioniert alles.

Result := MapiSendMail(MAPI_Session, Handle,
MapiMessage, 0, 0);

öffnet eine Thunderbird-Meldung (so ähnlich wie bei Outlook) daß ein
Programm versucht eine Mail zu versenden...
Bestätige ich dies, kommt eine Meldung daß das Senden der Mail
fehlgeschlagen ist!

Ich weiß irgendwie nicht weiter :-(

Ciao
Stefan
Arno Garrels
2010-04-19 10:14:28 UTC
Permalink
Post by Stefan Koschke
Post by Arno Garrels
Post by Stefan Koschke
Thunderbird hat ja absolut nichts mit dem Exchange zu tun, das
greift auf ein Arcor-Mailkonto zum Versenden zu.
Und warum erfahren wir das erst jetzt ;)
Post by Stefan Koschke
Daher denke ich daß mein Code eine kaputte Mail erstellt,
Ist denn das mit MAPI überhaupt möglich?
Die hier von OE v6 erzeugte MAPI-Mail sieht jedenfalls perfekt aus.
Post by Stefan Koschke
nur wie
bekomme ich raus was den beiden (Thunderbird und Exchange) nicht gefällt.
Guck dir doch die rohe E-Mail an, wenn die im Ordner gesendete
Objekte liegt. Die kannst du auch als .eml speichern und mit einem
Texteditor oder TB öffnen.
Hallo Arno,
Result := MapiSendMail(MAPI_Session, Handle,
MapiMessage, MAPI_DIALOG, 0);
öffnet eine Thunderbird E-Mail die ich manuell absenden kann, dabei
funktioniert alles.
Result := MapiSendMail(MAPI_Session, Handle,
MapiMessage, 0, 0);
öffnet eine Thunderbird-Meldung (so ähnlich wie bei Outlook) daß ein
Programm versucht eine Mail zu versenden...
Bestätige ich dies, kommt eine Meldung daß das Senden der Mail
fehlgeschlagen ist!
Glaskugel sagt, dass die SMTP-Authentifizierung nicht erfolgt oder
fehlschlägt.
Post by Stefan Koschke
Ich weiß irgendwie nicht weiter :-(
Und "MapiSendMail(0, 0, mMessage, MAPI_LOGON_UI or MAPI_NEW_SESSION, 0)"
klappt wirklich nicht?
Bei mir funktioniert das auch mit Thunderbird, es wird erst die Warnmeldung
gezeigt und dann nach dem Passwort gefragt.

--
Arno Garrels
Stefan Koschke
2010-04-20 06:25:41 UTC
Permalink
Post by Arno Garrels
Glaskugel sagt, dass die SMTP-Authentifizierung nicht erfolgt oder
fehlschlägt.
Post by Stefan Koschke
Ich weiß irgendwie nicht weiter :-(
Und "MapiSendMail(0, 0, mMessage, MAPI_LOGON_UI or MAPI_NEW_SESSION, 0)"
klappt wirklich nicht?
Bei mir funktioniert das auch mit Thunderbird, es wird erst die Warnmeldung
gezeigt und dann nach dem Passwort gefragt.
Hallo Arno,

Interessanter Anhaltspunkt, danke!
Nach der Warnmeldung kommt bei mir keine Paßwortabfrage.
Das ist eigentlich in Thunderbird gespeichert, vielleicht deshalb?
Ich bekomme langsam noch Zustände!
Vielleicht ist auch in meiner uses MAPI was faul, in meinem Code

with mRecips do
begin
ulRecipClass := MAPI_TO;
lpszName := PansiChar(RecipAdress);
lpszAddress := PansiChar(RecipAdress);
ulEIDSize := 0;
lpEntryID := nil;
end;

waren das eigentlich PChar(Recipadress) aber der Compiler meinte es
müßten PansiChar sein!

Ciao
Stefan
Arno Garrels
2010-04-20 09:36:57 UTC
Permalink
Post by Stefan Koschke
Nach der Warnmeldung kommt bei mir keine Paßwortabfrage.
Das ist eigentlich in Thunderbird gespeichert, vielleicht deshalb?
Ich denke ja.
Post by Stefan Koschke
Ich bekomme langsam noch Zustände!
Vielleicht ist auch in meiner uses MAPI was faul, in meinem Code
with mRecips do
begin
ulRecipClass := MAPI_TO;
lpszName := PansiChar(RecipAdress);
lpszAddress := PansiChar(RecipAdress);
ulEIDSize := 0;
lpEntryID := nil;
end;
So steht es bei mir und es funktioniert.
Post by Stefan Koschke
waren das eigentlich PChar(Recipadress) aber der Compiler meinte es
müßten PansiChar sein!
MAPI verlangt ANSI also PAnsiChar, so ist das auch seit Delphi 2009
in der MAPI.pas deklariert.

--
Arno Garrels
Stefan Koschke
2010-04-23 08:24:13 UTC
Permalink
Hallo zusammen,

in diesem Zusammenhang stehe ich vor einem neuen Rätsel:

setlength(mRecips,RecipAdress.count);

mRecips[0].ulRecipClass := MAPI_TO;
mRecips[0].lpszName := PansiChar(ansistring(RecipAdress[0]));
mRecips[0].lpszAddress := PansiChar(ansistring('SMTP:' +
RecipAdress[0]));
mRecips[0].ulEIDSize := 0;
mRecips[0].lpEntryID := nil;
mRecips[1].ulRecipClass := MAPI_TO;
mRecips[1].lpszName := PansiChar(ansistring(RecipAdress[1]));
mRecips[1].lpszAddress := PansiChar(ansistring('SMTP:' + RecipAdress[1]));
mRecips[1].ulEIDSize := 0;
mRecips[1].lpEntryID := nil;

funktioniert.
Versuche ich das Ganze als Schleife zu benutzen, wird keine Mail und
auch kein Fehler erzeugt

for I := 0 to RecipAdress.Count - 1 do begin
mRecips[i].ulRecipClass := MAPI_TO;
mRecips[i].lpszName := PansiChar(ansistring(RecipAdress[i]));
mRecips[i].lpszAddress := PansiChar(ansistring('SMTP:' +
RecipAdress[i]));
mRecips[i].ulEIDSize := 0;
mRecips[i].lpEntryID := nil;
end;

Kann mich bitte jemand aufklären warum bzw. was ich falsch mache?

Ciao
Stefan
Achim Kalwa
2010-04-23 11:11:52 UTC
Permalink
Hallo Stefan,
Post by Stefan Koschke
Versuche ich das Ganze als Schleife zu benutzen, wird keine Mail und
auch kein Fehler erzeugt
Ist das Array mRecips initialisiert? Das geht aus Deinem Code-Schnipsel
nicht hervor:

setlength(mRecips,RecipAdress.count);
Post by Stefan Koschke
for I := 0 to RecipAdress.Count - 1 do begin
mRecips[i].ulRecipClass := MAPI_TO;
mRecips[i].lpszName := PansiChar(ansistring(RecipAdress[i]));
mRecips[i].lpszAddress := PansiChar(ansistring('SMTP:' + RecipAdress[i]));
mRecips[i].ulEIDSize := 0;
mRecips[i].lpEntryID := nil;
end;
HTH
Achim
Stefan Koschke
2010-04-23 12:14:25 UTC
Permalink
Post by Achim Kalwa
Hallo Stefan,
Post by Stefan Koschke
Versuche ich das Ganze als Schleife zu benutzen, wird keine Mail und
auch kein Fehler erzeugt
Ist das Array mRecips initialisiert? Das geht aus Deinem Code-Schnipsel
setlength(mRecips,RecipAdress.count);
Post by Stefan Koschke
for I := 0 to RecipAdress.Count - 1 do begin
mRecips[i].ulRecipClass := MAPI_TO;
mRecips[i].lpszName := PansiChar(ansistring(RecipAdress[i]));
mRecips[i].lpszAddress := PansiChar(ansistring('SMTP:' +
RecipAdress[i]));
mRecips[i].ulEIDSize := 0;
mRecips[i].lpEntryID := nil;
end;
ja, das das Array mRecips ist initialisiert, die Zeile

setlength(mRecips,RecipAdress.count);

hätte im Post 2 mal auftauchen müssen!
Ansonsten wäre ich bestimmt auch mit einem Laufzeitfehler rausgeflogen :-)

Ciao
Stefan

Loading...