![]() |
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. |
Re: Standardmailprogramm ansprechen
Zitat:
Ich habe ein Standard-Mail Programm konfiguriert, aber in der Registry kann ich unter dem Suchbegriff "mailto:" nur andere Dinge finden. Nachtrag: Unter HKEY_CURRENT_USER\Software\CLients\Mail könnte evtl. das Programm eingetragen sein. |
Re: Standardmailprogramm ansprechen
Mach mal den Doppelpunkt weg :mrgreen:
|
Re: Standardmailprogramm ansprechen
@Matze: Was wird denn bei dir für ein Programm aufgerufen, wenn du auf einer Interentseite auf einen Mail-Link klickst? Bei mir steht da:
Code:
HKEY_CLASSES_ROOT\mailto\shell\open\command
"%ProgramFiles%\Outlook Express\msimn.exe" /mailurl:%1 |
Re: Standardmailprogramm ansprechen
Kann natürlich auch sein.
Welcher Pfad in der Registry genau aufgerufen wird, weiß ich nicht. Nachtrag: :wall: Mein Fehler, du hast recht, sorry. |
Re: Standardmailprogramm ansprechen
Hallo...
also ich habe mir diesen Quelltext ebenfalls mals zunutze gemacht....funktioniert auch alles soweit ganz gut. NUR : Es komtm eine für mich unnötige Felermeldug von Outlook...von wegen eine Anwendung möchte automatisch eine Email versenden...möchten Sie dies zulassen oder nicht oder bla. Kann ich das umgehen ? Und leider wird die Email nicht automatisch versendet - ka warum ?! Und wenn ich in meinem Programm weiterarbeiten möchte, bekomme ich ne Fehlermeldung die mir absolut nichts sagt : %1 nicht gefunden ???? Ich kann mir nur vorstellen das irgendeine Variable mit dem Wert %1 gefüllt wird aber welche ?!?! Und woher kommt das %1 ??? Kann mir da jmd helfen ? Danke schonmal MFG Carsten |
Re: Standardmailprogramm ansprechen
Hallo,
Zitat:
Zum Bspl. kannste Outlook Express gar net direkt ansprechen. Nutze am besten die Indys - komfortabel und Userunabhängig. Viele Grüße, delphipitti |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:38 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