Wie kann ein Delphi-Programm eine E-Mail mit Anhängen über den DEFAULT-E-Mail-Client senden?

In meinem Programm erstelle ich eine E-Mail zum Senden mit der Standard-E-Mail-Client-Software, die auf dem Computer eines Benutzers installiert ist.

Ich habe die Postanschrift, den Betreff, den mehrzeiligen Text und mehrere Anhänge zusammengestellt.

Fast hätte ich das mit mailto und ShellExecute so hinbekommen:

  Message := 'mailto:[email protected]'
    + '?subject=This is the subjectBehold Error Report'
    + '&body=This is line 1' + '%0D%0A'
    + 'This is line 2' + '%0D%0A'
    + 'This is line 3'
    + '&Attach=c:\file1.txt';
  RetVal := ShellExecute(Handle, 'open', PChar(Message), nil, nil, SW_SHOWNORMAL);
  if RetVal <= 32 then
    MessageDlg('Cannot find program to send e-mail.', mtWarning, [mbOK], 0);

Wenn Sie Delphi 2009 auf einem Windows Vista-Computer verwenden, wird ein Microsoft Mail-Fenster "E-Mail erstellen" geöffnet, in dem An, Betreff und Text richtig ausgefüllt sind. Die Datei wird jedoch nicht angehängt.

Als ich das recherchierte, bemerkte ich einige Kommentare, die besagten, dass diese Technik nicht mit allen Mail-Clients funktioniert. Der Großteil des Kommentars ist jedoch ziemlich alt, da mir klar ist, dass dies eine sehr alte Technik ist.

Dann habe ich das gefundenZarko Gajic sagte "Dieser Ansatz ist in Ordnung, aber Sie können auf diese Weise keine Anhänge senden".

Ich habe auch die Windows Simple Mail API (MAPI) gesehen, aber Zarko sagt, dass dies nur funktioniert, wenn der Endbenutzer eine MAPI-kompatible E-Mail-Software hat. Es gibt gut dokumentierte Techniken zur Verwendung von MAPI mit Delphi (z.Senden von E-Mails mit mapi), aber alle haben den Haftungsausschluss, dass MAPI nicht immer unter Windows installiert ist.

Außerdem möchte ich wirklich, dass die Nachricht zuerst im Standard-E-Mail-Programm des Benutzers angezeigt wird, damit er sie als Teil seiner E-Mail-Aufzeichnungen erhält und sie bearbeiten und entscheiden kann, ob und wann er sie senden möchte. Ich bin nicht sicher, wie MAPI funktioniert und ob es das tun wird.

Meine Anforderungen sind also:

So rufen Sie die E-Mail im E-Mail-Programm des Benutzers auf

Zum Zulassen eines oder mehrerer Anhänge.

Mit (hoffentlich) allen E-Mail-Clients auf jedem Windows-Computer ab XP (d. H. XP, Vista oder 7) arbeiten.

Gibt es so ein Tier? Oder weiß vielleicht jemand, wie man Anhänge mit der mailto / ShellExecute-Technik zum Laufen bringt?

Was machen die meisten Leute?

Bearbeiten:

MAPI-Lösungen und sogar eine Indy-Lösung haben einige Antworten geliefert.

Das Problem, das ich mit ihnen habe, ist, dass sie nicht unbedingt den Standard-Mail-Client verwenden. Auf meinem Vista-Computer habe ich beispielsweise Windows Mail als Standardclient eingerichtet. Wenn ich einen MAPI-Sendevorgang durchführe, wird Windows Mail nicht gestartet, sondern die E-Mail wird stattdessen in Outlook gestartet und eingerichtet. Ich will das nicht.

Zwei meiner Benutzer meines Programms haben sich beschwert:

Ihre Debug-Routine kann die Datei nicht senden, da sie aus einem ihr bekannten Grund versucht, Windows Mail zu starten, anstatt den Standard-Mail-Client zu verwenden (in meinem Fall Thunderbird).

Ich habe versucht, den Ausnahmebericht auszufüllen, habe aber aufgegeben, als er nach diesem Server, diesem Server, gefragt hat! Ich habe mich dann wirklich geärgert, weil es Outlook gestartet hat - ich habe es nie benutzt oder möchte es benutzen.

Ich benötige keinen Code für MAPI oder Indy. Sie sind leicht verfügbar. Wenn Sie jedoch MAPI oder Indy vorschlagen, brauche ich wirklich eine Möglichkeit, den Standard-Client zu finden und sicherzustellen, dass die zu sendende E-Mail an diesen weitergeleitet wird.

Außerdem muss ich wissen, ob MAPI jetzt universell ist. Vor 5 Jahren war nicht garantiert, dass es auf allen Computern funktioniert, da es nicht als Teil des Betriebssystems installiert wurde. Stimmt das noch oder wird MAPI jetzt standardmäßig mit Windows XP, Vista und 7 geliefert?

Gleiche Fragen gelten für Indy oder andere Lösungsvorschläge. Kann es mit dem Standardclient zusammenarbeiten und funktioniert es auf fast allen Windows XP- und späteren Computern?

Der Grund, warum die "mailto" -Lösung so schön ist, besteht darin, dass alle Maschinen sie unterstützen müssen, um die HTML-mailto-Anweisung zu verarbeiten, die auf Webseiten zu finden ist. Wenn ich es jetzt nur zum Hinzufügen von Anhängen verwenden könnte ...

Mögliche Lösung gefunden: mjustin wies auf eine Alternative hin, die den Befehl sendto des Betriebssystems verwendet. Das ist höchstwahrscheinlich der richtige Weg.

Das Mailto war nicht wie das HTML Mailto auf 256 Zeichen beschränkt, aber ich war am Boden zerstört, als ich herausfand, dass es auf 2048 Zeichen beschränkt war. Glücklicherweise gab Justin einige Stunden später seine Antwort.

Wenn die Implementierung davon in Ordnung ist, hat seine Antwort es für mich getan. Wenn nicht, werde ich meine Kommentare hier hinzufügen.

Nein. Wie sich herausstellt, wird die sendto-Lösung nicht immer das Standard-E-Mail-Programm öffnen. Auf meinem Computer wird Outlook geöffnet, wenn mein Standardmailer Windows Mail ist. Schade. Ich musste trotz der Zeichenbeschränkung von 2048 zur mailto-Methode zurückkehren.

Ich habe jedoch im Artikel gefunden:SendTo Mail Empfänger Das:

Zu diesem Zeitpunkt können Sie :: ShellExecute durch einen durchdachten :: WinExec-Aufruf ersetzen, indem Sie die tatsächliche mailto-Befehlszeile verwenden, die in der Registrierung deklariert ist, und auf den aktuellen E-Mail-Client abzielen (z. B. "% ProgramFiles% \ Outlook Express \ msimn" .exe "/ mailurl:% 1). Dann beträgt die Beschränkung jedoch 32 KB. Es gibt also keine Möglichkeit, mit dem mailto-Protokoll E-Mails zu versenden, die größer als 32 KB sind.

dann müsste ich aber jeweils feststellen, wer der mail client ist. Ich gehe davon aus, dass dies zu weiteren Komplikationen führen würde.

Das andere, was ich herausgefunden habe, ist, dass mailto das Setzen von "to", "cc", "bcc", "subject" und "body" erlaubt, aber keine Anhänge. Während sendto ONLY Anhänge zulässt und dann eine Standard-E-Mail mit einer Standardnachricht erstellt, können Sie die verschiedenen Felder und den Text nicht festlegen.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage