Autor Beitrag
tif
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46
Erhaltene Danke: 1

Winxxx
TP, BP, Delphi 1 - 2009
BeitragVerfasst: Di 26.10.10 10:57 
Liebes freundliches Forum,

ich muss von einem Exchange - Server Mails abholen und auch Mails versenden.
Das sollte doch grundsätzlich über MAPI umsetzbar sein, richtig?

Ich habe mir dazu schon verschiedene Dinge angeschaut, leider noch ohne richtigen Erfolg.

Momentan schaffe ich mich an der Jedi Komponente TJclMail. Ich habe aber auch z.B. das hier schon probiert.

Mit meinem lokalen Outlook funktioniert alles wunderbar, beim Kunden mit Exchange erhalte ich nicht mal eine Verbindung zum Exchangeserver. Leider auch keine wirkliche Fehlermeldung, so dass ich nicht sicher bin, wo ich suchen soll.

Hat jemand hier vielleicht so eine Lösung schon mal implementiert? Wenn ja, welche Komponenten sind denn nun zu empfehlen (auch ggf. kostenpflichtige)? Muss auf dem Client Outlook installiert sein, damit der MAPI - Zugriff auch für 'Drittprogramme' wie erwartet funktioniert?

Über jeden Tipp oder Denkanstoß würde ich mich freuen!

Vielen Dank,
viele Grüße
Tino

P.S.
Das ist ein Crosspost , der aber hoffentlich nach 14 Tagen erlaubt ist. Bitte entschuldigt dies.
jaevencooler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 166
Erhaltene Danke: 6

MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
BeitragVerfasst: Di 26.10.10 12:32 
Tach auch,

soweit ich informiert bin kannst Du nur über den Outlook Client auf den Exchange Server zugreifen, und nicht direkt...

Wir haben in unserer Warenwirtschaft Zugriff auf Tobit Server und Exchange Server, aber jeweils nur ! über einen entsprechenden Client (Infocenter, Outlook).

Für Outlook benötigt man aber keine Kauf Komponenten, das geht auch alles über OLE.




Beste Grüße
Michael Ellermann

_________________
Wissen ist Macht, nichts wissen macht auch nichts...
tif Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46
Erhaltene Danke: 1

Winxxx
TP, BP, Delphi 1 - 2009
BeitragVerfasst: Di 26.10.10 14:30 
Danke für die schnelle Antwort.

Ok, Outlook per OLE - fernsteuern. Du meinst, es geht nicht anders?

Ich möchte gern -völlig unabhängig vom lokalen Benutzer- auf das zentrale Postfach zugreifen. Ohne dass ich ein lokales Profil dafür hätte o.ä.
Liegt hier mein Denkfehler?

Hintergrund:
Eine Anwendung empfängt und sendet Nachrichten über ein firmenzentrales EDI - Mailpostfach. Unabhängig davon, welcher Nutzer auf welchem PC die Anwendung startet, soll diese Kommunikation möglich sein. Auch sollten die Nachrichten nicht in 'lokalen' Outlook - Ordnern des Benutzers auftauchen, das Programm selbst übernimmt diese Funktionen. Sozusagen ein 'Parallel - Outlook'.

Direkten SMTP/POP - Zugriff verbieten in diesem Fall Firmen - Richtlinien.

Habe ich damit ein Designproblem??
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Di 26.10.10 15:19 
Es sollte auch per MAPI funktionieren !

guckst du hier

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
tif Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46
Erhaltene Danke: 1

Winxxx
TP, BP, Delphi 1 - 2009
BeitragVerfasst: Do 04.11.10 11:53 
Hallo,

sorry, dass ich mich erst heute melde und DANKE für den Tipp.

Zumindest erhalte ich jetzt eine weiterführende Fehlermeldung. Leider muss ich momentan ein andereres Projekt vorziehen, ich melde mich aber nochmal sobald ich wirkliche Ergebnisse habe.

Danke, viele Grüße
Tino
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 04.11.10 12:45 
eine sehr schöne Art zuzugreifen hätte ich noch: (ADO)
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
{
2010 by Thomas Wassermann AKA Bummi www.explido-software.de
Provider=Microsoft.JET.OLEDB.4.0;Exchange 4.0;MAPILEVEL=Postfach - Wassermann, Thomas|;PROFILE=Outlook;TABLETYPE=0;DATABASE=\
Provider=Microsoft.JET.OLEDB.4.0;Exchange 4.0;MAPILEVEL=Postfach - Wassermann, Thomas|;PROFILE=Outlook;TABLETYPE=1;DATABASE=\
}


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB,ComObj,ClipBrd, Menus, ComCtrls;

