Delphi-PRAXiS

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.

Matze 23. Mai 2005 00:07

Re: Standardmailprogramm ansprechen
 
Zitat:

Zitat von bigg
In Regedit nach "mailto" suchen. Sollte kein Eintrag vorhanden sein, so ist auch kein Programm konfiguriert.

Bist du dir da sicher?

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.

bigg 23. Mai 2005 00:09

Re: Standardmailprogramm ansprechen
 
Mach mal den Doppelpunkt weg :mrgreen:

Luckie 23. Mai 2005 00:11

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

Matze 23. Mai 2005 00:13

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.

stonimahoni 14. Jul 2005 10:04

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

delphipitti 10. Aug 2005 07:58

Re: Standardmailprogramm ansprechen
 
Hallo,

Zitat:

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 ?
Leider nein - dies ist von MS so gemacht und die lassen da auch keinen Wind ran. :witch: Wenn du willst kannst auch alles im MSDN nachlesen - und auch die Umständlichen Wege des Ansprechens.

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 20:35 Uhr.

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