Christoph: MAIL

HAllo

Ich verschicke per PHP eine EMAil. Dabei möchte ich allerdings prüfen, ob die EMAIL wirklich versendet wurde, oder ob es einen Fehler gab (Das kann ja ganz leicht passieren bei falscher Adressen, oder so). Dann möchte ich darauf reagieren: "EMAIl wurde versenden" oder eben "Es gab einen Fehler". Wie kann ich die If-Anweisung realisieren ???

Christoph

  1. Ich verschicke per PHP eine EMAil. Dabei möchte ich allerdings prüfen, ob die EMAIL wirklich versendet wurde, oder ob es einen

    1.
    du kannst innerhalb der funktion eine absenderadresse definieren. kommt die mail nicht an, oder ist die adresse falsch, kommt eine meldung eben an diese absenderadresse zurück.

    Fehler gab (Das kann ja ganz leicht passieren bei falscher Adressen, oder so). Dann möchte ich darauf reagieren: "EMAIl wurde versenden" oder eben "Es gab einen Fehler". Wie kann ich die If-Anweisung realisieren ???

    2. das ist etwas aufwendiger. ich habe es selber noch nie gemacht, aber man prüft in dem fall (vor dem versand), ob der mailsserver existiert. d.h., du nimmst die funktion fsockopen() und die servervariable stellt das dar, was bei der email hinter dem @ steht, der port ist 25 oder 110.

    wie man das was vor dem @ steht auf richtigleit überprüft weiss ich allerdings selber nicht.. ;-)

    gruss marco

    1. Hi,

      1. das ist etwas aufwendiger. ich habe es selber noch nie gemacht, aber man prüft in dem fall (vor dem versand), ob der mailsserver existiert. d.h., du nimmst die funktion fsockopen() und die servervariable stellt das dar, was bei der email hinter dem @ steht, der port ist 25 oder 110.

      wie man das was vor dem @ steht auf richtigleit überprüft weiss ich allerdings selber nicht.. ;-)

      Naja, selbst wenn man rauskriegt, ob die Empfänger-Mailadresse tatsächlich existiert, garantiert das noch lange nicht, daß die Mail auch tatsächlich ankommt.
      Mögliche (sicher nicht alle) Fehlerquellen:

      • der User hat den Speicherplatz für seine Mailbox bereits ausgenutzt
      • es gibt irgendwo auf der Strecke ein Problem
      • die Mailbox lehnt die Mail wegen Virus ab
      • der Mailinhalt ist in irgendeiner Form falsch kodiert und wird deswegen von irgendeinem Rechner unterwegs nicht weitergeleitet
      • ...

      Andreas

      1. Naja, selbst wenn man rauskriegt, ob die Empfänger-Mailadresse tatsächlich existiert, garantiert das noch lange nicht, daß die Mail auch tatsächlich ankommt.

        natürlich, nur die methode ist wenigstens an eine vernünftige annäherung an das problem.

        m

    2. Hallo,

      wie man das was vor dem @ steht auf richtigleit überprüft weiss ich allerdings selber nicht.. ;-)

      je nach verwendetem Malserver auf der anderen Seite gibt es doch bestimmt eine Möglichkeit abzufrage, ob blabla@... existiert. Aber daz müsste man dann erstmal die verwendete Serversoftware kennen :-)

      Gruß,
      Peter

    3. Moin,

      1. das ist etwas aufwendiger. ich habe es selber noch nie gemacht, aber man prüft in dem fall (vor dem versand), ob der mailsserver existiert. d.h., du nimmst die funktion fsockopen() und die servervariable stellt das dar, was bei der email hinter dem @ steht, der port ist 25 oder 110.

      Nein, das was bei einer Email-Addresse hinter dem @ steht hat mit dem tatsächlichen Mailserver in der Regel nicht viel zu tun. Korrekt wäre einen DNS-Server nach dem für diese Domain (also alles was hinter dem @ steht) zuständigen MX-Eintrag zu fragen. Das ist dann der Mailserver dem die Mail letztendlich zugestellt werden soll. Und der Port für SMTP ist 25; 110 wäre POP und das spielt bestenfalls beim Abholen einer Mail eine Rolle.

      wie man das was vor dem @ steht auf richtigleit überprüft weiss ich allerdings selber nicht.. ;-)

      Gar nicht, der Teil vor dem @ ist von allen Rechnern ausser dem Zielserver als undurchsichtig zu betrachten. Es gibt zwar einige Zeichen die da unter normalen Umständen nicht auftauchen dürfen, die kann man aber eigentlich fast alle verwenden, wenn man den Teil in Anführungszeichen setzt.

      Eigentlich gibt es auch keine verlässliche Möglichkeit festzustellen, ob eine Mail angekommen ist. Das was dem noch am Nähesten kommt, wäre eine Aufforderung in der Mail an den Empfänger doch bei Empfang bitte eine Rückmeldung zu geben (z.B. durch Aufruf einer Webseite).

      --
      Henryk Plötz
      Grüße von der Ostsee

  2. hallo

    Ich verschicke per PHP eine EMAil. Dabei möchte ich allerdings prüfen, ob die EMAIL wirklich versendet wurde, oder ob es einen Fehler gab (Das kann ja ganz leicht passieren bei falscher Adressen, oder so). Dann möchte ich darauf reagieren: "EMAIl wurde versenden" oder eben "Es gab einen Fehler". Wie kann ich die If-Anweisung realisieren ???

    versuchs mal etwa so:

    $senden = mail(...);
    if ($senden) {
      echo "Mail versendet";
    }
    else {
     echo "Fehler";
    }

    gruß
    Tobias

    1. versuchs mal etwa so:

      $senden = mail(...);
      if ($senden) {
        echo "Mail versendet";
      }
      else {
      echo "Fehler";
      }

      das sagt aber noch nichts darüber aus, ob die mail wirklich angekommen ist. dadurch wird lediglich der versuch bestätigt, die mail zu versenden! mancher user ist damit aber schon zufriedenzustellen ;-)

      m

      1. hi

        das sagt aber noch nichts darüber aus, ob die mail wirklich angekommen ist. dadurch wird lediglich der versuch bestätigt, die mail zu versenden!

        ok, aber serverseitig kannst du schlecht überprüfen ob die mail angekommen ist. Aber wenn man über das Formular nur an sich selbst schickt sollte eigentlich nichts schief gehen - schwieriger wird es natürlich, wenn die Adresse an die geschickt werden soll im Formular eingegeben wird (was ich aber nicht unbedingt machen würde, spam...).

        gruß
        Tobias

  3. Hallo Christoph,

    Ich verschicke per PHP eine EMAil. Dabei möchte ich allerdings prüfen, ob die EMAIL wirklich versendet wurde, oder ob es einen Fehler gab (Das kann ja ganz leicht passieren bei falscher Adressen, oder so). Dann möchte ich darauf reagieren: "EMAIl wurde versenden" oder eben "Es gab einen Fehler". Wie kann ich die If-Anweisung realisieren ???

    So einfach garnicht. Wenn Du:
    $result=mail(...);
    if($result)
    {
      echo "funktioniert!";
    }
    werden nur die Fehler abgefangen, die entstehen, wenn PHP keinen MTA wie Sendmail findet. Danach ist die Email im MTA, und er versucht sie zu senden, was nicht sofort gelingen muß, auf jeden Fall erfährt das PHP-Skript nichts von dessen Erfolg/Mißerfolg.
    Du kannst auf die Syntax der Mailadresse prüfen, oder, wenn es sein muß, nachschauen, ob für die Domain ein DNS-Eintrag existiert, alles andere kannst Du nur nachträglich machen. Es gibt auch noch die Möglichkeit, beim anderen Mailserver anzufragen, ob er die Emailadresse kennt, allerdings ist diese Möglichkeit soweit ich weiß bei vielen Mailservern aus Sicherheitsgründen gesperrt, und dann würde eine eigentlich gültige Email als falsch analysiert.
    Das einzige was praktisch Sinn macht, ist ein Syntaxcheck, die beiden anderen Möglichkeiten dauern auch zu lange, da man z.B. bei ungültigen Domains auf den Timeout des dnslookups warten muß.

    Viele Grüße
    Stephan