AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Outlook 2013 Mapi Error

Ein Thema von stalkingwolf · begonnen am 11. Feb 2014 · letzter Beitrag vom 22. Jul 2015
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#1

Outlook 2013 Mapi Error

  Alt 11. Feb 2014, 10:36
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
result:=MapiLogon(Handle, PAnsiChar(''), PAnsiChar(''), MAPI_LOGON_UI or MAPI_NEW_SESSION, 0, @MAPI_Session); abgelehnt mit MAPI_USER_ABORT.

LG
Sven
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Outlook 2013 Mapi Error

  Alt 11. Feb 2014, 10:57
Ich habe zwar Outlook 2013 in 32 Bit und Delphi/C++ Builder installiert, verstehe aber kein Wort. Kann ich trotzdem irgendwie helfen?
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Outlook 2013 Mapi Error

  Alt 11. Feb 2014, 16:06
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
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#4

AW: Outlook 2013 Mapi Error

  Alt 12. Feb 2014, 15:02
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.
Angehängte Dateien
Dateityp: zip mapitest.zip (213,7 KB, 30x aufgerufen)

Geändert von stalkingwolf (12. Feb 2014 um 15:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Outlook 2013 Mapi Error

  Alt 12. Feb 2014, 16:43
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
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#6

AW: Outlook 2013 Mapi Error

  Alt 13. Feb 2014, 08:19
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.

Geändert von stalkingwolf (13. Feb 2014 um 08:36 Uhr)
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#7

AW: Outlook 2013 Mapi Error

  Alt 13. Feb 2014, 10:41
Gleiches Problem MAPI_E_USER_ABORT.
  Mit Zitat antworten Zitat
Wolfgang55

Registriert seit: 30. Aug 2009
4 Beiträge
 
#8

AW: Outlook 2013 Mapi Error

  Alt 22. Jul 2015, 08:02
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Outlook 2013 Mapi Error

  Alt 22. Jul 2015, 08:27
Haben Outlook 2013 und die JCL-SimpleMAPI-Implementierung - Kein Problem.

Kannst du es damit mal testen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Wolfgang55

Registriert seit: 30. Aug 2009
4 Beiträge
 
#10

AW: Outlook 2013 Mapi Error

  Alt 22. Jul 2015, 09:01
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz