Autor |
Beitrag |
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Mi 23.11.05 23:59
Hallo
Moechte eine E-Mail ueber Outlook (2002 od. XP) senden.
Alles funktioniert ausser dass der Absender leer bleibt, obwowhl
dem MAPIMessage.lpOriginator der Absender zugewiesen wird.
Hat jemand was am Code nicht stimmt (oder liegt's am Outlook)?
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:
| function SendEMail(Handle: THandle; Mail: TStrings): Cardinal; type TAttachAccessArray = array[0..0] of TMapiFileDesc; PAttachAccessArray = ^TAttachAccessArray; var MapiMessage: TMapiMessage; Receip: TMapiRecipDesc; Origin: TMapiRecipDesc; Attachments: PAttachAccessArray; AttachCount: Integer; i1: integer; FileName: string; dwRet: Cardinal; MAPI_Session: Cardinal; WndList: Pointer; begin dwRet := MapiLogon(Handle, PChar(''), PChar(''), MAPI_LOGON_UI or MAPI_NEW_SESSION, 0, @MAPI_Session);
if (dwRet <> SUCCESS_SUCCESS) then begin MessageBox(Handle, PChar('Error while trying to send email'), PChar('Error'), MB_ICONERROR or MB_OK); end else begin FillChar(MapiMessage, SizeOf(MapiMessage), #0); Attachments := nil;
FillChar(Receip, SizeOf(Receip), #0); if Mail.Values['to'] <> '' then begin Receip.ulReserved := 0; Receip.ulRecipClass := MAPI_TO; Receip.lpszName := StrNew(PChar(Mail.Values['to'])); Receip.lpszAddress := StrNew(PChar('SMTP:' + Mail.Values['to'])); Receip.ulEIDSize := 0; MapiMessage.nRecipCount := 1; MapiMessage.lpRecips := @Receip; end;
FillChar(Origin, SizeOf(Origin), #0); if Mail.Values['from'] <> '' then begin Origin.ulReserved := 0; Origin.ulRecipClass := MAPI_ORIG; Origin.lpszName := StrNew(PChar(Mail.Values['from'])); Origin.lpszAddress := StrNew(PChar('SMTP:' + Mail.Values['from'])); Origin.ulEIDSize := 0; Origin.lpEntryID := nil; MAPIMessage.lpOriginator := @Origin; end;
AttachCount := 0;
for i1 := 0 to MaxInt do begin if Mail.Values['attachment' + IntToStr(i1)] = '' then break; Inc(AttachCount); end;
if AttachCount > 0 then begin GetMem(Attachments, SizeOf(TMapiFileDesc) * AttachCount);
for i1 := 0 to AttachCount - 1 do begin FileName := Mail.Values['attachment' + IntToStr(i1)]; Attachments[i1].ulReserved := 0; Attachments[i1].flFlags := 0; Attachments[i1].nPosition := ULONG($FFFFFFFF); Attachments[i1].lpszPathName := StrNew(PChar(FileName)); Attachments[i1].lpszFileName := StrNew(PChar(ExtractFileName(FileName))); Attachments[i1].lpFileType := nil; end; MapiMessage.nFileCount := AttachCount; MapiMessage.lpFiles := @Attachments^; end;
if Mail.Values['subject'] <> '' then MapiMessage.lpszSubject := StrNew(PChar(Mail.Values['subject'])); if Mail.Values['body'] <> '' then MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values['body']));
WndList := DisableTaskWindows(0); try Result := MapiSendMail(MAPI_Session, Handle, MapiMessage, MAPI_DIALOG, 0); finally EnableTaskWindows(WndList); end;
for i1 := 0 to AttachCount - 1 do begin StrDispose(Attachments[i1].lpszPathName); StrDispose(Attachments[i1].lpszFileName); end;
if Assigned(MapiMessage.lpszSubject) then StrDispose(MapiMessage.lpszSubject); if Assigned(MapiMessage.lpszNoteText) then StrDispose(MapiMessage.lpszNoteText); if Assigned(Receip.lpszAddress) then StrDispose(Receip.lpszAddress); if Assigned(Receip.lpszName) then StrDispose(Receip.lpszName); if Assigned(Origin.lpszAddress) then StrDispose(Origin.lpszAddress); if Assigned(Origin.lpszName) then StrDispose(Origin.lpszName); MapiLogOff(MAPI_Session, Handle, 0, 0); end; end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TfrmMain.btnSendClick(Sender: TObject); var mail: TStringList; ssubject: string; begin mail := TStringList.Create; try mail.values['from'] := 'from@xzy.net'; mail.values['to'] := 'to@xzy.net'; mail.values['subject'] := 'subject'; mail.values['body'] := 'body'; try sendEMail(Application.Handle, mail); except end; finally mail.Free; end; end; |
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Fr 25.11.05 20:04
sooo kompliziert.
versuchsmal damit, sofern du auf der Server-seite die Outlook Items hast.
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:
| procedure TMain.HelpMailClick(Sender: TObject); var TOA:TOutlookApplication; MI: MailItem; begin TOA:= TOutlookApplication.Create(Self); TOA.ConnectKind := ckRunningOrNew; try TOA.Connect; except TOA.Free; MessageDlg('Outlook kann nicht geöffnet werden!',mtError,[mbok],0); exit; end; MI:= TOA.CreateItem(olMailItem) as MailItem; MI.Attachments.Add('Dateiname',emptyParam,EmptyParam,EmptyParam); MI.HTMLBody:='HTML Body'; MI.Subject:='Subjekt'; MI.Companies:= 'Your Company'; MI.Categories:='HelpDesk'; MI.Recipients.Add('Somewhere@never.go'); MI.Display(1); TOA.Disconnect; TOA.Free; end; |
grez
msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
FFKangoroo
      
Beiträge: 33
WIN XP SP2
Delphi 7
|
Verfasst: Di 09.05.06 12:14
Halli Hallo
hab mal eine Frage zu dem Ansatz von MSCH.
Ich hab das mal so in mein Programm übernommen(eher gesagt versucht), hab auch die Outlookapplication in meine Form gezogen und es compiliert. Soweit gab es keine Fehler. Wenn ich dann aber die Procedur aufrufe. Stürzt das Programm ab und sagt mir:
"Im Projekt Projekt.exe ist eine Exeption der Klasse EOleSysError aufgetreten. Meldung:'Klasse nicht registriert'. Prozess wurde angehalte. Mit Einzelne Anweisung oder Start fortsetzen."
und das bei der Zeile: "TOA.Connect;"
Warum? und Wie krieg ich es weg? Hab ich villeicht ein Uses nicht eingebunden?
oder was ist mit "Server-Seite" gemeint (hab es einfach nur in der Form.
Danke jetzt schon mal !!!
Das FFKangoroo
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Di 09.05.06 20:02
Hallo
hast du auch outlook (nicht outlookexpress!) installiert auf deinem Rechner?
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
FFKangoroo
      
Beiträge: 33
WIN XP SP2
Delphi 7
|
Verfasst: Mi 10.05.06 17:12
Hehe jop daran lags!
Danke jetzt funktioniert es
|
|
Kuh
Hält's aus hier
Beiträge: 1
|
Verfasst: Sa 25.10.08 18:02
bin ich jetzt blind oder verschickt die procedure von MSCH die email nicht?
bei mir öffnet sich ein Fenster und dort kann ich dann den text usw schreiben. das einzige was ich nicht kann ich absenden.
oder ist speichern = senden???
(was ist für äußert unrealistisch halte)
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Sa 25.10.08 18:34
Imho sollte das Formular wie es outlook verwendet zum E-Mail schreiben angezeigt werden und die Werte die in der Funktion gesetzt werden (subjekt, etc) bereits enthalten sein.
Das einzige was fehlt sind die Ansender-Mailadressen.
Achtung: das Teil zeigt wirklich das Outlook-Formuar an. Wenn du dort die Buttonleiste ausgeblendet hast,
siehst du auch nicht den Schalter "Senden".
:-)Msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
Nilius
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 25.05.11 09:31
MSCH hat folgendes geschrieben : | sooo kompliziert.
versuchsmal damit, sofern du auf der Server-seite die Outlook Items hast.
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:
| procedure TMain.HelpMailClick(Sender: TObject); var TOA:TOutlookApplication; MI: MailItem; begin TOA:= TOutlookApplication.Create(Self); TOA.ConnectKind := ckRunningOrNew; try TOA.Connect; except TOA.Free; MessageDlg('Outlook kann nicht geöffnet werden!',mtError,[mbok],0); exit; end; MI:= TOA.CreateItem(olMailItem) as MailItem; MI.Attachments.Add('Dateiname',emptyParam,EmptyParam,EmptyParam); MI.HTMLBody:='HTML Body'; MI.Subject:='Subjekt'; MI.Companies:= 'Your Company'; MI.Categories:='HelpDesk'; MI.Recipients.Add('Somewhere@never.go'); MI.Display(1); TOA.Disconnect; TOA.Free; end; |
grez
msch |
Hiho sry fürs Ausgraben der Leiche, aber Suchfunktion halt
Kann mir jmd sagen welche uses ich dafür adden muss? Hab derzeit nur die Standard uses drin die Delphi automatisch reinbackt. Er sagt TOutlookApplication kennt er net und MailItem auch net... Und dazu wüsst ich dann gern noch wofür folgende Dinge stehen:
HTMLBody
Subjekt (Betreff?)
Companies
Categories
Display (Wieviele Mails angezeigt werden?)
Lg
Nilius
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 25.05.11 10:47
Einloggen, um Attachments anzusehen!
|
|
Nilius
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 25.05.11 11:59
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Habe bei mir auf dem Rechner Office 2000 drauf. Finde aufm ganzen PC aber keine Datei für Delphi wo "TOutlookApplication" drin steht.  Kannst du mir vllt sagen wo ich die herbekommen kann?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 25.05.11 12:17
|
|
Nilius
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 26.05.11 12:15
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Delphi is D7 Personal
Hab keine .pas oder .bpl im Office verzeichnis, aber einige .ocx:
ASFCHOP
MSCAL
QUACTRL
FPATL
HTMLMARQ
HTMLMM
Nu hab ich davon absolut keine Ahnung (Hab bisher noch nie zu irgendnem andern Programm verlinkt^^)
Könnte davon dass eine sein oder sind das alles irgendwelcher anderer Krams..?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 26.05.11 12:39
Du sollst doch auch gar nicht nach irgendwelchen Dateien suchen sondern in Delphi auf das Menü Komponente klicken. Wenn es dort keinen Befehl zum Importieren gibt, hast du leider Pech, dann geht das mit deiner Delphiversion nicht. Die Personal ist halt eingeschränkt.
|
|
Nilius
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 26.05.11 12:41
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Da hast du mich grad missverstanden, Komponente hinzufügen und co hab ich alles da( also die Befehle dafür), ich weiß nur net welche von denen ich jetzt benutzen muss.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 26.05.11 14:29
Wenn du da nur Delphikomponenten hinzufügen kannst, dann geht es nicht.
Welche Befehle hast du denn im Menü Komponente?
|
|
Nilius
Hält's aus hier
Beiträge: 15
|
Verfasst: Fr 27.05.11 16:36
jaenicke hat folgendes geschrieben : | Du sollst doch auch gar nicht nach irgendwelchen Dateien suchen sondern in Delphi auf das Menü Komponente klicken. Wenn es dort keinen Befehl zum Importieren gibt, hast du leider Pech, dann geht das mit deiner Delphiversion nicht. Die Personal ist halt eingeschränkt. |
Die oben gelisteten .ocx sind im OFFICE verzeichnis.
Ich hab im Komponente Menü drin:
Neue Komponente...
Komponente installiern...
ActiveX importieren...
Packages installiern
Palette konfiguriern
Dass einzige was nich hinterlegt is is: Komponentenvorlage erzeugen.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 27.05.11 16:50
|
|
Nilius
Hält's aus hier
Beiträge: 15
|
Verfasst: Fr 27.05.11 16:53
darum fragte ich ob du weißt ob ich die outlookxp.pas irgendwo herkriege internet mäßig...^^
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 27.05.11 17:24
Die wird dir nicht viel nutzen, weil du die kaum mit der alten Delphiversion kompilieren können wirst.
Wenn, dann würde die Outlook8 Unit von Delphi 5 oder so helfen, aber da da der Quelltext nicht dabei war, geht auch das nicht. Wenn, dann würde eine mit Delphi 7 Enterprise oder so importierte Version gehen. Aber die darf dir aus Copyright-Gründen evtl. niemand geben (jedenfalls nicht die mitgelieferten), aber keine Ahnung.
Es gibt aber glaube ich auch ein Kommandozeilentool, mit dessen Hilfe man Typbibliotheken damals importieren konnte. Aber das habe ich nie so wirklich benutzt, deshalb weiß ich nicht, ob es dir hier hilft. (Außerdem ist auch das wiederum wohl nicht bei der Personal dabei...)
Du hast nicht zufällig eine Lizenz von Turbo Delphi, oder? Da sind die Komponenten nämlich dabei...
Und bei Delphi XE Starter hast du die natürlich auch dabei, das wäre auch eine Möglichkeit.
Sonst bleibt wohl nur der "umständliche" Weg via CreateOleObject:
www.delphipraxis.net...ben-exportieren.html
Das geht, aber du musst auf jegliche Syntaxergänzung etc. verzichten...
Für diesen Beitrag haben gedankt: Nilius
|
|
Nilius
Hält's aus hier
Beiträge: 15
|
Verfasst: Fr 27.05.11 17:34
Habe grade nochmal mit jemandem gesprochen der vor Jahren mal mit Delphi gearbeitet hat. Es geht bei mir nur darum eine Email-Adresse die in einer Edit Box eingegeben ist in die Adresszeile einer Email im Outlook zu kriegen, !!was auf dem PC wo das Programm verwendet wird Standardemailprogramm ist!!, und er meinte wenns Standard ist gibt es bei Delphi sowas ähnliches wie "mailto" bei html. Kannst du mir da eventuell helfen? Das würde mein Problem ja auch lösen^^
|
|