type
  TForm1 = class(TForm)
    ac: TADOConnection;
    ads: TADODataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    GroupBox1: TGroupBox;
    Postfaecher: TListBox;
    ListBox1: TListBox;
    SubPostfaecher: TListBox;
    PopupMenu1: TPopupMenu;
    InZwischenablagekopieren1: TMenuItem;
    GroupBox2: TGroupBox;
    tv: TTreeView;
    procedure ListBox1DblClick(Sender: TObject);
    procedure PostfaecherDblClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure adsAfterOpen(DataSet: TDataSet);
    procedure SubPostfaecherDblClick(Sender: TObject);
    procedure InZwischenablagekopieren1Click(Sender: TObject);
    procedure tvChange(Sender: TObject; Node: TTreeNode);

  private
    Fdir:String;
    FLastNode:TTreenode;

    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

Procedure SetClipboardTable4Excel(Ads:TAdodataset;WithHeader:Boolean=true);
  var
    sl:TStringList;
    i:Integer;
    s:String;
  Const
    sep=#9;

  Function RemoveInvalid(const s:String):String;
    begin
      Result := StringReplace(StringReplace(StringReplace(s,#13,' ',[rfReplaceAll])
                              ,#10,'',[rfReplaceAll])
                              ,sep,' ',[rfReplaceAll]);
    end;
begin
  sl:=TStringList.Create;
  s:='';
  Ads.First;
  if WithHeader then
    begin
      For i:= 0  to Ads.FieldCount - 1 do
        if Ads.Fields[i].Visible then
          begin
          s:=s +  Ads.Fields[i].DisplayLabel + Sep;
          end;
      s:=Copy(s,1,length(s) - Length(sep));
      sl.Add(s);
    end;
  While not Ads.Eof do
    begin
      s:='';
      For i:= 0  to Ads.FieldCount - 1 do
        if Ads.Fields[i].Visible then
          begin
          if (Ads.Fields[i].DataType=ftMemo) or (Ads.Fields[i].DataType=ftWideMemo) then s:=s + RemoveInvalid(Ads.Fields[i].asString) + Sep
          else s:=s + RemoveInvalid(Ads.Fields[i].DisplayText) + Sep;
          end;
      s:= Copy(s,1,length(s) - Length(sep));
      sl.Add(s);
      Ads.Next;
    end;
  ClipBoard.SetTextBuf(Pchar(sl.Text));
  sl.Free;
end;


procedure TForm1.adsAfterOpen(DataSet: TDataSet);
var
  i : Integer;
begin
  for i  := 0 to ads.FieldCount - 1 do
      begin
         ads.Fields[i].DisplayWidth := 20;

      end;
end;

Function GetFullPath4Node(Node:TTreenode;PathPart:String):String;
    begin
      if Assigned(Node) then
        begin
        if Node.Level=0 then Result := Node.Text +'|' + PathPart else Result := GetFullPath4Node(Node.Parent,Node.Text + '\' + PathPart);
        end
      else Result := '';
    end;

procedure TForm1.FormCreate(Sender: TObject);
var
  sl1,sl2:TStringList;
  i:Integer;
  pn:TTreenode;
  Procedure AddChildren(Node:TTreenode;Path:String);
    var
    sl:TStringList;
    ii:Integer;
    lac:TAdoConnection;
    begin

      sl := TStringList.Create;
      lac:=TAdoConnection.Create(self);
      lac.LoginPrompt:=false;
      try

      lac.ConnectionString:='Provider=Microsoft.JET.OLEDB.4.0;Exchange 4.0;MAPILEVEL=' + path + ';PROFILE=Outlook;TABLETYPE=0;DATABASE=\;';
      lac.open;
      lac.GetTableNames(sl);
      for ii := 0 to sl.count - 1 do
        begin
          AddChildren(tv.Items.Addchild(Node,sl[ii]),path+sl[ii]+'\');
        end;
      finally
        lac.Free;
        sl.Free;
      end;

    end;
begin
  {
  try
  ac.ConnectionString:='Provider=Microsoft.JET.OLEDB.4.0;Exchange 4.0;MAPILEVEL=;PROFILE=Outlook;TABLETYPE=0;DATABASE=\;';
  ac.open;
  ac.GetTableNames(Postfaecher.items);
  Postfaecher.ItemIndex := Postfaecher.Items.Count - 1;
  PostfaecherDblClick(nil);
  except end;
  ac.Close;
  }


  sl1 :=TStringList.Create;
  try
  ac.ConnectionString:='Provider=Microsoft.JET.OLEDB.4.0;Exchange 4.0;MAPILEVEL=;PROFILE=Outlook;TABLETYPE=0;DATABASE=\;';
  ac.open;
  ac.GetTableNames(sl1);
  for i := 0 to sl1.count - 1 do
    begin
      AddChildren(tv.Items.Add(nil,sl1[i]),sl1[i]+'|');
    end;
  finally
  sl1.Free;
  end;
  tv.OnChange := tvChange;
  tvChange(nil,tv.Items[0]);
end;


procedure TForm1.tvChange(Sender: TObject; Node: TTreeNode);
begin
  if Assigned(Node) and (Node<>FLastNode) then
    begin
      FLastNode := Node;
      Fdir := GetFullPath4Node(Node.Parent,'');
      ac.Close;
      ac.ConnectionString:='Provider=Microsoft.JET.OLEDB.4.0;Exchange 4.0;MAPILEVEL=' + Fdir+';PROFILE=Outlook;TABLETYPE=0;DATABASE=\;';
      ac.open;
      ads.Close;
      ads.CommandText := 'Select * from [' + Node.text + ']'  ;
      ads.Open;
    end;

end;



procedure TForm1.InZwischenablagekopieren1Click(Sender: TObject);
begin
   SetClipboardTable4Excel(Ads);
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  if Listbox1.Items.count > 0 then
    begin
      ads.Close;
      ads.CommandText := 'Select * from ['+Listbox1.Items[Listbox1.ItemIndex]+']'  ;
      ads.Open;
    end;
end;

procedure TForm1.PostfaecherDblClick(Sender: TObject);
begin
  if Postfaecher.items.count>0 then
    begin
      ac.Close;
      Fdir :=Postfaecher.items[Postfaecher.ItemIndex]+'|';
      ac.ConnectionString:='Provider=Microsoft.JET.OLEDB.4.0;Exchange 4.0;MAPILEVEL='+Postfaecher.items[Postfaecher.ItemIndex]+'|;PROFILE=Outlook;TABLETYPE=0;DATABASE=\;';
      ac.open;
      ac.GetTableNames(Listbox1.items);
      ac.GetTableNames(SubPostfaecher.items);
      Listbox1.ItemIndex := Listbox1.Items.Count - 1;
      ListBox1DblClick(nil);
    end;

end;

procedure TForm1.SubPostfaecherDblClick(Sender: TObject);
begin
  if SubPostfaecher.items.count>0 then
    begin
      ac.Close;
      Fdir := Fdir + SubPostfaecher.items[SubPostfaecher.ItemIndex] + '\';
      ac.ConnectionString:='Provider=Microsoft.JET.OLEDB.4.0;Exchange 4.0;MAPILEVEL='+Fdir+';PROFILE=Outlook;TABLETYPE=0;DATABASE=\;';
      ac.open;
      ac.GetTableNames(SubPostfaecher.items);
      ac.GetTableNames(Listbox1.items);
    end;
end;


end.
Willmar
Hält's aus hier
Beiträge: 12
Erhaltene Danke: 1

Windows 7, Windows 2008 R2
Delphi 2007 für Win32 Ent
BeitragVerfasst: Do 04.11.10 14:52 
www.RApware.nl hat die passenden Komponenten für extended MAPI.

Willmar
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1322
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 04.11.10 18:17 
Ich kann auch nur die EasyMAPI Komponenten von RapWare empfehlen, mit denen habe ich bisher jedes Problem gelößt bekommen.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
tif Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46
Erhaltene Danke: 1

Winxxx
TP, BP, Delphi 1 - 2009
BeitragVerfasst: Do 11.11.10 08:22 
Hallo nochmal und Vielen Dank für Eure Hilfe.

Nach einigem Hin und Her, dass immer wieder in lokalen Mailkonten und Postfächern mündete, wurde nun endlich klar, dass ich auf der völlig falschen Fährte war.

Zitat:
Ich möchte gern -völlig unabhängig vom lokalen Benutzer- auf das zentrale Postfach zugreifen. Ohne dass ich ein lokales Profil dafür hätte o.ä.
Liegt hier mein Denkfehler?


Der Zugriff auf mehrere Exchange - Postfächer klappt wohl erst mit Office 2010.
So wie ich mir das vorstellte, zeigte sich Mapi als der falsche Ansatz. Nein, mein Zauberwort heißt "IMAP".

Also, Danke für die viele Mapi - Hilfe, ich kann versichern, dass Eure Mapi - Vorschläge funktionieren und das dieser Thread eine schöne Sammlung dazu geworden ist.

Die Lösung meines konkreten Problems liefert jetzt aber die IdIMAP - Komponente aus der Indy Suite.

Viele Grüße und sorry für die Irreführung
Tino