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

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:

client1

Abbildung 19.7.1.1.1: Gambas-Projekt 'SendMail'

Nach dem Abschicken werden die relevanten Daten an den EMail-Client übergeben:

client2

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:

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

Download