PHP Nach E-Mails suchen via regulärer Ausdruck?

Schumiel

Lieutenant
Registriert
Jan. 2010
Beiträge
825
Hallo,

und zwar möchte ich meine ganze Internetpräsenz, ausschließlich die Dateien, nach E-Mails suchen. Mir sind aber nicht mehr alle E-Mails bekannt, daher möchte ich diese über regulären Ausdruck suchen.

Nun bräuchte ich also ein Skript, dass zum einen automatisch alle Dateien aufgreift, und dessen Inhalt sucht. Hierbei gebe ich den regulären Ausdruck mit.
Das gleiche möchte ich dann mit meiner MySQL-Datenbank machen.

Ist meine denke so richtig oder gibt es sogar noch eine einfachere Methode (Linux)?
 
Du willst vermutlich nach Email-Adressen suchen und nicht nach Emails, oder? Emails liegen ja eher nicht auf einer Internetpräsenz.

Hilft das? https://emailregex.com/
 
Grep.
https://linuxize.com/post/regular-expressions-in-grep/
bzw https://www.shellhacks.com/regex-find-email-addresses-file-grep/

Deiner Frage kann ich jedoch nicht folgen.
Schumiel schrieb:
möchte ich meine ganze Internetpräsenz, ausschließlich die Dateien, nach E-Mails suchen.
du meinst, emails, die du in dateien gespeichert hast?
Alles ist in dateien. Im Prinzip. Immer. Selbst ordner sind dateien, die als sammlung von Verwesen zu verstehen sind (in vielen Dateisystemen)
kartoffelpü schrieb:
inhaltlich richtig, hier vielleicht overkill:D

Schumiel schrieb:
Das gleiche möchte ich dann mit meiner MySQL-Datenbank machen.
https://mariadb.com/kb/en/regexp/
 
In Datenbanken zu suchen - ohne zu wissen in welcher Tabelle/Spalte - kann schon ziemlich PITA sein; da
hilft mein Lieblings-DB-Tool HeidiSQL:

DB markieren, STRG-Shift-F drücken - im "Text suchen"-Dialog lässt sich auch "Regulärer Ausdruck" wählen.

1650469890277.png


Edit: HeidiSQL wird zwar für Windows kompiliert, sollte aber AFAIK auch problemlos via WINE unter Linux laufen.
Typisches Pattern für Emils: (\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})
 
Zuletzt bearbeitet:
Das Pattern ist natürlich nur ein Beispiel, damit bekommt man nicht alle Mailadressen :-)

Und wer ein DBMS durchsuchen kann ohne zu wissen wie es aussieht, dem gehört der Zugriff aufs DBMS entzogen.

So richtig sehe ich bei der Frage aber auch nicht durch. Worum geht es denn nun? DBMS durchsuchen Datenbanken, keine Dateisysteme. Das geht schon mal schief.

Mailadressen sind mit einem regex Pattern am besten aufzuspüren. Da ist jetzt natürlich die Frage, wie viel Knowhow bereits da ist. Für Regex "genügt es" wenn man sich die Spezifikation für Mailadressen gemäß RFC anguckt und das als Regex implementiert.... aber solche Aussagen helfen natürlich nicht unbedingt jedem :D

Mails, welche in Dateien abgelegt sind -- sagen wir durch einen Mailserver --- werden schon ein wenig schwieriger. Besonders, wenn die überall im Dateisystem verteilt sind.

Das kommt auch ein bißchen drauf an, exakt wie diese Maildaten ins Dateisystem geschrieben wurden (und von wem). Manchmal gibt es zusätzliche Headerdaten vom MTA. Manchmal auch nicht.

In solchen Fällen am besten ein paar bekannte Mail-Dateien raussuchen und anschauen nach Eigenschaften, die (1) möglichst weit oben in der Datei stehen und (2) möglichst eindeutig sind. Received: header wären zum Beispiel ein Kandidat, besonders wenn man das noch ein wenig erweitern kann --- in "normalen", "Nicht-Mail"-Dateien steht normalerweise nichts mit "Received: " drin.

Vorteilhaft wäre natürlich die Präsenz eines möglichst eindeutigen Indikators in der ersten Zeile. Wenn jede Mail mit SMTP als die ersten vier Bytes beginnt, dann kann man das vergleichsweise schneller identifizieren.

Aber: False positives bedenken. Nicht überall, wo "Mail" dransteht, ist auch "Mail" drin.
 
Weil nachgefragt wurde ... ja, E-Mail-Adressen in php-Dateien. Damals sehr statisch umgesetzt. Ich möchte das nun in eine zentrale Datei auslagern und dynamisch umsetzen. Da mir aber nicht mehr alle E-Mail-Adressen bekannt sind, muss ich sie irgendwie finden. Und da dachte ich, ein regulärer Ausdruck wäre das richtige.
 
Hatte gerade mal Zeit dafür - probier mal

Bash:
cd mein_www_root_verzeichnis
grep -r --include="*.php" -e "\w\+@[a-zA-Z_]\+\?\.[a-zA-Z]\{2,6\}"

Das sollte Dir die PHP-Dateien ausspucken, welche E-Mail-Adressen enthalten.
Und für Mysql/MariaDB dann halt HeidiSQL (z.B. von einem Windows-Client aus oder eben via WINE) nutzen wie ich in #4 beschrieben habe.
 
Hast Recht, der wird nicht greifen, aber fühl Dich frei den RegExp zu pimpen; im Grunde gehe ich davon aus dass das Netz voll mit brauchbaren Expressions ist und am Ende ist der TE gefragt, daraus nen Schuh zu machen.
 
  • Gefällt mir
Reaktionen: RalphS
Zurück
Oben