Fehlermail verhindern?

  • Hallo,
    ich habe folgendes Problem: Ich habe ein E-Mail-Formular in PHP. Dieses ist für die Registrierung notwendig. Die E-Mail wird natürlich überprüft, ob sie valide ist, also dem Format Mail@domain.endung entspricht. Leider ist es ja nicht vorher möglich, zu überprüfen, ob die Domain wirklich existiert, sondern man kann nur prüfen, ob das Mailformat korrekt ist.

    Wenn sich nun einer mit einer nicht existierenden Mail-Addresse anmeldet, bekomme ich immer eine Fehlermeldung, da mit dem Script auch eine Aktivierungsmail an die angegebene E-Mail adresse gesendet wird.

    Ich habe z.B. die Mailadresse admin@vision-sportal.de[/email], von der dann die Aktiverungsmail an die angegebene E-Mail Adresse gesendet wird. Wenn die Mail nicht gesendet werden konnte (aufgrund nicht existierender Mail), meldet sich ja der Mailer-Demon, aber immer nur bei GMX, also dort, wo ich meinen Account registriert habe. Wenn es jetzt die Fehlermeldung zum Netcuppostfach senden würde, wäre es auch nicht gut, aber besser als das bisherige. Am besten sollte keine Fehlermeldung gesendet werden.

    Wisst ihr, wie ich das Problem beheben kann und gibt es schon ähnliche Probleme und Beschwerden?

    Mit freundlichem Gruß

  • Damit nicht den Hauptpostfach mit dem Messages zugemüllt wird, könntest du z.B. ein eigenes Postfach für eine Adresse wie noreply@deinedomain.at einrichten und diese als Absenderadresse angeben. Je nach verwendetem System unterscheidet sich das. Bei fertigen Mailer Klassen gibt es dafür meistens eine eigene Funktion, bei der mail() Funktion von PHP kannst du es im Header einfach mit From: angeben, sofern der Mailserver es erlaubt. Manche Hoster haben da strenge Restriktionen, was die Absenderadresse angeht. Notfalls könntest du es immer noch über SMTP versenden, auch dafür gibt es hervorragende E-Mail Klassen.

    Es gibt übrigens schon eine Möglichkeit, um die Domain bereits vor dem Senden zu überprüfen, das geht mit einer simplen DNS Abfrage des MX-Records:

    [PHP]<?php

    $email = 'something@example.com';
    list($username, $maildomain) = split("@", $email);
    if(checkdnsrr($maildomain, 'MX'))
    {
    return true;
    }
    else
    {
    return false;
    }

    ?>[/PHP]

    Ob der angegebene Account auf dem extfernten E-Mail Server existiert, könnte man theoretisch auch noch überprüfen, aber das weicht dann in den meisten Fällen zu sehr vom Standard ab und erzeugt nur fehlerhafte Ausgaben, auf die man sich nicht verlassen sollte. Die Überprüfung der Domain sollte ausreichen und ist wenigstens schon einmal eine kleine Verbesserung.


    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Wie versendest du die Mail denn genau? Hast du die noreply-Adresse auch wirklich als Absenderadresse angegeben bzw. versendest du über diesen Account?


    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Ich versende es via Mail über den folgenden PHP Code:

    PHP
    $betreff = "Aktivierung der Registrierung bei Domainname";
      $sender = "Sender";
      $sendermail = "noreply@domain.de";
      $text = "Hallo $firstname,
    Um die Registrierung abzuschließen und deinen Account zu aktivieren, klicke auf folgenden Link:
    http://www.domain.de/activation.php?key=$activationkey
    Unter Umständen musst du folgenden Aktivierungscode eingeben: $activationkey";
    mail($mail, $betreff, $text,
           "From: $sender <$sendermail>");

    Wie kann ich das Problem lösen?

  • Versuch einmal, die Absenderadresse zusätzlich auch noch so im E-Mail Header anzugeben:

    Code
    Reply-To: <something@example.com>


    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Leider besteht der Fehler weiterhin und es brachte keine Änderungen:

    Code
    $betreff = "Aktivierung der Registrierung bei Domainname";
    $from = "From:Sender<noreply@domain.de>";
    $from .= "Reply-To: <noreply@domain.de>";
    $text = "Hallo $firstname,
    Um die Registrierung abzuschließen und deinen Account zu aktivieren, klicke auf folgenden Link:
    http://www.domain.de/activation.php?key=$activationkey
    Unter Umständen musst du folgenden Aktivierungscode eingeben: $activationkey";
    mail($mail, $betreff, $text, $from);
  • Du sollst den neuen E-Mail Header auch nicht anhängen, denn bei dir ergibt das aktuell folgendes:

    Code
    From:Vision-Sportal<noreply@vision-sportal.de>Reply-To: <noreply@vision-sportal.de>

    Da fehlt ein Zeilenumbruch mit \n ;)


    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Wenn es so noch immer nicht geht, weiß ich leider auch nicht weiter.
    Du könntest die Mail jetzt maximal direkt über SMTP versenden ;)


    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Wenn ich das richtig sehe (korrigiere mich bitte, wenn ich falsch liege), ist es doch das selbe, als wenn man Outlook Express einrichtet oder? Mit GMX würde das ja funktionieren, nur funktioniert das auch mit Netcup? Wenn ja, wie wäre der Netcup smtp server und ist der Nutzername und das Password für smtp einfach das gleiche, wie das, womit ich mich bei Netcup einlogge?

  • Wenn du mit PHP über SMTP versendest, sind es die selben Zugangsdaten, mit denen du den E-Mail Account auch in Outlook oder Thunderbird einrichtest. Als Host könnte vielleicht sogar localhost funktionieren, aber dafür kenne ich die netcup Webspace Produkte zu wenig.


    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)