![]() |
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 09:34 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