Wie kann man ein Delphi-Programm senden Sie eine E-Mail mit Anhängen über die STANDARD-E-mail-Client?

In meinem Programm, ich Schreibe eine E-Mail zu senden, verwenden Sie die Standard-e-mail-client-software installiert auf dem Computer eines Benutzers.

Habe ich aus der E-Mail-Adresse, den Betreff, die mehrzeilig Körper, und ich habe mehrere Anlagen enthalten sein.

Ich habe fast das arbeiten mit mailto und ShellExecute wie folgt:

  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);

Mit Delphi 2009 auf einem Windows Vista-Computer, wird diese öffnen Sie ein Microsoft-E-Mail "E-Mail verfassen" - Fenster, mit dem, Betreff und Nachrichtentext korrekt gefüllt. Jedoch ist die Datei nicht befestigt bekommen.

Als ich recherchierte, ich bemerkte, dass einige Kommentare, die besagt, dass diese Technik funktioniert nicht mit allen E-mail-clients. Jedoch, die meisten der Kommentar ist schon ziemlich alt, wie ich weiß, dies ist eine sehr alte Technik.

Dann habe ich festgestellt, dass Zarko Gajic, sagtedass "dieser Ansatz ist ok, aber Sie sind nicht in der Lage zum senden von Anlagen, die in dieser Weise".

Ich habe gesehen, es gibt auch Windows-Einfache E-Mail-API (MAPI), aber Zarko sagt, dass funktioniert nur, wenn der Endbenutzer eine MAPI-konforme E-Mail-software. Es gibt gut dokumentierte Techniken, die unter Verwendung von MAPI in Delphi (z.B. E-mail-Versand über mapi), aber Sie alle haben den disclaimer, dass MAPI nicht immer mit Windows installiert.

Außer, ich will wirklich die Nachricht kommen sich zunächst in die user-Standard-E-Mail-Programm, so müssen Sie es als Teil Ihrer E-Mail-Datensätze, und Sie können es Bearbeiten und entscheiden, ob und Wann Sie möchten, senden Sie es. Ich bin mir nicht sicher, wie MAPI funktioniert und wenn wird es das tun.

Also meine Anforderungen sind:

  1. Bringen die E-Mail in der Benutzer E-mail-Programm.
  2. Erlauben, eine oder mehrere Anlagen.
  3. Arbeiten mit (hoffentlich) allen E-Mail-clients auf jedem Windows-Rechner ab XP (also XP, Vista oder 7).

Gibt es so ein Tier? Oder vielleicht weiss einer wie man Anhänge an die Arbeit mit dem mailto/ShellExecute Technik?

Was die meisten Menschen tun?


Edit:

Gab es einige Antworten, die mit der MAPI-Lösungen und sogar ein Indy-Lösung.

Habe ich das problem mit Ihnen ist, dass Sie nicht unbedingt verwenden, das Standard-mail-client. Auf meinem Vista-Rechner, zum Beispiel, habe ich Windows Mail als Standard-client. Wenn ich eine MAPI senden, es nicht zu bringen, bis Windows Mail, aber es öffnet und richtet den E-Mail in Outlook statt. Ich möchte das nicht.

Zwei meiner Benutzer von meinem Programm beschwert:

Ihre debug-routine fehlschlägt, die Datei zu senden, wie es versucht zu starten windows mail aus irgendeinem Grund bekannt, ist es selbst, anstatt mit der Standard-mail-client (in meinem Fall thunderbird)

Habe ich versucht zu füllen, ist die Ausnahme
Bericht aber aufgegeben hat, als Sie gefragt, für
dieser server, der server! Ich hab mich dann
wirklich verärgert ist, weil es ins Leben gerufen
Outlook
- Ich nie, nie, niemals nutzen werden oder wollen, es zu benutzen.

Ich brauche keinen code für MAPI-oder Indy. Sie sind leicht verfügbar. Aber wenn Sie vorschlagen, MAPI oder Indy, was ich wirklich brauche, ist ein Weg, um die Standard-client und stellen Sie sicher, dass es der ist, der übergeben wird, die E-Mail gesendet werden.

Auch, ich muss wissen, ob MAPI ist jetzt universal. Vor 5 Jahren war es nicht garantiert, um auf allen Maschinen, denn es war nicht installiert, als Teil des Betriebssystems. Ist das noch immer so, oder hat der MAPI-kommen jetzt mit Windows XP, Vista und 7 standardmäßig?

Gleichen Fragen gehen für Indy oder andere vorgeschlagene Lösungen. Kann es mit dem Standard-client und es funktioniert auf fast allen Windows XP-und später Maschinen?

Der Grund, warum die "mailto" - Lösung ist so nett, ist, dass alle Anlagen haben, um es zu unterstützen, die für die Zwecke der Umgang mit dem HTML mailto-Anweisung finden Sie auf Webseiten. Nun, wenn nur ich könnte es verwenden, um Anlagen hinzuzufügen ...


Wahrscheinlich die Lösung gefunden: mjustin wies darauf hin, eine alternative, die macht verwenden des Betriebssystems "sendto" - Befehl. Wahrscheinlich ist der Weg zu gehen.

Die E-Mail war nicht auf 256 Zeichen beschränkt, wie die HTML-mailto ist, aber ich war am Boden zerstört, um herauszufinden, es endete als begrenzt zu 2048 Zeichen. Glücklicherweise ein paar Stunden später, mjustin gab seine Antwort.

Falls die Umsetzung geht in Ordnung, seine Antwort wird es für mich. Wenn nicht, werde ich meine Kommentare hier.


Nicht. Wie es sich herausstellt, das "sendto" - Lösung wird nicht immer öffnen Sie die Standard-E-Mail-Programm. Auf meinem Rechner, es öffnet sich Outlook, wenn mein Standard-Mailprogramm Windows Mail. Schade. Ich habe zurück zu gehen, um die mailto-Methode, trotz der 2048 Zeichen begrenzt.

Habe ich jedoch finden Sie in dem Artikel: Senden an E-mail-Empfänger:

Zu diesem Zeitpunkt, Sie ersetzen könnte
::ShellExecute mit einem durchdachten
::WinExec-Aufruf, mit dem tatsächlichen
mailto-Befehlszeile angegeben in der
Registrierung und Ziel die aktuelle e-mail
client (zum Beispiel,
"%ProgramFiles%\Outlook
Express\msimn.exe" /mailurl:%1). Aber
dann die Beschränkung beträgt 32 KB. Als
Fazit, es gibt keine Möglichkeit zu senden
e-mails, die größer als 32KB mit der
mailto-Protokoll.

aber dann hätte ich zu bestimmen, wer die E-mail-client ist in jedem Fall. Ich erwarte, dass würde führen zu weiteren Komplikationen.

Das eine andere Sache, die ich herausgefunden habe ist, dass mailto ermöglicht die Einstellung von "an", "cc", "bcc", "subject" und "body", aber keine Anhänge. In der Erwägung, dass sendto erlaubt NUR Anhänge und legt dann eine Standard-Mail mit einer Standard-Nachricht und keine Möglichkeit für Sie, um die verschiedenen Felder und Körper.

InformationsquelleAutor der Frage lkessler | 2009-12-26

Schreibe einen Kommentar