![]() |
Email direkt aus Program mraus
Hallo,
Ich stecke grad an meinem Program man der Stelle mit der Email versenderei sehr tief fest. Habe ein Szenario wo ich haben will und ev das 2. als ultimativen Bonus( ev auch beides in einem zusammen ): Einige User haben Outlook installiert mit anbindung an einen Exchange Server Ich will eine neue Email aufmachen mit mehreren Empfängern und Attachement als PDf. Zudem noch Text im Betreff und im Body. Das hatte ich schon über eine funktion,aber NUR möglich mit 1 Empfänger( weitere hat er im String z ueinem zusammengeführt ). 2.: Einige User haben kein Outlook client installiert ,habe aber ein Login und Passwort im Kopf ( gültiges für Exchange Server ) Ist es möglich direkt aus dem Programm eine Form zu machen ( Email nachbauen ) und per Exchange Server ohne Installiertes Outlook zu verschicken? Dann bin ich auf Outlook garnicht angewiesen. Bin euch echt dankbar. |
Re: Email direkt aus Program mraus
|
Re: Email direkt aus Program mraus
Hallo René,
erstmal zu deinem Problem mit mehreren Empfängern - so stelle ich mir das vor - ungetestet:
Delphi-Quellcode:
Grüße vom marabu
var
MapiMessage: TMapiMessage; recips: array of MapiRecipDesc; rl: TStrings; i: integer; begin rl := TStringList.Create; rl.LoadFromFile('ListOfRecipientNames'); SetLength(recips, rl.Count); ZeroMemory(@recips[0], SizeOf(MapiRecipDesc) * rl.Count); for i := Low(recips) to High(recips) do with recips[i] do begin ulRecipClass := MAPI_TO; lpszName := PChar(rl[i]); end; rl.Free; with MapiMessage do begin // siehe W2K Logo App nRecipCount := rl.Count; lpRecips := recips; end; |
Re: Email direkt aus Program mraus
Hi,
kleine Frage noch dazu. ISt es möglich aus einem Programm raus über die Mapi.dll direkt mit angabe der userdaten eine email zu schicken, wenn kein Outlook installiert ist?? Direkt über den Server darf i net weil i da eine Feste IP benötige und die im Exchange Server registriert sein muß in unseren LAN. Danke. |
Re: Email direkt aus Program mraus
Outlook ist nicht notwendig um per MAPI eine mail zu verschicken - aber du brauchst einen account auf einem MAPI-Server.
Grüße vom marabu |
Re: Email direkt aus Program mraus
Hi marabu,
Das hab i schon gewußt, aber i weiß nicht wie. Account und Passwort ist alles vorhanden,das übergebe ich dann als anmelde info mit Ich will halt von manchen PCs ohne Outlook Emailen können,direkt über SMTP Server geht von usnerer IT Sicherheit nicht. Habe hier einen Link allerdings für VB: ![]() Wen nes möglich wäre kannst du mir a bisserl helfen bei dem Thema? Habe bis jetzt nur Email übers Outlook Profile geschickt, das heißt nur eine neue Email geöffnet. Der absolute Luxus für mein Tool wäre, wenn ich ohne Outlook und in einer Extra Form eine Email mit mehreren Empfängern,ev. Liste vom Exchange Profile ( Adressbuch), und schreiben ,speicher und senden kann m it anhang. Vielen Dank. Anbei mal der Code SendMail , den habe ich wo her und mit deinem ( mehrere Empfänger ) aktualisiert )
Delphi-Quellcode:
function SendMail(const Subject, Body, FileName,
SenderName, SenderEMail, RecipientName, RecipientEMail: string): Integer; var Message: TMapiMessage; lpSender, lpRecipient: TMapiRecipDesc; FileAttach: TMapiFileDesc; //neu recips: array of MapiRecipDesc; rl: TStrings; i: integer; // SM: TFNMapiSendMail; MAPIModule: HModule; begin FillChar(Message, SizeOf(Message), 0); with Message do begin if (Subject <> '') then lpszSubject := PChar(Subject); if (Body <> '') then lpszNoteText := PChar(Body); if (SenderEmail <> '') then begin lpSender.ulRecipClass := MAPI_ORIG; if (SenderName = '') then lpSender.lpszName := PChar(SenderEMail) else lpSender.lpszName := PChar(SenderName); lpSender.lpszAddress := PChar(SenderEmail); lpSender.ulReserved := 0; lpSender.ulEIDSize := 0; lpSender.lpEntryID := nil; lpOriginator := @lpSender; end; /// rl := TStringList.Create; rl.LoadFromFile('c:\test.txt'); SetLength(recips, rl.Count); ZeroMemory(@recips[0], SizeOf(MapiRecipDesc) * rl.Count); for i := Low(recips) to High(recips) do with recips[i] do begin ulRecipClass := MAPI_TO; lpszName := PChar(rl[i]); end; rl.Free; /// if (RecipientEmail <> '') then begin lpRecipient.ulRecipClass := MAPI_TO; if (RecipientName = '') then lpRecipient.lpszName := PChar(RecipientEMail) else lpRecipient.lpszName := PChar(RecipientName); lpRecipient.lpszAddress := PChar(RecipientEmail); lpRecipient.ulReserved := 0; lpRecipient.ulEIDSize := 0; lpRecipient.lpEntryID := nil; nRecipCount := rl.Count; // lpRecips := recips; // nRecipCount := 1; lpRecips := @lpRecipient; end else lpRecips := nil; if (FileName = '') then begin nFileCount := 0; lpFiles := nil; end else begin FillChar(FileAttach, SizeOf(FileAttach), 0); FileAttach.nPosition := Cardinal($FFFFFFFF); FileAttach.lpszPathName := PChar(FileName); nFileCount := 1; lpFiles := @FileAttach; end; end; MAPIModule := LoadLibrary(PChar(MAPIDLL)); if MAPIModule = 0 then Result := -1 else try @SM := GetProcAddress(MAPIModule, 'MAPISendMail'); if @SM <> nil then begin Result := SM(0, Application.Handle, Message, MAPI_DIALOG or MAPI_LOGON_UI, 0); end else Result := 1; finally FreeLibrary(MAPIModule); end; if Result <> 0 then MessageDlg('Email wurde nicht gesendet.', mtError,[mbOK], 0); if Result = 0 then MessageDlg('Email wurde gesendet , und unter C:\MEKM Tool\Logbuchberichte abgelegt.', mtInformation,[mbOK], 0); end; |
Re: Email direkt aus Program mraus
Hi René,
du willst also einen eigenen MAPI-Client entwickeln, nur damit du unabhängig von Outlook bist? Wahrscheinlich kannst du dir noch nicht vorstellen, was das für ein Aufwand ist. Nimm doch einen fertigen Client, wie Eudora. Wenn du es aber unbedingt willst, dann solltest du dich mal intensiv mit dem ![]() Dein Angebot zur Mitarbeit an diesem Projekt kann ich leider nicht annehmen, da es zuviel von meiner Zeit binden würde. Ich hoffe du kannst das verstehen. Freundliche Grüße vom marabu |
Re: Email direkt aus Program mraus
Hi ,
das hast du mißvrstanden. Natürlich will i keinen neuen MAPI Client entwickeln,dazu habe ich in dem Bereich zu wenig Ahnung . Ich will eigentlich nur das ich auf Rechner wo kein Outlook installiert ist, mit so wenig Aufwand wie möglich von meinem Tool raus eine Email verschicken können. Mit Attachment und ev. noch zugriff auf das Öffentliche Adressbuch auf dem Exchange Server . Habe gelesen,das MAPI auch Emails lesen kann,also das ich dann die Mails vom Postfach im Tool anzeigen kann. Wil lhier bei weitem keinen neuen Client entwickeln,sondern es nur für mich so einbinden das es geht und wenn möglich auf den Client PCs nix installieren muß Client PCs= Win NT und Win 2000 . Ist das überhaupt möglich? Werde mich erst mal in die MAPI SDK einlesen. Klar kann ich das verstehn das du dafür keine Zeit hast, die hab nicht mal ich :lol: Aber wenns geht kannst mir einige kleinere tipps geben. Will ja nicht das du alles machst.sonst bringt es ja nix. Vielen Dank schonmal. |
Re: Email direkt aus Program mraus
Hi marabu,
kannst du mir ev. einen Tip geben was ich in meinem Source oben falsch habe mit dem mehreren Empfängern? Da kommt immer eine Zugriffsverletzung. Danke schön. |
Re: Email direkt aus Program mraus
Hallo renekr
ich gebe dir mal ein paar grundsätzliche Info's, wie man EMails verschicken kann: 1.) über MAPI Vorraussetzung: auf dem Rechner ist ein MAPI-client wie z.B. Outlook, Eudora installiert und komplett konfigueriert. Dann kannst du über das Konto des Benutzers EMails verschicken. Alle gesendeten Mails werden im Ordner "gesendete Objekte" gespeichert. Dies kann ein grosser Vorteil sein. Du kannst nur unter der EMail-Adresse des Benutzers versenden; eine andere Absender-EMail-Adr ist nicht möglich. Dein Programm braucht keinerlei Information über User, Passwort, Server wissen, das wird alles vom EMail-Client verwaltet. 2.) über SMTP Du musst Server, User und Passwort kennen und "redest" direkt mit dem Server. Es braucht kein EMail-Client installiert sein. Du benötigst Indy, Fastnet oder vergleichbare Komponenten. Die Absender-Mail kann beliebig gewählt werden (falls Server das erlaubt). 3.) über eine Webseite Man kann den IExplorer so steuern, dass über ein Konto bei GMX, Web.de oder andere EMail-Seite ein Mail verschickt wird. Diese Variante bietet sich nur an, wenn über die Firewall alles ausser Port 80 geblockt wird. Es gibt also 3 Wege, die sich programmiertechnisch stark unterscheiden. Der Programmier-Aufwand ist bei MAPI relativ gering, vorrausgesetzt du verwendest eine MAPI-Klasse/Komponente, die was taugt. Die beste MAPI-Klasse, die ich bisher gesehen habe, ist in der JCL. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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 by Thomas Breitkreuz