Autor |
Beitrag |
tif
Beiträge: 46
Erhaltene Danke: 1
Winxxx
TP, BP, Delphi 1 - 2009
|
Verfasst: 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
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
|
Verfasst: 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
Beiträge: 46
Erhaltene Danke: 1
Winxxx
TP, BP, Delphi 1 - 2009
|
Verfasst: 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
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: 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
Beiträge: 46
Erhaltene Danke: 1
Winxxx
TP, BP, Delphi 1 - 2009
|
Verfasst: 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
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 04.11.10 12:45
eine sehr schöne Art zuzugreifen hätte ich noch: (ADO)
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:
|
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;
public 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
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
|
Verfasst: Do 04.11.10 14:52
www.RApware.nl hat die passenden Komponenten für extended MAPI.
Willmar
|
|
Sinspin
Beiträge: 1322
Erhaltene Danke: 117
Win 10
RIO, CE, Lazarus
|
Verfasst: 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
Beiträge: 46
Erhaltene Danke: 1
Winxxx
TP, BP, Delphi 1 - 2009
|
Verfasst: 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
|
|
|