vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: HTML/Internet/Netzwerk · HTML/Email   |   VB-Versionen: VB2005, VB200805.07.10
Alle EMail-Adressen eines Textes ausfiltern

Eine kleine aber nützliche Funktion, welche alle EMail-Adressen aus einem String (Text) ausfiltert und als Liste zurückgibt.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  9.373 
www.tools4vb.deSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Heute stellen wir Ihnen eine kleine aber nützliche Funktion vor, um alle EMail-Adressen aus einem String (Text) auszufiltern.

Anwendungsbereich ist zum Beispiel das Auslesen von "Maildelivery Subsystem Mails", die nicht explizit die falsche Emailadresse ausweisen, sondern diese im Body der Email "verstecken".

Zum Testen erstellen Sie bitte ein neues Projekt mit einer MultiLine-TextBox, einem Button, sowie eine ListBox. Beim Klicken auf den Button werden dann alle in der TextBox vorhandenen EMail-Adressen ausgefiltert und in der ListBox ausgegeben.

''' <summary>
''' Extrahiert alle im übergebenen Text enthaltenen EMailadressen
''' </summary>
''' <param name="Text">Text, der nach Mailadressen durchsucht werden soll</param>
''' <returns>Liste der Mailadressen</returns>
Public Function FilterEMail(ByVal Text As String) As List(Of String)
  Dim iPos As Integer = -1
  Dim startPos As Integer = 0
  Dim endPos As Integer = 0
 
  ' Neue Liste erstellen
  FilterEMail = New List(Of String)
 
  ' Gültige Zeichen
  Dim ValidChar(255) As Boolean
  For i As Integer = 0 To 255
    Select Case i
      Case 0 To 37, 39 To 43, 58 To 63, 91 To 94, 96, 123 To 222
        ValidChar(i) = False
      Case Else
        ValidChar(i) = True
    End Select
  Next 
 
  ' Text in Byte-Array konvertieren
  Dim buffer() As Byte = System.Text.Encoding.ASCII.GetBytes(Text)
 
  ' Byte-Array durchlaufen und nach @-Zeichen suchen
  Do
    iPos = Array.IndexOf(buffer, CByte(64), iPos + 1)
    If iPos > 0 Then
 
      ' Beginn der Mailadresse suchen
      startPos = iPos - 1
      While startPos >= 0 AndAlso ValidChar(buffer(startPos)) = True
        startPos -= 1
      End While
 
      If startPos >= 0 Then
        ' Ende der Mailadresse suchen
        endPos = iPos + 1
        While endPos < buffer.Length AndAlso ValidChar(buffer(endPos)) = True
          endPos += 1
        End While
 
        ' Mailadresse der Liste hinzufügen
        FilterEMail.Add(System.Text.Encoding.ASCII.GetString( _
          buffer, startPos + 1, endPos - startPos - 1))
      End If
    End If
  Loop Until iPos < 0
End Function
Private Sub Button1_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Button1.Click
 
  ' alle in der TextBox enthaltenen Mailadressen in der ListBox anzeigen
  ListBox1.DataSource = FilterEMail(TextBox1.Text)
End Sub