![]() |
Outlook 2013 Mapi Error
Hallo zusammen.
Einige unserer Kunden haben Outlook 2013 (32Bit) installiert und nu funktioniert die Mapi nicht mehr. Wir selber haben leider kein Outlook 2013, aber evtl hatte jemand das gleiche Problem. und zwar wird
Delphi-Quellcode:
abgelehnt mit MAPI_USER_ABORT.
result:=MapiLogon(Handle, PAnsiChar(''), PAnsiChar(''), MAPI_LOGON_UI or MAPI_NEW_SESSION, 0, @MAPI_Session);
LG Sven |
AW: Outlook 2013 Mapi Error
Ich habe zwar Outlook 2013 in 32 Bit und Delphi/C++ Builder installiert, verstehe aber kein Wort. Kann ich trotzdem irgendwie helfen? :stupid:
|
AW: Outlook 2013 Mapi Error
Um hier helfen zu können bräuchte ich genauere Informationen:
Welche Mapi - Komponenten sind im Einsatz? Ist das Betriebssystem x86 oder x64 Läuft die Andwendung die das MAPI von Outlook ansprechen soll auf x86 oder x64? LG |
AW: Outlook 2013 Mapi Error
Liste der Anhänge anzeigen (Anzahl: 1)
Office wie auch unsere Programm sind 32 Bit Programme.
Das es Probleme mit Office 64Bit und der Mapi gibt ist uns bekannt. Mapi Unit ist die in Delphi unter rtl\Win\Mapi.pas sprich "Mapi32.dll". Ich habe einmal ein kleines Programm angehängt, was eine Email im Emailprogramm öffnet. Es wird nicht rausgesendet oder ähnliches. Anbei noch der Quellcode :
Delphi-Quellcode:
unit umain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,mapi; type Tfmain = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var fmain: Tfmain; implementation {$R *.dfm} function SendEMailMapi(Handle:THandle; Mail:TStrings; showdialog:boolean):Cardinal; const MapiRecipClassStrings : array[1..3] of String =('to','cc','bcc'); var MapiMessage: TMapiMessage; Receip : array of TMapiRecipDesc; i,j, mc, ReceipCount : integer; MAPI_Session : Cardinal; WndList : Pointer; MapiRecipClassCounter : array[1..3] of Integer; function GetMailValue (AMapiRecipClass, Index : Integer) : string; begin result:=Mail.Values[MapiRecipClassStrings[AMapiRecipClass]+IntToStr(index)]; end; begin result:=MapiLogon(Handle, PAnsiChar(''), PAnsiChar(''), MAPI_LOGON_UI or MAPI_NEW_SESSION, 0, @MAPI_Session); if ( result <> SUCCESS_SUCCESS) then MessageBox(Handle, PChar(format('Fehler beim Versuch eMails zu versenden'+#13+'Fehlercode :<%d>',[Result])), PChar('Error'), MB_ICONERROR or MB_OK) else begin for MC:=MAPI_TO to MAPI_BCC do begin MapiRecipClassCounter[MC]:=0; for j:= 0 to MaxInt do begin // Empfänger zählen if GetMailValue(MC,j) = '' then break; Inc(MapiRecipClassCounter[MC]); end; end; ReceipCount:=MapiRecipClassCounter[MAPI_TO]+ MapiRecipClassCounter[MAPI_CC]+ MapiRecipClassCounter[MAPI_BCC]; // Gesamtempfängerzahl errechnen SetLength(Receip,ReceipCount); // Empfängerarray dimensionieren i:=0; if ReceipCount>0 then begin for MC:=MAPI_TO to MAPI_BCC do if MapiRecipClassCounter[MC]>0 then for j:=0 to MapiRecipClassCounter[MC]-1 do begin Receip[i].ulReserved:= 0; Receip[i].ulRecipClass:= MC; Receip[i].lpszName:= StrNew(PAnsiChar(AnsiString(GetMailValue(MC,j)))); Receip[i].lpszAddress:= StrNew(PAnsiChar(AnsiString('SMTP:' + GetMailValue(MC,j)))); Receip[i].lpEntryID:=nil; Receip[i].ulEIDSize:= 0; inc(i); end; end; MapiMessage.nRecipCount := ReceipCount; // Empfängeranzahl in Message setzen MapiMessage.lpRecips := Pointer(Receip); // Pointer auf Empfängerarray übergeben if Mail.Values['subject'] <>'' then MapiMessage.lpszSubject:= PAnsiChar(AnsiString(Mail.Values['subject'])); if Mail.Values['body'] <>'' then MapiMessage.lpszNoteText:= PAnsiChar(AnsiString(Mail.Values['body'])); WndList:= DisableTaskWindows(0); // "semimodal" machen try if ShowDialog then begin Result:= MapiSendMail(MAPI_Session, Handle, MapiMessage, MAPI_DIALOG, 0);// senden der Mail end else begin // Funktioniert aus Sicherheitsrichtlinien nicht mehr mit jedem Emailprogramm Result:= MapiSendMail(MAPI_Session, Handle, MapiMessage, 0, 0);// senden der Mail end; if result <> 0 then begin Case result of MAPI_E_AMBIGUOUS_RECIPIENT: MessageDlg('Empfänger nicht eindeutig. (Nur möglich, wenn Emailadresse nicht angegeben.)',mterror,[mbok],0); MAPI_E_ATTACHMENT_NOT_FOUND: MessageDlg('Datei zum Anhängen nicht gefunden',mterror,[mbok],0); MAPI_E_ATTACHMENT_OPEN_FAILURE: MessageDlg('Datei zum Anhängen konnte nicht geöffnet werden.',mterror,[mbok],0); MAPI_E_BAD_RECIPTYPE: MessageDlg('Empfängertyp nicht MAPI_TO, MAPI_CC oder MAPI_BCC.',mterror,[mbok],0); MAPI_E_FAILURE: MessageDlg('Unbekannter Fehler.',mterror,[mbok],0); MAPI_E_INSUFFICIENT_MEMORY: MessageDlg('Nicht genug Speicher.',mterror,[mbok],0); MAPI_E_LOGIN_FAILURE: MessageDlg('Benutzerlogin fehlgeschlagen.',mterror,[mbok],0); MAPI_E_TEXT_TOO_LARGE: MessageDlg('Text zu groß.',mterror,[mbok],0); MAPI_E_TOO_MANY_FILES: MessageDlg('Zu viele Dateienanhänge.',mterror,[mbok],0); MAPI_E_TOO_MANY_RECIPIENTS: MessageDlg('Zu viele Empfänger angegeben.',mterror,[mbok],0); MAPI_E_UNKNOWN_RECIPIENT: MessageDlg('Empfänger nicht in Adressbuch gefunden. '+ '(Nur möglich, wenn Emailadresse nicht angegeben.)',mterror,[mbok],0); MAPI_E_USER_ABORT: MessageDlg('Benutzer hat Senden abgebrochen oder MAPI nicht installiert.',mterror,[mbok],0); else MessageBox(Handle, PChar(format('Fehler beim Versuch eMails zu versenden'+#13+'Fehlercode :<%d>',[Result])), PChar('Error'), MB_ICONERROR or MB_OK); end; end; finally // aufräumen EnableTaskWindows(WndList); for i:=0 to ReceipCount-1 do begin StrDispose(Receip[i].lpszName); StrDispose(Receip[i].lpszAddress); end; Finalize(Receip); end; MapiLogOff(MAPI_Session, Handle, 0, 0); end; end; procedure SendEmail(const Subject, Body, SenderName, SenderEMail,Recipientsemail: string; CCEmail,FileNamelist:string;typ : Cardinal;showdialog:boolean); var mail : TStringList; begin mail:= TStringList.Create; try mail.values['to0'] := Recipientsemail; mail.values['subject'] := PChar(Subject); mail.values['body'] := PChar(Body); SendEMailMapi(Application.Handle, mail, showdialog); finally mail.Free; end; end; procedure Tfmain.Button1Click(Sender: TObject); begin SendEmail('Test per Mapi', 'Dies ist ein Mapi Test', 'Mapi Tester','mapitester@mapitest.de','empfaenger@irgendwas.de','','',MAPI_CC,true); end; end. |
AW: Outlook 2013 Mapi Error
Probier's mal damit:
laß das Logon / LogOff weg und arbeite bei SendMail mit Sessionhandle 0. Damit haben wir hier in der Firma eine Teil der Probleme lösen können. Allerdings gibt es bei einzelnen Kunden immer noch die abstrusesten Probleme mit MAPI und Outlook 2013. Such auch mal danach im Web, ich find leider auf die Schnelle die Stelle nicht mehr, die mich auf Sessionhandle 0 gebracht hat. Grüße, Uli |
AW: Outlook 2013 Mapi Error
Ich erhalte dann die Meldung ( schon bei uns ) MAPI_E_TOO_MANY_FILES, obwohl gar keine mitgegeben werden.
Edit nun geht es, nachdem ich den einen Teil für die Attachments aus der Original Funktion eingefügt habe, welche aber gar nicht benutzt wird. Egal, ich werde es einmal bei unserem Kunden testen. |
AW: Outlook 2013 Mapi Error
Gleiches Problem MAPI_E_USER_ABORT.
|
AW: Outlook 2013 Mapi Error
Hallo,
ich habe zur Zeit das selbe Problem bei einem Kunden der auf Outlook 2013 umgestiegen ist. MAPI lief bislang problemlos nach dem Umstieg aber nicht mehr. Konnte die Ursache gefunden werden? Grüße Wolfgang |
AW: Outlook 2013 Mapi Error
Haben Outlook 2013 und die JCL-SimpleMAPI-Implementierung - Kein Problem.
Kannst du es damit mal testen? |
AW: Outlook 2013 Mapi Error
Wenn möglich sollte das Programm, so wie bisher, mit den direkten MAPI Aufrufe ohne zusätzliche Komponente laufen. Es scheinen ja nur bestimmte Insatallationen von Outlook 2013 davon betroffen zu sein.
Es wäre sehr interessant ob stalkingwolf das Problem lösen konnte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz