Script um Email-Filter erweitern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Script um Email-Filter erweitern

    Hallo,

    ich habe leider absolut keine Ahnung von Perl, muss aber ein vorhandenes Script, das zum Versenden von Email dient etwas erweitern. Hier mal der Code Teil:

    Quellcode

    1. if($data->{emailadresse})
    2. {
    3. $smtp->mail($senderAddress);
    4. $smtp->to($data->{emailadresse});
    5. $smtp->data();
    6. $smtp->datasend($msg->stringify);
    7. $smtp->dataend();
    8. printTimestamp();
    9. print "Mail ".$data->{betreff}." versendet an ".$data->{emailadresse}."\n";
    10. }
    11. else
    12. {
    13. print "Mail ".$data->{betreff}." nicht versendet, eMail Adresse leer\n";
    14. }
    Alles anzeigen


    Bevor die Mail versendet wird, soll zusätzlich nach bestimmten Adressen gefilter werden. Der Filter sieht so aus:

    *@internal.meindomain.com

    also alle Mails, deren Empfänger, nach dem @ ein "internal.meindomain.com" haben sollen nicht versendet werden.

    Es kann sein, das hier noch mehr dazu kommt, also müssten die Filter wahrscheinlich in einem Array gespeichert werden (zumindest würd ich's in PHP so machen ;-)). Also so in der Richtung:

    $array = array('*@internal.meindomain.com', '*@internal2.meindomain2.de')

    Wäre schön, wenn mir jemand helfen könnte.

    70abc
    We raise hopes, here ... until they're old enough to fend for themselves.
    - Mike Callahan
  • "d0nUt" schrieb:

    Hi, versuchs mal mit dieser Abfrage:

    Quellcode

    1. if ($data->{emailadresse} !~ /.+\@internal\.meindomain\.com/) {
    2. print "Fehler";
    3. else
    4. print "Kein Fehler"


    Danke d0nUt,

    ich kann's leider nicht so ohne weiteres testen, daher noch eine Frage. Ich würde die Sache mit dem Array noch gerne aufgreifen, da sich die Liste der zu filternden Adresse noch erweitern kann. Würde das so funktionieren?

    Quellcode

    1. my $regExs = ('/.+\@internal\.meindomain\.com/', '/.+\@internal2\.meindomain2\.de/');
    2. if($data->{emailadresse})
    3. {
    4. my $res = true;
    5. foreach $regEx ($regExs) {
    6. if ($data->{emailadresse} !~ $regEx) {
    7. $res = false;
    8. }
    9. }
    10. if($res == true) {
    11. $smtp->mail($senderAddress);
    12. $smtp->to($data->{emailadresse});
    13. $smtp->data();
    14. $smtp->datasend($msg->stringify);
    15. $smtp->dataend();
    16. printTimestamp();
    17. print "Mail ".$data->{betreff}." versendet an ".$data->{emailadresse}."\n";
    18. }
    19. }
    Alles anzeigen


    Oder darf die RexEx im Array kein String sein?

    70abc
    We raise hopes, here ... until they're old enough to fend for themselves.
    - Mike Callahan
  • Redest du von zwei, drei oder von hunderten einträgen?

    Im kleinen Stil würde ich einfach den regulären Ausdruck ausbauen.

    Quellcode

    1. if ($data->{emailadresse} !~ /.+\@(internal\.meindomain\.com)|internal2\.meindomain2\.com|internal3\.meindomain3\.com/) {


    Kann selbst auch kein Perl.. nur zusammengereihmt aus SelfHTML Quelltexten. Bei dem konkreten Fall denke ich aber, dass du genausogut ein Array aus Patterns aufbauen kannst wie ein Array aus Strings.

    Quellcode

    1. my $regExs = (/.+\@internal\.meindomain\.com/, /.+\@internal2\.meindomain2\.de/);
  • "d0nUt" schrieb:

    Hi, versuchs mal mit dieser Abfrage:

    Quellcode

    1. if ($data->{emailadresse} !~ /.+\@internal\.meindomain\.com/) {
    2. print "Fehler";
    3. else
    4. print "Kein Fehler"


    Kleine Korrektur:

    Quellcode

    1. if ($data->{emailadresse} =~ /.+\@internal\.meindomain\.com/) {
    2. print "Fehler";
    3. else
    4. print "Kein Fehler"


    70abc
    We raise hopes, here ... until they're old enough to fend for themselves.
    - Mike Callahan