Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Standardmailprogramm ansprechen (https://www.delphipraxis.net/46273-standardmailprogramm-ansprechen.html)

FBrust 21. Mai 2005 20:11


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

FBrust 21. Mai 2005 20:17

Re: Standardmailprogramm ansprechen
 
Ah, hab was gefunden, mit den Indy-Komponenten sollte es wohl gehen...

r_kerber 22. Mai 2005 10:03

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 22. Mai 2005 10:04

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.

FBrust 22. Mai 2005 12:12

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

Thanatos81 22. Mai 2005 12:58

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:
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;
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.

Schönen Gruß,

FBrust 22. Mai 2005 14:46

Re: Standardmailprogramm ansprechen
 
Hallo,

danke für den Code, werds ausprobieren.


Gruß
Frank

Thanatos81 22. Mai 2005 20:29

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.

FBrust 22. Mai 2005 23:58

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

bigg 23. Mai 2005 00:03

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 15:21 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz