<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://znil.net/index.php?action=history&amp;feed=atom&amp;title=AutoIt%3AEmail_Adressen_in_beliebigen_Texten_finden_mit_GUI</id>
	<title>AutoIt:Email Adressen in beliebigen Texten finden mit GUI - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://znil.net/index.php?action=history&amp;feed=atom&amp;title=AutoIt%3AEmail_Adressen_in_beliebigen_Texten_finden_mit_GUI"/>
	<link rel="alternate" type="text/html" href="https://znil.net/index.php?title=AutoIt:Email_Adressen_in_beliebigen_Texten_finden_mit_GUI&amp;action=history"/>
	<updated>2026-04-28T09:48:01Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in znilwiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://znil.net/index.php?title=AutoIt:Email_Adressen_in_beliebigen_Texten_finden_mit_GUI&amp;diff=2883&amp;oldid=prev</id>
		<title>BLinz am 24. Juni 2012 um 11:34 Uhr</title>
		<link rel="alternate" type="text/html" href="https://znil.net/index.php?title=AutoIt:Email_Adressen_in_beliebigen_Texten_finden_mit_GUI&amp;diff=2883&amp;oldid=prev"/>
		<updated>2012-06-24T11:34:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:AutoIt]][[Kategorie:Exchange]][[Kategorie:Exchange+Outlook]][[Kategorie:Outlook]]&lt;br /&gt;
Edit 1: Neue Version, es gab eine Fehler wenn er nichts fand und das Programm hat sich beendet. --[[Benutzer:BLinz|Bernhard Linz]] 18:05, 19. Nov. 2011 (CET)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Brauchte ich für ein Exchange-Problem um aus defekten regeln die Empfänger-Adressen zu extrahieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Kann aber auch beliebigen anderen Texten die Adressen herausklauben.&amp;lt;br&amp;gt;&lt;br /&gt;
Doppelte Adressen werden dabei unterdrückt.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Eine genaue Beschreibung findet ihr hier: [[ZnilTools:PR_RULES_ACTION-Find_Email_Addresses - Emailadressen aus Exchange PR_RULES_ACTION extrahieren|PR_RULES_ACTION-Find_Email_Addresses - Emailadressen aus Exchange PR_RULES_ACTION extrahieren]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
und das ist der Quellcode hierzu (mit hoffentlich ausreichend Kommentaren): (&amp;#039;&amp;#039;&amp;#039;[[Media:PR_RULES_ACTION-Find_Email_Adresses.au3|PR_RULES_ACTION-Find_Email_Adresses.au3]]&amp;#039;&amp;#039;&amp;#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;autoit&amp;quot;&amp;gt;&lt;br /&gt;
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****&lt;br /&gt;
#AutoIt3Wrapper_Icon=znil.ico&lt;br /&gt;
#AutoIt3Wrapper_Res_Comment=Bernhard Linz - http://znil.net&lt;br /&gt;
#AutoIt3Wrapper_Res_Description=Bernhard Linz - http://znil.net&lt;br /&gt;
#AutoIt3Wrapper_Res_Language=1031&lt;br /&gt;
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ButtonConstants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;EditConstants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;GUIConstantsEx.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;StaticConstants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;WindowsConstants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;array.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;GUIEdit.au3&amp;gt;&lt;br /&gt;
#Include &amp;lt;String.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; #INDEX# =======================================================================================================================&lt;br /&gt;
; Title .........: PR_RULES_ACTION-Find_eamil_Adresses&lt;br /&gt;
; AutoIt Version : 3.6.6.1&lt;br /&gt;
; Language ......: Deutsch&lt;br /&gt;
; Description ...: Für Kunden der fehlerhafte, servergespeicherte Exchange-Regeln hat(te).&lt;br /&gt;
;                  Outlook / webinterface zeigte diese nicht mehr an, mit der Redemtention.dll konnten diese nicht vollständig&lt;br /&gt;
;                  ausgelesen werden. Mit MFCMAPI lies sich aber das passende Feld finden. Dieses Programm extrariert daraus&lt;br /&gt;
;                  die Weiterleitungsadressen um diese nach der Löschung wieder neu erstellen zu können&lt;br /&gt;
;                  Nebenbei extrariert das Programm alle Emailadressen aus beliebigen Texten&lt;br /&gt;
; Author(s) .....: Bernhard Linz im November 2011&lt;br /&gt;
;				   Bernhard@znil.net / http://znil.net/index.php?title=ZnilTools:PR_RULES_ACTION-Find_Email_Addresses_-_Emailadressen_aus_Exchange_PR_RULES_ACTION_extrarieren&lt;br /&gt;
; ===============================================================================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Änderungslog:&lt;br /&gt;
;-------------&lt;br /&gt;
;11.11.2011 - 21:07     Grundversion&lt;br /&gt;
;13.11.2011 - 19:51     Aufgepimpt (2 Schreibweisen der Adressen zum direkten kopieren, etwas Statistik&lt;br /&gt;
;                       und so ungefähr 5 mal den Suchalgorithmus umgeschrieben&lt;br /&gt;
&lt;br /&gt;
Dim $aMailaddresses     ;Array mit allen Emailadressen die gefunden wurden&lt;br /&gt;
Dim $sInputtext         ;String mit dem reinkopiertem Text&lt;br /&gt;
Dim $sOutputtext        ;String mit dem Text der ausgegeben werden soll - Adressen untereinander&lt;br /&gt;
Dim $sOutputtextH       ;String mit dem Text der ausgegeben werden soll - Adressen nebeneinander mit Trennzeichen aus der GUI&lt;br /&gt;
Dim $CTRLA				;für die &amp;quot;Alles markieren&amp;quot; Funktion von progandy&lt;br /&gt;
Dim $iRuntimeBegin      ;Integer für das Messen der Ausfürhungszeit (Startwert)&lt;br /&gt;
Dim $iRuntimeDiff       ;Integer für das Messen der Ausfürhungszeit (Anzahl Milisekunden seit Startwert)&lt;br /&gt;
&lt;br /&gt;
#Region ### START Koda GUI section ### Form=C:\_AutoIT\HFK\FormMAIN-PR_RULES_ACTION.kxf&lt;br /&gt;
$FormMAIN = GUICreate(&amp;quot;PR_RULES_ACTION-Find_Email_Addresses&amp;quot;, 642, 635, 512, 208, -1, 0)&lt;br /&gt;
$EditInputText = GUICtrlCreateEdit(&amp;quot;&amp;quot;, 8, 32, 625, 281)&lt;br /&gt;
GUICtrlSetFont(-1, 10, 400, 0, &amp;quot;Courier New&amp;quot;)&lt;br /&gt;
$ButtonFindMailAddresses = GUICtrlCreateButton(&amp;quot;Finde Mailadressen ...&amp;quot;, 8, 320, 625, 25)&lt;br /&gt;
$EditResult = GUICtrlCreateEdit(&amp;quot;&amp;quot;, 8, 375, 305, 169, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))&lt;br /&gt;
GUICtrlSetData(-1, &amp;quot;Bereit ....&amp;quot;)&lt;br /&gt;
GUICtrlSetFont(-1, 10, 400, 0, &amp;quot;Courier New&amp;quot;)&lt;br /&gt;
$Label1 = GUICtrlCreateLabel(&amp;quot;Hier den Text aus PR_RULES_ACTION einfügen:&amp;quot;, 8, 8, 284, 17)&lt;br /&gt;
GUICtrlSetFont(-1, 8, 800, 0, &amp;quot;MS Sans Serif&amp;quot;)&lt;br /&gt;
$LabelUntereinander = GUICtrlCreateLabel(&amp;quot;Untereinander:&amp;quot;, 8, 352, 74, 17)&lt;br /&gt;
$EditResultH = GUICtrlCreateEdit(&amp;quot;&amp;quot;, 8, 584, 625, 41, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))&lt;br /&gt;
GUICtrlSetData(-1, &amp;quot;Bereit ....&amp;quot;)&lt;br /&gt;
GUICtrlSetFont(-1, 10, 400, 0, &amp;quot;Courier New&amp;quot;)&lt;br /&gt;
$Label2 = GUICtrlCreateLabel(&amp;quot;Nebeneinander, Trennzeichen ist:&amp;quot;, 8, 560, 164, 17)&lt;br /&gt;
$InputTrennzeichen = GUICtrlCreateInput(&amp;quot;; &amp;quot;, 176, 558, 41, 21)&lt;br /&gt;
$Group1 = GUICtrlCreateGroup(&amp;quot; sonstiges &amp;quot;, 328, 360, 305, 209)&lt;br /&gt;
$LabelRuntime = GUICtrlCreateLabel(&amp;quot;Laufzeit:&amp;quot;, 336, 408, 44, 17)&lt;br /&gt;
$LabelTextLength = GUICtrlCreateLabel(&amp;quot;Länge Text:&amp;quot;, 336, 384, 61, 17)&lt;br /&gt;
$LabelCountMailaddresses = GUICtrlCreateLabel(&amp;quot;Gefundene Emailadressen:&amp;quot;, 336, 432, 131, 17)&lt;br /&gt;
$CheckboxAutomarkText = GUICtrlCreateCheckbox(&amp;quot;Automatisch ganzen Text markieren&amp;quot;, 336, 520, 289, 17)&lt;br /&gt;
GUICtrlSetState(-1, $GUI_CHECKED)&lt;br /&gt;
$Label6 = GUICtrlCreateLabel(&amp;quot;2011 von Bernhard Linz&amp;quot;, 336, 544, 117, 17)&lt;br /&gt;
$Label7 = GUICtrlCreateLabel(&amp;quot;http://znil.net&amp;quot;, 536, 544, 83, 17, $SS_RIGHT)&lt;br /&gt;
GUICtrlSetFont(-1, 8, 800, 4, &amp;quot;MS Sans Serif&amp;quot;)&lt;br /&gt;
GUICtrlSetColor(-1, 0x0000FF)&lt;br /&gt;
GUICtrlSetCursor (-1, 0)&lt;br /&gt;
$LabelTextlengthResult = GUICtrlCreateLabel(&amp;quot;-&amp;quot;, 480, 384, 151, 17)&lt;br /&gt;
$LabelRuntimeResult = GUICtrlCreateLabel(&amp;quot;-&amp;quot;, 480, 408, 151, 17)&lt;br /&gt;
$LabelCountMailaddressesResult = GUICtrlCreateLabel(&amp;quot;-&amp;quot;, 480, 432, 151, 17)&lt;br /&gt;
GUICtrlCreateGroup(&amp;quot;&amp;quot;, -99, -99, 1, 1)&lt;br /&gt;
GUISetState(@SW_SHOW)&lt;br /&gt;
#EndRegion ### END Koda GUI section ###&lt;br /&gt;
&lt;br /&gt;
; Leider passt &amp;quot;ab Werk&amp;quot; nicht besonders viel Text in so ein Edit-Control&lt;br /&gt;
; Aus einer Antowrt von Greenhorn von http://www.autoit.de&lt;br /&gt;
GUICtrlSendMsg($EditInputText, $EM_SETLIMITTEXT, 1024 ^ 2, 0) ; 1024 ^ 2 Zeichen&lt;br /&gt;
GUICtrlSendMsg($EditResult, $EM_SETLIMITTEXT, 1024 ^ 2, 0) ; 1024 ^ 2 Zeichen&lt;br /&gt;
GUICtrlSendMsg($EditResultH, $EM_SETLIMITTEXT, 1024 ^ 2, 0) ; 1024 ^ 2 Zeichen&lt;br /&gt;
&lt;br /&gt;
;Hauptschleife zur Abfrage der GUI&lt;br /&gt;
While 1&lt;br /&gt;
	$nMsg = GUIGetMsg()&lt;br /&gt;
	Switch $nMsg&lt;br /&gt;
		Case $GUI_EVENT_CLOSE ; Jemand hat auf das X oben rechts geklickt - also Schluss für heute!&lt;br /&gt;
			Exit&lt;br /&gt;
		Case $Label7&lt;br /&gt;
			ShellExecute(&amp;quot;http://znil.net/index.php?title=ZnilTools:PR_RULES_ACTION-Find_Email_Addresses_-_Emailadressen_aus_Exchange_PR_RULES_ACTION_extrahieren&amp;quot;)&lt;br /&gt;
		Case $ButtonFindMailAddresses ; Ahhh, jemand will das wir die Emailadressen aus dem Text im oberen Edit-Control-Fenster finden&lt;br /&gt;
			$iRuntimeBegin = TimerInit() ; Startzeit festhalten (für das Messen der Ausfürhungszeit)&lt;br /&gt;
			GUICtrlSetState($ButtonFindMailAddresses, $GUI_DISABLE); solange wir die Adressen suchen, deaktviren wir die &amp;quot;Suchen&amp;quot; Schaltfläche&lt;br /&gt;
			$sOutputtext = &amp;quot;&amp;quot; ; alte Schule - Variablen auf definierten Ausgangszusatnd setzten&lt;br /&gt;
			$sOutputtextH = &amp;quot;&amp;quot; ; alte Schule - Variablen auf definierten Ausgangszusatnd setzten&lt;br /&gt;
			$sInputtext = GUICtrlRead($EditInputText) ; Wir holen uns den gesamten Text aus dem oberen Edit-Control-Fenster in eine Variable&lt;br /&gt;
			;Nachfolgende Zeile ermittelt die Textlänge und formatiert diese mit Tausenderpunkt&lt;br /&gt;
			GUICtrlSetData($LabelTextlengthResult, StringRegExpReplace(_StringReverse(StringRegExpReplace(_StringReverse(StringLen($sInputtext)),&amp;quot;\d{3}&amp;quot;,&amp;quot;\0.&amp;quot;)),&amp;quot;(?&amp;lt;![0-9])\.&amp;quot;,&amp;quot;&amp;quot;,1) &amp;amp; &amp;quot; Zeichen&amp;quot;)&lt;br /&gt;
			$aMailaddresses = StringRegExp($sInputtext,&amp;quot;(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,20}\b&amp;quot;,3) ; Findet alle(!) Emailadressen.&lt;br /&gt;
			;Bedingungen: (?i)            = Groß-/Kleinschreibung ignorieren&lt;br /&gt;
			;             \b              = &amp;quot;Finden an der Wortgrenze&amp;quot; ... also hier wo ein Wort anfängt (Leerzeichen davor)&lt;br /&gt;
			;             [A-Z0-9._%+-]+  = Finde die Zeichen in den eckigen [] Klammern, also Buchstaben,Zahlen,Punkte, Unterstrich _, Prozent, %, Plus + oder Minus - und das beliebig oft (+ am Ende)&lt;br /&gt;
			;             @               = Finde den Klammeraffen @ (mindestens! ohne Klammeraffe = keine Emailadresse)&lt;br /&gt;
			;             [A-Z0-9.-]+     = Wie oben, nur ohne Unterstriche und %&lt;br /&gt;
			;             \.              = finde mindestens einen Punkt (wir sind bei der Emaildomäne, die besteht mindestens aus Domain.Suffix&lt;br /&gt;
			;             [A-Z]{2,20}     = nach dem Punkt zuvor müssen mindestens 2 bis maximal 6 Buchstaben kommen (.de, .com, .bremen etc)&lt;br /&gt;
			;             \b              = bis zum Wortende ... also wieder ein Leerzeichen z.B.&lt;br /&gt;
			_ArraySort($aMailaddresses) ; Schön sortieren, erst Zahlen dann Buchstaben&lt;br /&gt;
			$aMailaddresses = _ArrayUnique($aMailaddresses) ; und alle doppelten Einträge entfernen&lt;br /&gt;
			If IsArray($aMailaddresses) = 0 Then&lt;br /&gt;
				GUICtrlSetData($EditResult,&amp;quot;Keine Adressen gefunden&amp;quot;)&lt;br /&gt;
				GUICtrlSetState($ButtonFindMailAddresses, $GUI_ENABLE)&lt;br /&gt;
				ContinueCase ; Ist es kein Array gab es keine Adressen - also stoppen. Hiernach darf kein anderer Case stehen&lt;br /&gt;
			EndIf&lt;br /&gt;
			GUICtrlSetData($LabelCountMailaddressesResult,$aMailaddresses[0] &amp;amp; &amp;quot; Stück&amp;quot;) ; Statistik setzen, wieviel sind es denn&lt;br /&gt;
			;Nachfolgend füllen wir die die beiden String-Variablen mit dem Text der Mailadressen (aus dem Array wieder Strings)&lt;br /&gt;
			For $i = 1 To $aMailaddresses[0] Step 1&lt;br /&gt;
				$sOutputtext = $sOutputtext &amp;amp; $aMailaddresses[$i] &amp;amp; @CRLF ; Für die Darstellung untereinander (@CRLF = neue Zeile)&lt;br /&gt;
				$sOutputtextH = $sOutputtextH &amp;amp; $aMailaddresses[$i] &amp;amp; GUICtrlRead($InputTrennzeichen) ; Für die Darstellung nebeneinander&lt;br /&gt;
			Next&lt;br /&gt;
			; Die Nebeneinander-Darstellung hat ab Ende ein Trennzeichen zuviel - wieder weg damit&lt;br /&gt;
			$sOutputtextH = StringTrimRight($sOutputtextH, StringLen(GUICtrlRead($InputTrennzeichen)))&lt;br /&gt;
			GUICtrlSetData($EditResult,$sOutputtext) ; Die Edit Controls füllen, hier Adressen untereinander&lt;br /&gt;
			GUICtrlSetData($EditResultH,$sOutputtextH) ; Die Edit Controls füllen, hier Adressen nebeneinander&lt;br /&gt;
			GUICtrlSetState($ButtonFindMailAddresses, $GUI_ENABLE) ; Den Button wieder für einen neuen Suchlauf aktivieren&lt;br /&gt;
			$iRuntimeDiff = TimerDiff($iRuntimeBegin) ; Na, wie lange haben wir gebraucht&lt;br /&gt;
			; Zeit in die GUI Schreiben - nachdem wir die auf 2 Nachkommastellen reduziert haben&lt;br /&gt;
			GUICtrlSetData($LabelRuntimeResult,StringRegExpReplace($iRuntimeDiff,&amp;quot;(\d*)\.(\d{2})(\d*)&amp;quot;,&amp;quot;$1,$2&amp;quot;) &amp;amp; &amp;quot; ms&amp;quot;)&lt;br /&gt;
			; Erklärung zu &amp;quot;(\d*)\.(\d{2})(\d*)&amp;quot;,&amp;quot;$1,$2&amp;quot;&lt;br /&gt;
			;              (\d*)    = Beliebige Anzahl von Zahlen (wird als $1 zurück gegeben&lt;br /&gt;
			;              \.       = und ein Punkt&lt;br /&gt;
			;              (\d{2})  = und 2 Zahlen (werden als $2 zurück gegeben)&lt;br /&gt;
			;              (\d*)    = und danach folgende beliebige Zahlen (werden als $3 zurück gegeben)&lt;br /&gt;
			;              werden ersetzt durch&lt;br /&gt;
			;              $1,$2    = die Rückgabe $1, ein Komma und die Rückgabe aus $2 - ($3 lassen wir unter den Tisch fallen)&lt;br /&gt;
			; Fehler im System? Wenn genau ein glatter Wert zurückgegeben würde, würde immer 0 gesetzt&lt;br /&gt;
	EndSwitch&lt;br /&gt;
	;Die nachfolgende Abfrage markiert in allen 3 Edit Controls den gesamten Text wenn die CheckBox gesetzt ist&lt;br /&gt;
	If BitAnd(GUICtrlRead($CheckboxAutomarkText),$GUI_CHECKED) = $GUI_CHECKED Then&lt;br /&gt;
		_GUICtrlEdit_SetSel($EditInputText,0,-1)&lt;br /&gt;
		_GUICtrlEdit_SetSel($EditResult,0,-1)&lt;br /&gt;
		_GUICtrlEdit_SetSel($EditResultH,0,-1)&lt;br /&gt;
	EndIf&lt;br /&gt;
WEnd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;comments /&amp;gt;&lt;/div&gt;</summary>
		<author><name>BLinz</name></author>
	</entry>
</feed>