![]() |
Standardmailprogramm ansprechen
Hallo,
derzeit generiert mein Programm E-Mails via OLE und Outlook. Nun will ich nicht abhängig von Outlook sein und einfach nur das Standardmailprogramm ansprechen, egal welches es ist. Was muss ich dazu tun? Die Anforderung dabei lautet (sinngemäß) Betreff, Text und mehrere Dateien als Anhänge als Mail zu generieren und in den Postausgang zu stellen. Hat vielleicht jemand einen Tip? Gruß Frank |
Re: Standardmailprogramm ansprechen
Ah, hab was gefunden, mit den Indy-Komponenten sollte es wohl gehen...
|
Re: Standardmailprogramm ansprechen
Mit Indy arbeitest Du völlig unabhängig von irgendeinem e-Mail-Programm. Du kannst aber auch versuchen, das aktuelle e-Mail-Programm via MAPI anzusprechen. Das hat den Vorteil, daß die Mail dann auch im "Gesendet"-Ordner erscheint.
|
DP-Maintenance
Dieses Thema wurde von "r_kerber" von "Sonstige Fragen zu Delphi" nach "Internet / LAN / ASP.NET" verschoben.
Fragen zu e-Mail-Programmierung gehören wohl eher in die Internet-Sparte. |
Re: Standardmailprogramm ansprechen
Hallo,
danke für die Antwort. Wenn ich über MAPI gehe, ist dann die Programmierung für alle gleich oder muss ich da Besonderheiten bei den diversen Mailprogrammen berücksichtigen? Gruß Frank |
Re: Standardmailprogramm ansprechen
Sollte für alle gleich sein, da du ja eine API-Funktion aufrufst und nicht das Programm direkt ansprichst. Versuchs mal hiermit:
Delphi-Quellcode:
Den obigen Code musste halt noch an mehrere Dateien anpassen. Nachteil: Die Mail wird sofort verschickt und nicht erst in den Postausgang gestellt. Weiss auch nicht ob in den Postausgang per MAPI überhaupt geht, da ja evtl nicht jeder Mail-Client so etwas bietet.
Procedure SendMail(Subject,Mailtext,
FromName,FromAdress, ToName,ToAdress, AttachedFileName, DisplayFileName:string; ShowDialog:boolean); var MapiMessage : TMapiMessage; MError : Cardinal; Empfaenger : Array[0..1] of TMapiRecipDesc; Absender : TMapiRecipDesc; Datei : Array[0..1] of TMapiFileDesc; begin with MapiMessage do begin ulReserved := 0; // Betreff lpszSubject := PChar(Subject); // Body lpszNoteText := PChar(Mailtext); lpszMessageType := nil; lpszDateReceived := nil; lpszConversationID := nil; flFlags := 0; // Absender festlegen Absender.ulReserved:=0; Absender.ulRecipClass:=MAPI_ORIG; Absender.lpszName:= PChar(FromName); Absender.lpszAddress:= PChar(FromAdress); Absender.ulEIDSize:=0; Absender.lpEntryID:=nil; lpOriginator := @Absender; // Empfänger festlegen (Hier: nur 1 Empfänger) nRecipCount := 1; Empfaenger[0].ulReserved:=0; Empfaenger[0].ulRecipClass:=MAPI_TO; Empfaenger[0].lpszName:= PChar(ToName); Empfaenger[0].lpszAddress:= PChar(ToAdress); Empfaenger[0].ulEIDSize:=0; Empfaenger[0].lpEntryID:=nil; lpRecips := @Empfaenger; // Dateien anhängen (Hier: nur 1 Datei) nFileCount := 1; // Name der Datei auf der Festplatte Datei[0].lpszPathName:= PChar(AttachedFilename); // Name, der in der Email angezeigt wird Datei[0].lpszFileName:= PChar(DisplayFilename); Datei[0].ulReserved:=0; Datei[0].flFlags:=0; Datei[0].nPosition:=Cardinal(-1); Datei[0].lpFileType:=nil; lpFiles := @Datei; end; // Senden if ShowDialog then MError := MapiSendMail(0, Application.Handle, MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI, 0) else // Wenn kein Dialogfeld angezeigt werden soll: MError := MapiSendMail(0, Application.Handle, MapiMessage, 0, 0); Case MError 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 (z.B. bei Outlook) fehlgeschlagen.',mterror,[mbok],0); MAPI_E_TEXT_TOO_LARGE: MessageDlg('Text zu groß.',mterror,[mbok],0); MAPI_E_TOO_MANY_FILES: MessageDlg('Zu viele Dateien zum Anhängen.',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); SUCCESS_SUCCESS: MessageDlg('Erfolgreich !!! (Aber Absenden nicht garantiert.)',mtinformation,[mbok],0); End; end; Schönen Gruß, |
Re: Standardmailprogramm ansprechen
Hallo,
danke für den Code, werds ausprobieren. Gruß Frank |
Re: Standardmailprogramm ansprechen
Keine Ursache, hab den selber ausm Netz. Funzt soweit ganz gut. Benutze den in nem Programm mit nem seriellen Barcode Handscanner. Damit der Kunde mir automatisch evtl. defekte Rohdaten schicken kann.
|
Re: Standardmailprogramm ansprechen
Wenn ich das richtig gelesen hab, muss ich ja nur Datei[0] bis Datei[n] mit Dateinamen belegen, um mehrere Attachments zu versenden richtig?
Gruß Frank |
Re: Standardmailprogramm ansprechen
Den Pfad zum Mailprogramm solltest du aus der Registry auslesen können.
In Regedit nach "mailto" suchen. Sollte kein Eintrag vorhanden sein, so ist auch kein Programm konfiguriert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 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-2025 by Thomas Breitkreuz