19.7.1.1 Methode SendMail – Klasse Desktop (gb.desktop)
Mit Hilfe der Methode SendMail(..) können Sie eine EMail aufbereiten, die dann nicht direkt sondern mit dem Standard-EMail-Programm Ihres Systems verschickt werden kann:
SendMail ( TO As String[] [ , CC As String[], BCC As String[], Subject As String, Body As String, Attachment As String ] )
- TO ist eine Liste der Empfänger (String-Array)
- CC ist eine weitere Liste von Empfängern mit CC für carbon-copy, (String-Array)
- BCC ist eine weitere Liste von Empfängern mit BCC für blind-carbon-copy, (String-Array)
- Subject ist der Betreff der EMail
- Body ist der Text in der EMail
- Attachment ist der Pfad zur Anhang-Datei
Die Angabe einer EMail-Adresse (TO) ist notwendig. Alle weiteren Argumente sind optional.
Es reicht völlig aus, wenn Sie in Ihrem Programm die notwendigen und optionalen Parameter bereitstellen oder in einem Formular die Daten eingeben lassen – so, wie es im folgenden Projekt demonstriert wird:
Abbildung 19.7.1.1.1: Gambas-Projekt 'SendMail'
Nach dem Abschicken werden die relevanten Daten an den EMail-Client übergeben:
Abbildung 19.7.1.1.2: EMail-Client als Standard-EMail-Programm im System
Hier finden Sie den vollständigen Quelltext:
' Gambas class file Private sEMailAnhangPfad As String Public Sub Form_Open() FMain.Center HSplit1.Layout = [100, 0] System.Language = "de_DE.UTF-8" FMain.Arrangement = Arrange.Vertical FMain.Expand = False FMain.Margin = True FMain.Spacing = True FMain.Padding = 0 HBox5.Expand = False HBox5.Spacing = True HBox5.Margin = False HBox5.Padding = 0 End ' Form_Open() Public Sub btnPlusAttachment_Click() Dialog.Title = "EMail-Anhang-Auswahl-Dialog" Dialog.Path = User.Home If Dialog.OpenFile() Then Return HSplit1.Layout = [75, 25] sEMailAnhangPfad = Dialog.Path ListBox1.Add(File.Name(sEMailAnhangPfad)) End ' btnPlusAttachment_Click() Public Sub btnEMailToClient_Click() Dim sToList, sCCList, sBCCList, sSubject, sEMailBody, sAttachment As String Dim aSendTo, aSendCC, aSendBCC As New String[] ' -------------------------------------------------------------------- If txbEMailAdressen.Text Then sToList = Replace(txbEMailAdressen.Text, Chr(32), "") If InStr(sToList, ",") Then aSendTo = Split(sToList, ",") Else aSendTo.Add(sToList) Endif ' InStr(sToList, ",") ? Endif ' txbEMailAdressen.Text ? ' -------------------------------------------------------------------- If txbCarbonCopy.Text Then sCCList = Replace(txbCarbonCopy.Text, Chr(32), "") If InStr(sCCList, ",") Then aSendCC.Add(Split(sCCList, ",")[0]) Else aSendCC.Add(sCCList) Endif ' InStr(sCCList, ",") ? Endif ' txbCarbonCopy.Text ? ' -------------------------------------------------------------------- If txtBlindCarbonCopy.Text Then sBCCList = Replace(txtBlindCarbonCopy.Text, Chr(32), "") If InStr(sBCCList, ",") Then aSendBCC.Add(Split(sBCCList, ",")[0]) Else aSendBCC.Add(sBCCList) Endif ' InStr(sBCCList, ",") Endif ' txtBlindCarbonCopy.Text ? ' -------------------------------------------------------------------- If txtSubject.Text Then sSubject = txtSubject.Text Else If Message.Warning("Die EMail hat keinen Betreff!", "Nicht senden!", "Ohne Betreff senden.") = 1 Then txtSubject.SetFocus Return Else sSubject = "" Endif ' Button 1 gedrückt ? Endif ' txtSubject.Text ? ' -------------------------------------------------------------------- If txaMailBody Then sEMailBody = txaMailBody.Text Else If Message.Warning("Die EMail ohne Text senden?", "Nicht senden!", "Ja - ohne Text senden.") = 1 Then txtSubject.SetFocus Return Else sEMailBody = "" Endif ' Button 1 gedrückt ? Endif ' txaMailBody ? ' -------------------------------------------------------------------- sAttachment = sEMailAnhangPfad ' -------------------------------------------------------------------- Desktop.SendMail(aSendTo, aSendCC, aSendBCC, sSubject, sEMailBody, sAttachment) End ' btnEMailToClient_Click()
Hinweise – bezogen auf den EMail-Client Thunderbird:
- Der Anhang wird bei Thunderbird übertragen und angezeigt, aber nicht alle EMail-Clients übernehmen den Anhang korrekt.
- Sie können im Programm mehrere Dateien als Anhang auswählen. Es wird aber nur eine Datei als Anhang übernommen und zwar die letzte.
- Die Empfängerlisten werden nicht als komma-getrennte Liste in den EMail-Client übernommen, sondern in separaten, einzelnen Zeilen!
- Es hat sich gezeigt, dass jeweils nur ein Empfänger aus den Listen CC und BCC korrekt eingetragen wird. Alle weiteren erscheinen als normaler Empfänger.
Das liegt m.E. daran, dass intern das Konsolen-Programm xdg-email benutzt wird, um eine EMail an den bevorzugten EMail-Client zu schicken. Dort wird ein feiner Unterschied zwischen mehreren Adressen bei TO und einer Adresse bei CC und BCC gemacht.
xdg-email [--utf8] [--cc address] [--bcc address] [--subject text] [--body text ] [--attach file] [ mailto-uri | address(es) ]


