VB 5/6-Tipp 0090: Standard E-Mail-Client mit Parametern starten
von ActiveVB
Beschreibung
Wie sich kurz und knapp der Standard E-Mail-Client mit vorgegeben Parametern wie Empfängeradresse, Thema und Inhalt der Mail aufrufen läßt zeigt dieser ShellExecute-Befehl.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Textfeld "Text3" ' Steuerelement: Textfeld "Text2" ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Textfeld "Text1" ' Steuerelement: Beschriftungsfeld "Label2" ' Steuerelement: Beschriftungsfeld "Label1" Option Explicit Private Declare Function ShellExecute Lib "Shell32.dll" Alias _ "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation _ As String, ByVal lpFile As String, ByVal lpParameters _ As String, ByVal lpDirectory As String, ByVal nShowCmd _ As Long) As Long Private Sub Command1_Click() Dim Result As Long Dim Buff As String Buff = "mailto:" & Text1.Text & "?Subject=" & Text2.Text Buff = Buff & "&Body=" & Text3.Text Result = ShellExecute(0&, "Open", Buff, "", "", 1) End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 43 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Egbert am 04.05.2010 um 10:32
Danke genau nach der Funktion hatte ich gesucht
Kommentar von Rainer am 04.11.2009 um 21:15
Hallo,
der Tipp funktioniert so lange gut wie der Text weniger als 2048 Zeichen hat. Ist er grösser funktioniert er nicht mehr.
Hat Jemand eine Idee wie man die Hürde überspringen kann?
Danke im Voraus
Rainer
Kommentar von chip am 04.03.2008 um 08:27
Hallo Thomas,
bei meiner Programmierung in smartware ist shellExecute ein unerlässliches Werkzeug weil smartware vergleichbar ist mit Basicdialelkten der ersten Generation. Ich habe bislang noch keine Begrenzung bausnützen müssen, das dieser Befehl extrem variabel ist. Um Kommandoketten oder sehr lange Kommandos auszuführen benutze ich in der Regel verstechte Batchjobs.
ShellExecute (hwnd, "open", "batchdatei.bat", "", "", 0)
Mit 0 als letztem Parameter wird dieser dann unsichtbar ausgeführt, also nur als Prozess ohne Fenster.
Gruss Norbert
Kommentar von michael am 29.02.2008 um 13:38
hallo thomas!
ich hätte eine frage zu diesem tipp:
die sache mit den 260 zeichen nämlich, das die ShellExecuteA nicht mehr als 260 zeichen verarbeiten kann, also etwa lange &body="..."
nicht möglich sind.
ich hätte danach gesucht, aber nichts gefunden..
hat es da eine methode gegeben das problem zu umgehen?
danke,
und viele grüße
michael.
Kommentar von René am 28.03.2007 um 11:33
Hallo Profies
Ich suche ein Programm mit dem ich eMail mit dem Standard Client direkt verschicken kann, Wie ich unten gesehen habe, hat Chip eine Lösung dazu.
Vielen Dank
René
Kommentar von Heiko Augustin am 11.02.2007 um 17:30
weiter unten hat Thomas@ActiveVB.de die tolle
Function SetSyntax erstellt um Texte korrekt zu formatieren.
folgende Ergänzung habe ich noch, das kaufmännische Und (&) muss noch berücksichtigt werden:
str1 = Replace(str1, "&", "%26")
HA
Kommentar von chip am 23.11.2006 um 14:13
Hi Arjey,
die Funktion Shellexecute öffnet zwar den
Standard-email Client und füllt diesen mit Inhalt aber
mit dem Konstrukt wird die Mail leider nicht weiter
geleitet.
Ich habe zwischenzeitlich zwei Möglichkeiten gefunden
das Problem zu umgehen.
1. Es ist unter Outlook Möglich einen Macro zu
schreiben. Ich halte diese Variante aber nicht für so
elegant.
2. Ich selbst setze zur Zeit ein console-mailprogramm
ein das ebenfalls mit ShellExecute gestartet wird.
Ich hab mir von dem Entwickler die Bestätigung geholt
das ich das Programm kostenlose Programm auch
kommerziell einsetzen kann, solange die Sourcen mit
vertrieben werden.
Bei Interesse einfach nochmal melden.
Gruss chip
Kommentar von Arjey am 18.11.2006 um 12:29
hi welt
weiter unten wurde gefragt, wie man es anstellt, dass die mail auch gleich automatisch geschickt wird. das würde mich auch brennend interessieren...
grüßles
Kommentar von chip am 26.07.2006 um 07:55
ShellExecute ist sowieso die genialste Funktion die Microsoft je zur Verfügung gestellt hat. Jegliche art von Dokumenten, Webseiten und mailsteuerung lässt sich nicht genialer lösen als mit dieser Funktion. Ich mache mail, druck und bearbeitung fast ausschliesslich über diese Funktion da sie immer den richtigen DDE Server läd.
Kommentar von Marcus Schmitz am 17.06.2006 um 11:08
Das mit dem Attachment wäre ja schön, wenn es klappen würde. Aber es scheint nicht bei allen Emailclients zu funktionieren. Bei Outlook Express klappt es bei mir jedenfalls nicht. Bei Outlook dagegen schon.
Kommentar von Heiko Augustin am 04.06.2006 um 18:09
Hallo!
Allen, die nach Mailanlagen zu diesem Tipp fragen kann ich nur empfehlen zu lesen was Helge geschrieben:
Von Helge am 15.02.2005 um 10:57
Ich musste auch viel suchen und habe damit endlich die Lösung gefunden! Das Geheimnis ist einfach zweimal Anführungszeichen zu verwenden >> chr(34) + chr(34) <<
HA
Kommentar von raha am 02.02.2006 um 11:03
eine frage, ich brauche eigentlich nur einen button im word formular, der mir das offene formular als attachment an eine bestimme email adresse mailt. gibt's da eine einfache möglichkeit?
Kommentar von Alex am 22.12.2005 um 09:57
Hallo zusammen,
Soweit so gutmit dem Programm, hat mich sehr weitgebracht
*DANKE*
Nun würde ich gerne auch Anhang über Outlook 2003 verschicken. Kann mir da bitte einer helfen??
mit
Buff = Buff & "&Attach=" & Chr$(34) & Chr$(34) & "Pfad:\Dateiname.txt" & Chr$(34) & Chr$(34)
hat es leider nicht geklappt.
DANKE
Kommentar von Pit am 14.12.2005 um 08:42
Hallo,
Tip hat gut funktioniert. Ich brauche aber noch die Parameterangabe für:
- CC
- BCC
- Anhang
Gibt es einen Schalter für "sofort senden".
Danke und Grüße, Pit
Kommentar von Thomas am 11.08.2005 um 16:27
Hallo Esther,
solche fragen bitte nur in das Hauptforum posten. Hierhin sollten nur solche welche den Tipp betreffen.
Zu Ihrer Frage: Stellen Sie in den Eigenschaften der Textbox die Einstellung "MultiLine" auf "True"
MfG
Thomas
Kommentar von Esther Perl am 11.08.2005 um 13:44
Hallo
Ich muss mit Word 2003 ein Formular erstellen. Ich habe eine Tabelle erstellt und dort mit Steuerelement-Toolbox ein Textfeld eingefügt. Nun soll das Textfeld genau wie dieses, in welchem ich jetzt schreibe, formatiert werden. Bei meinem Textfeld wird nähmlich kein Zeilenumbruch gemacht. Wie muss ich vorgehen. Vielen Dank
Esther
Kommentar von Thomas@ActiveVB.de am 22.03.2005 um 10:05
Hi,
so könnt ihr den Text korrekt formatieren, somit lassen sich auch lange Texte übergeben. Auch der Zeilenumbruch wird berücksichtigt:
Function SetSyntax(str1 As String) As String
str1 = Replace(str1, "%", "%25")
str1 = Replace(str1, vbCrLf, "%0A")
str1 = Replace(str1, vbCr, "%0A")
str1 = Replace(str1, " ", "%20")
str1 = Replace(str1, "!", "%21")
str1 = Replace(str1, "#", "%23")
str1 = Replace(str1, "*", "%2A")
str1 = Replace(str1, "/", "%2F")
str1 = Replace(str1, "?", "%3F")
str1 = Replace(str1, "Ä", "%C4")
str1 = Replace(str1, "Ö", "%D6")
str1 = Replace(str1, "Ü", "%DC")
str1 = Replace(str1, "ß", "%DF")
str1 = Replace(str1, "ä", "%E4")
str1 = Replace(str1, "ö", "%F6")
str1 = Replace(str1, "ü", "%FC")
SetSyntax = str1
End Function
und dann noch folgende Zeile:
Buff = Buff & "&Body=" & Text3.Text
durch folgende ersetzen:
Buff = Buff & "&Body=" & SetSyntax(Text3.Text)
Das wars.
MfG
Thomas
Kommentar von Helge am 15.02.2005 um 10:57
Hallo zusammen,
ich habe hier eben noche eine Lösung gefunden
das Anhängen von einer Datei zu ermöglichen:
[code]Buff = Buff & "&Attach=" & Chr$(34) & Chr$(34) & "Pfad:\Dateiname.txt" & Chr$(34) & Chr$(34)[code]
Damit geht es bei mir!!!!
;-))
Viel Erfolg beim testen!
Kommentar von Peter am 04.01.2005 um 09:40
Die MAPI-DLL funzt sehr gut mit Outlook express.. bei mir zumindest (vb 6 enterprise edition) leider kann ichs hier auch nicht verwenden, weil ich einen ms exchange zugang benötige
Kommentar von Grünebaum am 20.12.2004 um 19:48
Zu (mehrere) Attachments :
Wie ich in den Posts lese, hat keiner so einen rechten Vorschlage hierzu ;-).
Ich habe alles mögliche ausprobiert. Ich denke, nach dem ich den Post von Tilo (am 23.07.2002 um 16:33) gelesen habe, dass Outlook abbricht und einen Fehler produziert, wenn shellexecute max nur 260 Zeichen übergibt.
Es bleibt somit nur die Verwendung der MAPI-DLL.Leider funktzt die nicht mit Outlook express.
Viele Grüße
Kommentar von Grünebaum am 20.12.2004 um 19:36
Antwort zu Frage mit den Zeilenumbrüchen im Body:
Verwende: Const c_CRLF = "%0D%0A" und ersetze später in der Body-Textbox mit Replace(Me.txtBody.Text, vbCrLf, c_CRLF) die normalen crlf's.
Im Mail erscheinen dann die korrekten Umbrüche.
Kommentar von Maxe am 27.07.2004 um 09:04
Hallo zusammen,
ich hab jetzt bald wirklich alles versucht, aber das mit dem Anhang funkt bei mir nicht :-((
Die anderen Optionen (MailTo, Betreff usw.) funkt einwandfrei.
Ich hoffe ihr könnt mir helfen.
Bsp.-Source:
Dim sMailparameter As String
Dim sAttachement As String
Dim sBetreff As string
Dim sText As string
sBetreff = "Betrefftext"
sText = "Beschreibung Text"
sAttachement = "C:\temp\Test.txt"
' hWnd: Fenster-Handle eines Formulars
' Ihrer Anwendung
' Empfänger: EMail-Adresse des Empfängers (opt.)
' Hier werden die Mail-Parameter gespeichert
sMailparameter = ""
' Wurde ein Betreff angegeben?
If sBetreff <> "" Then
sMailparameter = sMailparameter & "?subject=" & sBetreff
End If
' Wurde ein Text angegeben?
If sText <> "" Then
sMailparameter = sMailparameter & "&" & "body=" & sText
End If
' Wurde ein Text angegeben?
If sAttachement <> "" Then
sMailparameter = sMailparameter + "&attach=" + Chr$(34) + sAttachement + Chr$(34)
End If
Screen.MousePointer = 11
Call ShellExecute(hwnd, "Open", "mailto:" & sEmpfänger & sMailparameter, "", "", 1)
Screen.MousePointer = 0
Die Parameter werden normalerweise aus einer anderen Prozedur gesetzt. Hier nur zum testen.
Gruß
Maxe
Kommentar von _Doomi_ am 27.04.2004 um 21:07
Hi, bei mir funzt der Anhang net:
Buff = Buff + "&Attach=" + Chr$(34) + "Pfad:\Dateiname.txt" + Chr$(34)Kann das an Mozilla Thunderbird liegen?
cu doomi
Kommentar von PeterR am 10.03.2004 um 07:40
hallo
läuft gut.
aber wie bekomme ich einen dateianhang hinzu???
zustand: ich habe über ein ein word.dot einen brief erstellt der geruckt wird und dann das gelöscht und geschlossen wird. dabei ist word nicht sichtbar.Das läut auch so.
jetzt möchte ich das nicht drucken sondern in den anhang einer email setzen. ähnlich wie " wdDoc.sendmail"
in hoffnung auf hilfe
Peter
Kommentar von PeterR am 10.03.2004 um 07:40
hallo
läuft gut.
aber wie bekomme ich einen dateianhang hinzu???
zustand: ich habe über ein ein word.dot einen brief erstellt der geruckt wird und dann das gelöscht und geschlossen wird. dabei ist word nicht sichtbar.Das läut auch so.
jetzt möchte ich das nicht drucken sondern in den anhang einer email setzen. ähnlich wie " wdDoc.sendmail"
in hoffnung auf hilfe
Peter
Kommentar von Neubs am 09.03.2004 um 13:10
Hallo,
ich verwende Outlook Express 6.00 - habe ebenfalls das Problem, dass ich keine Zeilenumbrüche im Body angezeigt bekomme ... hoffe es hat jemand ne idee ...
MfG
neubs
Kommentar von Jochen am 08.03.2004 um 15:07
Das Anhängen von einer Datei funktioniert mit zusätzlich:
[code]Buff = Buff + "&Attach=" + Chr$(34) + "Pfad:\Dateiname.txt" + Chr$(34)[code]
Das geht bei einer Datei als Anhang.
Wer weiss, wie ich mehrere Dateien in den Anhang bekomme?
Gruß, Jochen
Kommentar von Erich Rieder am 16.01.2004 um 16:24
Ich verwende als eMail-Client Outlook-Express 6.0. Der Client wird aufgerufen. Er enthält alle gewünschten Informationen (einschließlich Zeilenumbrüchen im Body). Wenn ich auf den SENDEN-Buton klicke erhalte ich einen Hinweis: 'misimn.exe hat ein Problem ...'.
Bei einem späteren ('normalen') Start von Outlokk-Express wird die abgebrochene Mail anstandslos verschickt und kommt auch gut an.
Wer kann mir einen Tipp geben.
Beste Grüße
Erich Rieder
Kommentar von CODrix am 12.08.2003 um 11:23
Hallöle
genau das wollte ich auch wissen wie man Dateien in den Anhang mit gibt. Und es Funktioniert aber wie genau soll das aussehen wenn es mehr wie eine Datei ist die in den Anhang soll ???
Grüssle
CODrix
Kommentar von Gardenparty am 08.08.2003 um 14:21
Das Beispiel läuft unter Outlook 2000 (9) und Outlook 2002 (10) soweit ganz gut.
Unter Outlook 2000 habe ich darüber hinaus die Möglichkeit mit
...Body=Hello World&Attach="...\file.ext"
auch eine Datei anzuhängen. Das will aber unter Outlook 2002 so nicht mehr funktionieren, man erhält die Fehlermeldung: "Das Befehlszeilenargument ist ungültig. ..." Kennt jemand die richtige Syntax, um auch unter Outlook 2002 eine Datei mit Anhang versenden zu können?
Kommentar von Thomas Bröhl am 12.03.2003 um 00:45
Hallo,
kann ich ein Attachment (Dateianhang) anhängen und wie. Danke für die Hilfe !!
Kommentar von am 30.01.2003 um 17:22
Kommentar von Johannes Jost am 24.01.2003 um 07:52
Hallo,
kann man das Mail auch mit Hindergrund-Bild in Outlook erzeugen.
Kommentar von Tilo am 23.07.2002 um 16:33
zu Frage 6 habe ich gefunden:
This one is a bit heartbreaking. The mailto string passed in the ShellExecute API gets
truncated after 260 characters in NT cause an intrinsic variable in Shell function used as a
buffer for the mailto string is declared 260 char long only. Following link states this NT limitation. (It only mentions an address list to be truncated but I've tried and have seen, that mailto string is truncated after 260th character, whereever it happens, in the subject, field, body field or any other).
siehe unter http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q269272&
Kommentar von Thomas Hüther am 20.06.2002 um 11:21
Hallo, mich würde auch interessieren, ob es möglich ist Dateien anzuhängen. Siehe hierzu Frage Nr. 5
Mfg
Thomas
ich habe die gleiche frage wie Jens Rietschel [5.)] mich würde auch interessieren wie dateien anhänge!
Kommentar von Jochen Hofmann am 11.08.2001 um 01:24
Kann die E-Mail auch gleich automatisch abgeschickt werden ?
Kommentar von micky am 07.08.2001 um 14:34
Ich habe Lotus Notes als Standart-Mail und es kann nicht gestartet werden. Ferner schreibt er mir alle Daten ins Subject und nicht in den Body-Teil.
Kommentar von Sipkar am 27.06.2001 um 15:00
Sehr praktisch, funktioniert gut (VB5 + Outlook), leider Body-Text nur bis ca 200 Zeichen möglich, oder gibt es ein Trick? Danke für jede Hilfe!
Kommentar von Jens Rietzschel am 14.05.2001 um 17:40
gibt es auch einen Parameter für anzuhängende Dateien?
Kommentar von Dieter Spriewald am 07.05.2001 um 18:16
Einen Zeilenumbruch kann man mit "%0D%0A" erzeugen. Dieser String ist "chr(13) & chr(10)" URL-Encoded
Kommentar von Dirk Oberhag am 07.04.2001 um 12:24
Gutes Programm, aber hab trotzdem noch eine Frage: Wenn man &Body= den Text mit Zahlenbruch erstellt, dann wird bei Outlook Express der body in einen langen Bindfaden angezeigt, kann mir jemand helfen?
Kommentar von Robert Roeher am 29.03.2001 um 13:32
Hallo,
wenn ich Mailingtext (&Body=) mit Zeilenumbruch in Outlook uebernehme, besteht der Text im Outlook aus einem langen Bindfaden (ohne Zeilenumbruch)
Wer kann mit helfen ?
mfg
Robert Roeher
Kommentar von Gerhard Wichta am 24.03.2001 um 15:36
Hallo, wie bekomme ich schnell meine IP Adresse heraus ? mfG. Gerhard Wichta