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:
- Bringen die E-Mail in der Benutzer E-mail-Programm.
- Erlauben, eine oder mehrere Anlagen.
- 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwende ich zwei Methoden für das senden einer MAPI-E-mail, je nachdem, ob ein attatchment benötigt wird. Für den einfachen Fall ohne Bindung verwende ich folgende:
Dieser verwendet eine einfache shell execute-Methode, so sollte man nicht wirklich andere Probleme, als die jüngsten Warnungen, um die Benutzer, um zu bestätigen, dass Sie ok sind mit Ihrem Programm senden Sie eine E-Mail.
Für attatchments ich den folgenden code verwenden, ursprünglich entnommen aus der Delphi-Magazin von Brian Lang.
Es ist auch möglich, senden Sie eine E-Mail OHNE Verwendung der MAPI-client, aber einen nominiert SMTP-server, aber ich denke, dass Sie ausdrücklich nicht wollen. Kann ich code für dieses, wenn Sie tun.
InformationsquelleAutor der Antwort Brian Frost
Nicht erschweren, benutzen Sie einfach die JCL MAPI-code. Es ist in der Einheit JclMapi.pas. Ich denke, Sie haben auch das Beispiel. Der code ist sehr mächtig, und Sie können alles tun, dass MAPI ermöglicht.
Mit ShellExecute Sie können nicht senden, die Anlage und Sie sind auch begrenzt auf 255 Zeichen für den mail-body.
Solange MAPI geht, mit alten Fenstern, es ist immer installiert, (2000, XP). Es kommt zusammen mit Outlook-Express und Outlook-Express ist fast immer installiert. Mit neueren windows (Vista, 7) es gibt kein Outlook Express und so kein MAPI. Aber MAPI wird automatisch installiert, wenn Sie installieren Sie MS-Outlook oder Mozzila Thunderbird. So sind Sie ziemlich sicher. Das ist basic-MAPI und nicht extended MAPI. Aber es deckt alles, was Sie brauchen.
Können Sie auch überprüfen Sie in Ihrem code (JCL), ob MAPI installiert ist und handeln acordingly. Ich habe eine ähnliche Sache nicht so lange her, und es funktioniert ok. Ich habe nicht gefunden, einen gängigen windows-mail-client, dass kein simple MAPI unterstützt. Dies ist ein einfacher wrapper um die JCL-code und dem Beispiel unten:
Beispiel für die Nutzung:
InformationsquelleAutor der Antwort Runner
Scheint es, dass "mailto" in einem ShellExecute ist nicht in der Lage, senden von Anlagen.
MAPI und Indy haben die unglückliche Eigenschaft, nicht unbedingt die Auswahl des Benutzers E-Mail-client.
Also die andere Möglichkeit ist, weiterhin mit ShellExecute, aber einen anderen Weg finden, um die Anhänge in der E-Mail-client.
Was ich entschieden zu tun, als auf meinen Dialog, schafft die E-Mail, ich habe jetzt eine FileListBox Auflistung der Dateien, kann der Benutzer anfügen möchten, um die E-Mail. Wenn die E-Mail erscheint, können Sie einfach per drag & drop an die E-Mail.
In meinem Fall ist das tatsächlich eine gute Lösung, da dies ermöglicht es dem Benutzer, um die Dateien auszuwählen, die Sie einschließen möchten. Die andere Methode, die (automatisch beifügen) benötigen Sie löschen Sie die, die Sie nicht wollen, enthalten. (D. H. Mit der "Google toolbar" - option bereits für Sie überprüft, ist NICHT gut)
Vorerst diese Lösung funktionieren wird.
Danke an alle diejenigen, die dazu beigetragen, Antworten und half mir meinen Weg durch diese (alle +1).
InformationsquelleAutor der Antwort lkessler
Dieser Artikel zeigt, wie Delphi simulieren kann die "Senden an..." - shell-Kontext-Menü-Befehl, und öffnen Sie die Standard-mail-client mit Anhängen programmatisch.
Dieser Lösung muss nicht nur MAPI-und arbeitet mit der Standard-mail-client, ist aber noch nicht abgeschlossen, da die Empfänger der Nachricht, Körper und Subjekt wird nicht automatisch ausgefüllt werden. (Hauptteil der Nachricht kopiert werden, über die Zwischenablage).
InformationsquelleAutor der Antwort mjn
Hier finden Sie eine übersicht über alle E-Mail-Einstellungen und was Sie tun:
http://thesunstroke.blogspot.de/2017/03/how-to-configure-eurekalog-to-send-bugs.html
So, bleiben Sie Weg von Shell (mailto).
Mapi ist auch eine schlechte Idee, denn es funktioniert nur mit dem MS E-Mail-clients.
Ich setze standardmäßig Simple MAPI-aber ich habe selten empfangen von E-Mails, die durch diesen Kanal. Die meisten E-Mails empfangen via SMTP-Server.
GROßE WARNUNG!!!!!!!!!
Ich habe gesehen, dass die Anzahl der false-positive-Alarme, die von antivirus-Scanner ist viel höher, wenn Sie aktivieren EurekaLog. Also, verwenden Sie nur EurekaLog wenn absolut notwendig.
Auch, Eureka selbst ist gespickt mit Fehlern (schauen Sie sich nur die release-Geschichte und sehen, dass für jede neue Funktion (oder auch ändern), die Sie loslassen, Sie später fix ein paar bugs! Also, wenn Sie tracking für bugs, beachten Sie, dass EurekaLog sich möglicherweise vorstellen die wenigen in der EXE!
InformationsquelleAutor der Antwort Rigel