Inhaltsverzeichnis

24.4.0 Komponente gb.net.smtp

Die Komponente ermöglicht es Ihnen, EMails mit Hilfe des SMTP-Protokolls zu senden. Unterstützt werden u.a. EMail-Anhänge und optional Verbindungssicherheit über SSL oder TLS, sofern das Programm 'openssl' auf Ihrem System installiert ist. Diese Komponente gb.net.smtp ist seit der Version 3.6 in allen Gambas3-Versionen vorhanden und wurde komplett in Gambas geschrieben.

24.4.0.1 Eigenschaften

Die Klasse SmtpClient hat folgende Eigenschaften:

EigenschaftDatentypBeschreibung
CountIntegerGibt die Anzahl der Teile der aktuellen EMail zurück.
MessageIDStringSetzt die Message-ID in das Feld 'Message-Id' im Header oder gibt die ID zurück.
InReplyToStringSetzt die EMail-Adresse in das Feld 'In-Replay-To' im Header oder gibt die EMail-Adresse zurück.
DebugBooleanGibt an, ob der Debugging-Modus für den SMTP-Client aktiviert wurde oder schaltet den Modus zu. Wenn der Debugging-Modus aktiviert ist, wird die gesamte Client-Aktivität in der Konsole der Gambas-IDE ausgegeben.
AlternativeBooleanErmittelt oder legt fest, ob Mail-Anhänge gleiche Daten in unterschiedlichen Formaten sind – kodiert in HTML, UTF-8 oder in ASCII. Standardmäßig ist diese Eigenschaft FALSE. Eine Änderung müssen Sie vor der Add-Methode definieren.
FromStringErmittelt oder legt die Return-Adresse der EMail fest (Absender).
ToString[]Ermittelt oder legt die Liste der Empfänger der EMail (EMail-Adressen) fest. Der Typ der Eigenschaft ist ein String-Array, so dass Sie mehrere Empfänger für die gleiche EMail angeben können.
CcString[]Ermittelt oder legt die Liste der zusätzlichen (Cc-)Empfänger (carbon copy) der EMail (EMail-Adressen) fest. Der Typ der Eigenschaft ist ein String-Array, so dass Sie mehrere zusätzliche Empfänger für die gleiche EMail angeben können.
BccString[]Ermittelt oder legt die Liste der zusätzlichen (Bcc-)Empfänger (blind carbon copy) der EMail (EMail-Adressen) fest. Der Typ der Eigenschaft ist ein String-Array, so dass Sie mehrere zusätzliche, versteckte Empfänger für die gleiche EMail angeben können.
HostStringErmittelt oder legt den SMTP-Server fest, an den die EMail übergeben wird (MTA).
PortIntegerErmittelt oder legt den SMTP-Port fest, der vom SMTP-Server verwendet wird. Der Standard-Port ist 25.
UserStringErmittelt den Benutzer-Namen oder legt diesen für die Identifizierung fest (Login).
PasswordStringErmittelt oder legt das Passwort fest, das zur Authentifizierung erforderlich ist (Login).
SubjectStringErmittelt oder legt den Betreff der EMail fest.
BodyStringErmittelt oder legt den EMail-Text fest. Der Mail-Text wird immer als erster Teil gesendet. Es wird der Mime-Typ 'text/plain; charset=utf-8' verwendet.
EncryptIntegerErmittelt oder legt die Methode der SMTP-Verbindungssicherheit fest.

Tabelle 24.4.0.1.1 : Eigenschaften der Klasse SmtpClient

Die Konstanten der Klasse SmtpClient in Verbindung mit der Encrypt-Eigenschaft sind:

24.4.0.2 Methoden

Die Klasse SmtpClient verfügt nur über drei Methoden:

MethodeBeschreibung
Add ( Data As String [ , MimeType As String, Name As String ] )Fügt einen EMail-Anhang hinzu. Data sind die Daten, die in der Regel direkt aus der Datei kommen, die Sie anhängen möchten. MimeType ist der MIME-Typ der angehängten Daten. Standardmäßig ist es 'text/plain'. Name ist der Name des Anhangs. Er wird automatisch generiert, wenn er nicht angegeben wurde. Gegenwärtig werden nicht alle MIME-Typen unterstützt.
AddHeader ( Name As String, Value As String ) Fügt ein benutzer-definiertes Header-Feld in den Header ein. Name ist der Feld-Name und Value ist der Feld-Wert.
Send()Die EMail wird an den SMTP-Server (MTA) übergeben. Wenn die Verbindung verschlüsselt wird, dann wird das Programm 'openssl' im Hintergrund eingesetzt. Der openssl-Prozess wird beendet, wenn die EMail erfolgreich gesendet wurde oder wenn ein Fehler beim Senden auftrat.

Tabelle 24.4.0.2.1 : Methoden der Klasse SmtpClient

Die statische Methode FormatDate ( Date As Date ) As String formatiert ein Datum nach der Syntax der RFC 822: SmtpClient.FormatDate(Now) → Mon, 01 Feb 2016 18:12:36 GMT .

24.4.0.3 Authentifizierung über CRAM-MD5

Wenn ein SMTP-Server neben den Verfahren AUTH PLAIN und AUTH LOGIN auch die Authentifizierung über das Verfahren CRAM-MD5 (Challenge Response Authentication Mechanism, Message Digest 5) zulässt, dann wird der SMTP-Username zur Identifizierung des Users im Klartext im SSL-Tunnel gesendet, aber das SMTP-Passwort wird verschlüsselt übertragen:

Konsole:

[1] hans@linux:~$ openssl s_client -quiet -connect mx.freenet.de:465 
[2] ...
[3] 220 mx8.freenet.de ESMTP Exim 4.85 Tue, 02 Feb 2016 07:53:59 +0100 
[4] EHLO linux  
[5] 250-mx8.freenet.de Hello p4fca44f0.dip0.t-ipconnect.de [79.202.68.240] 
[6] 250-SIZE 209715200 
[7] 250-8BITMIME 
[8] 250-ETRN 
[9] 250-PIPELINING 
[10] 250-AUTH LOGIN PLAIN CRAM-MD5 
[11] 250 HELP 
[12] AUTH CRAM-MD5 
[13] 334 PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ+ 
[14] dGltIGI5MTNhNjAyYzdlZGE3YTQ5NWI0ZTZlNzMzNGQzODkw  
[15] 235 Authentication succeeded  
[16] QUIT
[17] 221 mx8.freenet.de closing connection 
[18] hans@linux:~$ 

Für die Berechnung der zu sendenden Antwort in der Zeile 14 können Sie die folgende Funktion verwenden. Als Parameter werden der SMTP-User-Name, das dazu gehörende SMTP-User-Passwort und die vom Server gestellte 'Aufgabe' übergeben:

[1] Public Function CRAMMD5(sUsername As String, sPassword As String, sChallenge64 As String) As String
[2]   
[3]   Dim sChallenge, sCommand, sDigestHex, sResponse As String 
[4]   
[5]   sChallenge = UnBase64(sChallenge64)
[6]   
[7]   sCommand = "openssl md5 -hmac " & Shell$(sPassword) & " << EOF\n" & sChallenge    
[8]   Shell sCommand To sDigestHex
[9]   
[10]   sDigestHex = Split(Trim(sDigestHex), "=")[1] 
[11]   sResponse = Base64(sUsername & sDigestHex)  
[12]   
[13]   Return sResponse 
[14]   
[15] End ' Function CRAMMD5(...)

Hinweise:

24.4.0.4 Exkurs SMTP

Der folgende Exkurs fasst wesentliche, ausgewählte Aspekte zum Thema SMTP zusammen:

Download