![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: ZEOS
SQl für Filter von Emailadressen nutzen
Hallo,
ich hab folgendes kleines problem: ich hab eine Tabelle mit den Feldern "ID" und "adresse". In dieser Tabelle sind die Emailadressen die ich rausfiltern will drin. Also wenn ne Mail kommt check ich ob der Absender der Mail in der Tabelle ist, wenn ja verschieb ich die Mail in den Spamordner. Jetzt möchte ich aber sowas wie "*@xyz.xyz" in die Tabelle eintragen, damit alle Emails mit nem Absender wie "asdf@xyz.xyz" rausgefiltert werden. wie muss die SQL-Abfrage dazu aussehen? wenn ich direkt auf die Adresse gehe, ist es ja einfach
SQL-Code:
das geht aber ja bei *@xyz.xyz nicht :roll:
SELECT * FROM emailadressen WHERE adresse = "Absender"
Danke schonmal :angel: |
Re: SQl für Filter von Emailadressen nutzen
Schau dazu mal in der Hilfe unter
SQL-Code:
LIKE
|
Re: SQl für Filter von Emailadressen nutzen
Hi,
SQL-Code:
Also, das wäre IMHO der Syntax in Firebird, sollte in MySQL ähnlich sein.
SELECT * FROM emailadressen WHERE '%'||adresse like 'Absender'
Cu, Frank |
Re: SQl für Filter von Emailadressen nutzen
aber dann würde ich ja nach %*@xyz.xyz filtern :gruebel:
ich muss denk ich das * mit nem % ersetzen oder? |
Re: SQl für Filter von Emailadressen nutzen
Zitat:
SQL-Code:
So müsstest du alles records erhalten welche mit @xyz.xyz enden.
SELECT * FROM emailadressen WHERE adresse like %"@xyz.xyz"
lg BUNDY |
Re: SQl für Filter von Emailadressen nutzen
ich meinte das eigentlich anders:
in der Tabelle steht z.B. "*.xyz.xyz" als Absender übergeb ich jetzt "asdf@xyz.xyz" und möchte wissen ob das in die "Maske" passt |
Re: SQl für Filter von Emailadressen nutzen
Zitat:
Der Select wäre dann
SQL-Code:
Trägst du statt "@xyz.xyz" "%@xyz.xyz" ein, ist der Select halt nur:
SELECT * FROM emailadressen WHERE "Absender" like "%"||adresse;
SQL-Code:
Wobei "Absender" in deinem Bsp. für "asdf@xyz.xyz" steht.
SELECT * FROM emailadressen WHERE "Absender" like adresse;
Frank |
Re: SQl für Filter von Emailadressen nutzen
Ich will aber viel lieber "*@xyz.xyz" in die tabelle schreiben :stupid:
|
Re: SQl für Filter von Emailadressen nutzen
keiner eine Idde wie ich in dem Statement aus "*" ein "%" machen kann?
|
Re: SQl für Filter von Emailadressen nutzen
Schreib Dir eine Funktion die aus "*" ein "%" macht.
mit
Delphi-Quellcode:
Pos
|
Re: SQl für Filter von Emailadressen nutzen
:wall: in SQl will ich das doch.. in Delphi kann ich da keine Funktion nutzen.
nochmal: in der Tabelle soll "*@xyz.xyz" oder "xyz*xyz@*.xyz" stehen und das "*" soll in der Abfrage in ein "%" gewandelt werden damit ich bzw MySQL damit arbeiten kann. |
Re: SQl für Filter von Emailadressen nutzen
Moin,
wenn du unbedingt willst kannst du ja das * vorne an der E-Mail-Adresse wegschnibbeln und dort ein % hinzetzen, das geht auch per SQL. Ich sag dir aber ganz ehrlich dass ich das ziemlich bescheuert finde, vor allem weils keinen wirklichen Unterschied macht ob da "@foobar.com" oder "*@foobar.com" steht, jedenfalls was die Speicherung betrifft. Wenn du es aber ohne * schreibst, geht die Abfrage ziemlich einfach:
SQL-Code:
Also in mails stehen E-Mail-Adressen drin, in mailservers die Mailserver die du hast und eine ID.
SELECT m.email, ms.id FROM mails m, mailservers ms WHERE m.email LIKE CONCAT(ms.server, '%')
Das obige Query gibt dir dann zu jedem Mailserver alle Mail-Adressen aus. In der Tabelle mailservers steht dann nur "@foobar.com", und nicht "*@foobar.com". Du kannst ja bei der Ausgabe den * hinmachen wenn er dir so wichtig ist :roll: Greetz alcaeus |
Re: SQl für Filter von Emailadressen nutzen
ich ahb grad mal geschaut wie das phpBB amcht, das ersetzt beim eintragen alle "*" durch "%" oder so und beim anzeigen wieder zurück.. dacht das hat es auch direkt mit "*" drin.
|
Re: SQl für Filter von Emailadressen nutzen
Falsch. Komplett falsch.
Das Ding traegt *@foobar.com ein, und arbeitet spaeter damit, und das auch noch falsch. Das Ding speichert ja nur gebannte E-Mail-Adressen der Form ab@foobar.com bzw. *@foobar.com. Beim Erstellen einer Session nimmt es die E-Mail-Adresse und macht folgendes:
SQL-Code:
So, da sind keine % oder _ drin, gar nichts. Wenn du also *@foobar.com wird also nicht erkannt. Das wird immer ein leeres Result-Set zurueckgeben. Das Query muesste so aussehn:
SELECT [...] FROM [...] WHERE [...] OR ban_email LIKE 'meinemail@foobar.com' OR ban_email LIKE '@foobar.com'
SQL-Code:
Da ist nichts von * zu sehn.
SELECT [...] FROM [...] WHERE [...] OR ban_email LIKE 'meinemail@foobar.com' OR ban_email LIKE '*@foobar.com'
Inwiefern das was mit deinem Problem zu tun hat, musst du mir aber auch erstmal erklaeren :roll: Wenn du aber willst, mySQL kennt die Funktionen SUBSTRING und CONCAT. Du musst nur das * vorne wegschnibbeln und ein % reinmachen, wie ich dir bereits gesagt habe. Das ist aber definitiv weniger performant als eine Speicherung der E-Mail-Adresssen ohne *. Vielleicht solltest du aber mal genauer erklaeren, was du wo und wie speicherst, und was du machen willst. Dann kann man dir vielleicht auch mal weiterhelfen... Greetz alcaeus |
Re: SQl für Filter von Emailadressen nutzen
OK, also was genau ich mache:
Ich programmiere einen EMailclient als Teil eines Warenwirtschaftsprogramms. Ein Dienst holt dabei von einem Emailkonto alle Mails ab und schreibt die(im Moment!!) in eine Tabelle "Emailarchiv", also den Absender, Betreff und den Pfad wo die EMail als "*.eml" gespeichert wird. Zusätzlich wird jede Mail geprüft ob sie auf eine bestimmte Weise formatiert ist und dann entsprechend weiterverarbeitet, was aber hier uninteressant ist. Wenn mein Dienst jetzt die ganzen Mails holt, sind da haufenweise SPAM-Mails a la "Viagra is the best" oder sowas drin. Jetzt habe ich mir überlegt, dass ich doch eine tabelle mit Emailadressen anlegen könnte, wo ich die Absender der SPAM-Mails eintrage und die Mails dieser Absender beim Abholen anstatt in das "Emailarchiv" in das "Spamarchiv" schiebe und diese dann auch nicht weiterverarbeite. Das funktioniert soweit ganz gut, es landen jeden Tag allerdings nur von 50 Mails 2 oder so im SPAM-Archiv. Jetzt ist mir aufgefallen das die Domain oft die selbe ist, also anstatt xyz@xyz.xyz, beim nächstenmal dann halt abc@xyz.xyz verwendet wird, aber der Inhalt gleich bleibt. Deswegen will ich die komplette Domain aussortieren, also "*@xyz.xyz" zu den Emailadressen hinzufügen, das * durch ein % in der Abfrage zu ersetzen und dann mit einem LIKE "%@xyz.xyz" diese Mails rausfiltern. |
Re: SQl für Filter von Emailadressen nutzen
:wall: :wall: :wall: :wall:
Das ist die Funktion:
Delphi-Quellcode:
function TSNMailservice.IsSpam(AAdress: string): Boolean;
begin Result:=False; try try tqspamadressen.SQL.Text:='SELECT * FROM spamadressen WHERE "'+AAdress+'" LIKE REPLACE(Email,"*","%")'; tqspamadressen.Active:=True; Result:=not tqspamadressen.IsEmpty; except Result:=False; end; finally tqspamadressen.Active:=False; end; end; hätt mir au wer sagen könn das es REPLACE in SQL gibt :roll: und es funktioniert.. wenn ich "*@web.de" in die Tabelle eintrage werden alle einkommenden Mails von @web.de in den SPAM-Ordner geschoben :) THX für eure Hilfe :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz