Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQl für Filter von Emailadressen nutzen (https://www.delphipraxis.net/77578-sql-fuer-filter-von-emailadressen-nutzen.html)

Angel4585 21. Sep 2006 13:04

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:
SELECT * FROM emailadressen WHERE adresse = "Absender"
das geht aber ja bei *@xyz.xyz nicht :roll:

Danke schonmal

:angel:

uwewo 21. Sep 2006 13:18

Re: SQl für Filter von Emailadressen nutzen
 
Schau dazu mal in der Hilfe unter
SQL-Code:
LIKE

dataspider 21. Sep 2006 13:19

Re: SQl für Filter von Emailadressen nutzen
 
Hi,

SQL-Code:
SELECT * FROM emailadressen WHERE '%'||adresse like 'Absender'
Also, das wäre IMHO der Syntax in Firebird, sollte in MySQL ähnlich sein.

Cu, Frank

Angel4585 21. Sep 2006 13:26

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?

bundy 21. Sep 2006 13:31

Re: SQl für Filter von Emailadressen nutzen
 
Zitat:

Zitat von Angel4585
aber dann würde ich ja nach %*@xyz.xyz filtern :gruebel:

ich muss denk ich das * mit nem % ersetzen oder?


SQL-Code:
SELECT * FROM emailadressen WHERE adresse like %"@xyz.xyz"
So müsstest du alles records erhalten welche mit @xyz.xyz enden.


lg
BUNDY

Angel4585 21. Sep 2006 14:49

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

dataspider 21. Sep 2006 15:03

Re: SQl für Filter von Emailadressen nutzen
 
Zitat:

Zitat von Angel4585
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

Ich würde in die Tabelle in das Feld Adresse "@xyz.xyz" eintragen.

Der Select wäre dann
SQL-Code:
SELECT * FROM emailadressen WHERE "Absender" like "%"||adresse;
Trägst du statt "@xyz.xyz" "%@xyz.xyz" ein, ist der Select halt nur:
SQL-Code:
SELECT * FROM emailadressen WHERE "Absender" like adresse;
Wobei "Absender" in deinem Bsp. für "asdf@xyz.xyz" steht.

Frank

Angel4585 21. Sep 2006 16:29

Re: SQl für Filter von Emailadressen nutzen
 
Ich will aber viel lieber "*@xyz.xyz" in die tabelle schreiben :stupid:

Angel4585 22. Sep 2006 09:30

Re: SQl für Filter von Emailadressen nutzen
 
keiner eine Idde wie ich in dem Statement aus "*" ein "%" machen kann?

uwewo 22. Sep 2006 10:14

Re: SQl für Filter von Emailadressen nutzen
 
Schreib Dir eine Funktion die aus "*" ein "%" macht.

mit
Delphi-Quellcode:
Pos

Angel4585 22. Sep 2006 10:16

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.

alcaeus 22. Sep 2006 10:47

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:
SELECT m.email, ms.id FROM mails m, mailservers ms WHERE m.email LIKE CONCAT(ms.server, '%')
Also in mails stehen E-Mail-Adressen drin, in mailservers die Mailserver die du hast und eine ID.
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

Angel4585 22. Sep 2006 11:00

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.

alcaeus 22. Sep 2006 11:11

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:
SELECT [...] FROM [...] WHERE [...] OR ban_email LIKE 'meinemail@foobar.com' OR ban_email LIKE '@foobar.com'
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:
SQL-Code:
SELECT [...] FROM [...] WHERE [...] OR ban_email LIKE 'meinemail@foobar.com' OR ban_email LIKE '*@foobar.com'
Da ist nichts von * zu sehn.

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

Angel4585 22. Sep 2006 11:48

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.

Angel4585 22. Sep 2006 12:25

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