Beat: Mail From, Sender und Reply-to

Mein Verständnis

From: bezeichnet die Mailbox des Mailautors.
Sender: bezeichnet den Agenten, falls notwendig
Reply-to: spezifiziert die Antwortadresse, insofern sie von From: verschieden ist.

http://www.faqs.org/rfcs/rfc2822.html
spezifiziert nicht den Fall, dass From: nicht ermittelt werden kann.

Ausgangslage ein Formmailer.
Der Autor ist nicht verpflichtet, eine Mailadresse zu nennen.

From: kann also nicht den Autoren repräsentieren.
Als From: wird der Formmailer (das ist eine Mailadresse des den Formmailer betreibenden Admins) eingetragen.

Falls der Autor eine Mailadresse nennt, wird diese im Reply-to angegeben.

Wie stichhaltig ist dieses Verfahren?

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische
  1. Hallo,

    From: bezeichnet die Mailbox des Mailautors.
    Sender: bezeichnet den Agenten, falls notwendig
    Reply-to: spezifiziert die Antwortadresse, insofern sie von From: verschieden ist.

    habe ich bisher auch so verstanden.

    Ausgangslage ein Formmailer.
    Der Autor ist nicht verpflichtet, eine Mailadresse zu nennen.
    From: kann also nicht den Autoren repräsentieren.
    Als From: wird der Formmailer (das ist eine Mailadresse des den Formmailer betreibenden Admins) eingetragen.
    Falls der Autor eine Mailadresse nennt, wird diese im Reply-to angegeben.
    Wie stichhaltig ist dieses Verfahren?

    Absolut logisch, nach meinem Dafürhalten. Das beste, was du in dieser Informationslandschaft tun kannst.
    Einziger Schwachpunkt: Wenn der Autor keine Mailadresse angibt und somit Reply-To nicht vorhanden ist, werden gängige Mailclients beim Antworten stattdessen den From-Header heranziehen und versuchen, die Antwort an deinen Formmailer zu adressieren, was vermutlich fehlschlägt.

    Ciao,
     Martin

    --
    Die letzten Worte des Polizisten:
    Ich hab mitgezählt, Leute: Sechs Schuss, jetzt hat er keine Munition mehr!
    1. Einziger Schwachpunkt: Wenn der Autor keine Mailadresse angibt und somit Reply-To nicht vorhanden ist, werden gängige Mailclients beim Antworten stattdessen den From-Header heranziehen und versuchen, die Antwort an deinen Formmailer zu adressieren, was vermutlich fehlschlägt.

      Da der Formmailbetreiber der Empfänger ist, ist das hier kein Mangel.
      Würde als Empfänger der Formmail ein anderer als der Betreiber eingetragen, wäre das From: hier absolut korrekt.

      Der Formmailer bildet einigermassen das Formular ab. Also kein verschleierter Standard-MUA.

      Das im Moment nicht ganz aktuelle Online Testbeispiel findest du hier:
      http://www.elcappuccino.ch/cgi/mail/docserv.pl
      Testen des Mailers geht. Mailversand ist aber deaktiviert.

      (hoffentlich schägt kein 403 zu)

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische
      1. Hallo,

        http://www.elcappuccino.ch/cgi/mail/docserv.pl
        Testen des Mailers geht. Mailversand ist aber deaktiviert.
        (hoffentlich schägt kein 403 zu)

        oh doch!

        Ciao,
         Martin

        --
        Arzt:    Gegen Ihr Übergewicht hilft wohl nur noch Gymnastik.
        Patient: Sie meinen, Kniebeugen und so?
        Arzt:    Nein, Kopfschütteln. Immer dann, wenn Ihnen jemand was zu essen anbietet.
        1. Testen des Mailers geht. Mailversand ist aber deaktiviert.
          (hoffentlich schägt kein 403 zu)

          oh doch!

          Ich hab's geahnt.
          Ich habe jetzt eine Regel für das forum eingebaut.
          Keine Ahnung ob der schnelle Fix dir den Zutritt verschafft.
          http://www.elcappuccino.ch/cgi/mail/docserv.pl

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
        2. Habe jetzt eine .htaccess hinterlegt
          die lediglich bots abfängt.

          http://www.elcappuccino.ch/cgi/mail/docserv.pl

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
  2. Hallo Beat,

    RFC 2822 wurde durch die RFC 5322 abgelöst. Deine Aussagen beziehen sich also auf Abs. 3.6.2.

    From: bezeichnet die Mailbox des Mailautors.

    Ja.

    Sender: bezeichnet den Agenten, falls notwendig

    Nein. Mit diesem Header wird die Möglichkeit eröffnet, eine spezielle Absendeadresse anzugeben. Beispielsweise wenn ein Sekretär im Auftrag eine Mail versendet, wäre seine Mail-Adresse hier anzugeben. Diesem Header kann nur eine (einzelne) Mail-Adresse übergeben werden, während From, To, Reply-To Mailboxlisten oder gar Gruppenlisten übergeben werden können.

    Reply-to: spezifiziert die Antwortadresse, insofern sie von From: verschieden ist.

    Ja.

    spezifiziert nicht den Fall, dass From: nicht ermittelt werden kann.

    From-Header muss nach Abs. 3.6 enthalten sein.

    Ausgangslage ein Formmailer. Der Autor ist nicht verpflichtet, eine Mailadresse zu nennen. From: kann also nicht den Autoren repräsentieren. Als From: wird der Formmailer (das ist eine Mailadresse des den Formmailer betreibenden Admins) eingetragen.

    Dieser hat sich im Sender-Header zu verewigen. Wenn es nur darum geht, Dir selbst eine Nachricht in Form eines Feedback mit einem Formmailer zukommen zu lassen, ist das genau genommen Wurst. In anderen Einsatzfällen würde ich auf eine Mail-Adresse als Angabe bestehen und diese auch validieren lassen.

    Falls der Autor eine Mailadresse nennt, wird diese im Reply-to angegeben.

    Korrekt.

    Wie stichhaltig ist dieses Verfahren?

    Um welches Einsatzgebiet geht es denn speziell?

    Gruß aus Berlin!
    eddi

    1. Sender: bezeichnet den Agenten, falls notwendig

      Nein. Mit diesem Header wird die Möglichkeit eröffnet, eine spezielle Absendeadresse anzugeben. Beispielsweise wenn ein Sekretär im Auftrag eine Mail versendet, wäre seine Mail-Adresse hier anzugeben.

      Diese Schilderung entspricht der älteren rfc 2822.

      Sie ist eben vague. Warum wird das Beispiel eines Sekretärs gewählt? Ist ein Formmailer denn nicht ein Sekretär, der im Namen des Autors abliefert.

      Ist der Fall, dass ich eine Mail versende, die eine Mail weiterleitet, als Sekretär einzustufen, oder ist der Formmailer dies auch?
      Ich bezweifle, dass hier von Personen im traditionellen Sinne die Rede ist, Dazu gibt es zu viel automatisierte Mail.

      Wie stichhaltig ist dieses Verfahren?
      Um welches Einsatzgebiet geht es denn speziell?

      Um einen Formmailer mit reichhaltigem Angebot vordefinierter Felder und mit möglichst betreibssicherem versenden via Sendmail und/oder smtp.

      Link siehe Antwort an martin.

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische
      1. Re:

        Sender: bezeichnet den Agenten, falls notwendig
        Nein. Mit diesem Header wird die Möglichkeit eröffnet, eine spezielle Absendeadresse anzugeben. Beispielsweise wenn ein Sekretär im Auftrag eine Mail versendet, wäre seine Mail-Adresse hier anzugeben.
        Sie ist eben vague. Warum wird das Beispiel eines Sekretärs gewählt? Ist ein Formmailer denn nicht ein Sekretär, der im Namen des Autors abliefert.

        Dieser hat sich im Sender-Header zu verewigen.

        Damit ist der Admin des Scripts gemeint.

        Ist der Fall, dass ich eine Mail versende, die eine Mail weiterleitet, als Sekretär einzustufen, oder ist der Formmailer dies auch?

        Der Formmailer ist eine Software. Ich verstehe Dich dahingehend, dass "Agent" im Sinne von user agent steht. Dafür ist in Mails kein spezieller Header vorgesehen.

        Ich bezweifle, dass hier von Personen im traditionellen Sinne die Rede ist, Dazu gibt es zu viel automatisierte Mail.

        Diesem Header kann nur eine (einzelne) Mail-Adresse übergeben werden,...

        Der Wert des Headers ist also auch syntaktisch eindeutig zu beschreiben und zwar als Mail-Adresse. Das eine Mail-Adresse kein Person ist, sollte klar sein. Was aber meinst Du denn für diesen Header als Wert eintragen zu können oder zu wollen?

        Wie stichhaltig ist dieses Verfahren?
        Um welches Einsatzgebiet geht es denn speziell?
        Um einen Formmailer mit reichhaltigem Angebot vordefinierter Felder und mit möglichst betreibssicherem versenden via Sendmail und/oder smtp.

        Kann ich nicht sehen. Dein Pech.

        Gruß aus Berlin!
        eddi

        1. Sender: bezeichnet den Agenten, falls notwendig
          Nein. Mit diesem Header wird die Möglichkeit eröffnet, eine spezielle Absendeadresse anzugeben. Beispielsweise wenn ein Sekretär im Auftrag eine Mail versendet, wäre seine Mail-Adresse hier anzugeben.
          Sie ist eben vague. Warum wird das Beispiel eines Sekretärs gewählt? Ist ein Formmailer denn nicht ein Sekretär, der im Namen des Autors abliefert.

          Dieser hat sich im Sender-Header zu verewigen.

          Damit ist der Admin des Scripts gemeint.

          Was immer dann damit hemeint sei...

          Ist der Fall, dass ich eine Mail versende, die eine Mail weiterleitet, als Sekretär einzustufen, oder ist der Formmailer dies auch?

          Der Formmailer ist eine Software. Ich verstehe Dich dahingehend, dass "Agent" im Sinne von user agent steht. Dafür ist in Mails kein spezieller Header vorgesehen.

          Nein, nicht im Sinne des User-Agent. Der Formmailer hat eine Mailbox, wenn auch die Mailbox des Betreibers.
          Die frage ist, ob im Falle, dass der Autor seine Mailadresse angibt, und diese somit das From: belegt, im Sender die Mailbox des Formmailers stehen soll.
          Hintergrund: Im Falle des SMTP-Versands ist es die Adresse des Formmailers, welche sich authentifizieren muss, falls sendmail nicht genutzt werden kann.

          Ich bezweifle, dass hier von Personen im traditionellen Sinne die Rede ist, Dazu gibt es zu viel automatisierte Mail.

          Diesem Header kann nur eine (einzelne) Mail-Adresse übergeben werden,...

          Der Wert des Headers ist also auch syntaktisch eindeutig zu beschreiben und zwar als Mail-Adresse. Das eine Mail-Adresse kein Person ist, sollte klar sein. Was aber meinst Du denn für diesen Header als Wert eintragen zu können oder zu wollen?

          Die Mailadresse, die der Admin als die Mailadresse des Formmailers definiert.
          Denke an Mailmissbrauch. Wenn jemand spammt, so ist, naiv betrachtet, der Sender verantwortlich. Normalerweise sender = From. Bei einem Formmailer aber waltet der Formmailer als Agent und Sender.

          Das hat ja auch praktische Folgen:
          Wie beurteilt sendmail Mailmissbrauch. Es kam schon vor, dass einer meiner Mailadressen geblockt wurde, weil ich etwas intensiv testen liess durch Dritte. Als From hatte ich dort die Autoren, bzw die Account-Mailadresse der Mitglieder eingetragen.

          Kann ich nicht sehen. Dein Pech.

          Oh Forum, du Hort der Individualisten...

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. Re:

            Die frage ist, ob im Falle, dass der Autor seine Mailadresse angibt, und diese somit das From: belegt, im Sender die Mailbox des Formmailers stehen soll.

            Nein, sowohl From- als auch Reply-To-Header sind dafür die richtigen Stellen.

            Hintergrund: Im Falle des SMTP-Versands ist es die Adresse des Formmailers, welche sich authentifizieren muss, falls sendmail nicht genutzt werden kann.

            Für den Fall, dass sendmail nicht zur Verfügung stehen sollte, kommt nur Reply-To in frage.

            Die Mailadresse, die der Admin als die Mailadresse des Formmailers definiert.

            Genau das ist mit "Damit ist der Admin des Scripts gemeint." gemeint. Die gehört also in den Sender- und für den Fall, dass der Nachrichtenverfasser keine Mail-Adresse hinterlässt, (nur) in den From-Header.

            Alle Klarheiten beseitigt?

            Gruß aus Berlin!
            eddi

            1. Für den Fall, dass sendmail nicht zur Verfügung stehen sollte, kommt nur Reply-To in frage.

              Ja, from ist reserviert.
              Bei SMTP muss ich im hello eine Adresse angeben, die der SMTP-Server bestätigen kann. Sie ist also nicht der Autor der Mail (ausser ich schreibe an mich selbst)
              Authentifizierung erfolgt aber nochmals mit einer eigenen Combo.

              Die Mailadresse, die der Admin als die Mailadresse des Formmailers definiert.

              Genau das ist mit "Damit ist der Admin des Scripts gemeint." gemeint. Die gehört also in den Sender- und für den Fall, dass der Nachrichtenverfasser keine Mail-Adresse hinterlässt, (nur) in den From-Header.

              Alle Klarheiten beseitigt?

              Klarheit beseitigt. ;)
              Ich glaube ich lass es mit dem Sender. Die Gefahr, dass ich jetzt noch eine Bug rein baue ist zu gross.

              Nächste Frage: Message-ID
              es besteht keine Pflicht aber doch die stärkste Ermutigung, dass jede Mail eine Message-ID erhält.

              Beispiele aus Thunderbird gesammelt:
                         Message-ID: 4AA56BE3.1070505@orange.fr
              kennt wer? Message-ID: 000001ca28e7$af39aef0$0d00a8c0@roro

              Hier wieder die Frage: mit welcher Adresse ist der rechte Part assoziiert?
              Meine etwas hilflose Interpretation der RFC lautet: Mit dem From:
              für den linken Part kann ich den hex String der $formuserid verwenden.
              für den rechten Part kann ich sha1_hex( $from )

              zusammen ergibt das dann
              $messageid = '<' . $formuserid . '@' . sha1_hex( $from ) . '>';

              Was dabei böse ist:
              Ein messagheader Body soll 76 Zeichen nicht überschreiten.
              sha1_hex hashes sind aber jeweils 40 Zeichen lang.
              Ich verstehe soviel dass die Idee ist, dass der rechte Part den Sender / das From abbilden soll.
              der Linke Teil soll hinreichend eine unique id relativ zur Gruppe aller Mails mit gleichem rechten Teil ergeben.

              Verwende ich rechts sha1_base64
              $messageid = '<' . $formuserid . '@' . sha1_base64 ( $from ) . '>';
              Bytes         1    40             1    27                       1
              dann habe ich insgesamt 70 Bytes.

              Ist das ein zuverlässiges Verfahren?

              mfg Beat

              --
              ><o(((°>           ><o(((°>
                 <°)))o><                     ><o(((°>o
              Der Valigator leibt diese Fische
              1. Re:

                Für den Fall, dass sendmail nicht zur Verfügung stehen sollte, kommt nur Reply-To in frage.

                Ja, from ist reserviert.
                Bei SMTP muss ich im hello eine Adresse angeben, die der SMTP-Server bestätigen kann. Sie ist also nicht der Autor der Mail (ausser ich schreibe an mich selbst)
                Authentifizierung erfolgt aber nochmals mit einer eigenen Combo.

                Übrigens ist auch die alte RFC 2821 ersetzt worden. Das ist jetzt die RFC 5321. SMTP und Mail-Header haben, soweit Du dies beschreibst, erstmal nicht miteinander zu tun. Was SMTP anbelangt, ist es ja nur logisch, sich mit der Mail-Adresse zu authentifizieren, die man auch tatsächlich innehat.

                Nächste Frage: Message-ID
                es besteht keine Pflicht aber doch die stärkste Ermutigung, dass jede Mail eine Message-ID erhält.

                Abs. 3.6.4, ja.

                Hier wieder die Frage: mit welcher Adresse ist der rechte Part assoziiert?

                Though other algorithms will work, it is RECOMMENDED
                   that the right-hand side contain some domain identifier (either of
                   the host itself or otherwise) such that the generator of the message
                   identifier can guarantee the uniqueness of the left-hand side within
                   the scope of that domain.

                Wie zu lesen ist, trifft RFC 5322 'sehr eindeutige' Aussagen dazu. ;)
                Persönlich würde ich den mit dem Formmailer angesteuerten HTTP-Host kanonisch bestimmen und für die rechte Seite heranziehen.; also STRING@exaple.com.

                Meine etwas hilflose Interpretation der RFC lautet: Mit dem From:
                für den linken Part kann ich den hex String der $formuserid verwenden.
                für den rechten Part kann ich sha1_hex( $from )

                zusammen ergibt das dann
                $messageid = '<' . $formuserid . '@' . sha1_hex( $from ) . '>';

                Da für die rechte Seite eine Domain (im Sinne RFC 1035) zu benennen ist, halte ich sha1_hex( $from ) für falsch. Zu bedenken ist auch, dass in Deinem Beispiel $formuserid syntaktisch den selben Regeln wie der Lokale Teil einer Mail-Adresse folgen muss.

                Was dabei böse ist:
                Ein messagheader Body soll 76 Zeichen nicht überschreiten.

                Nebenbei: Eine gültige Mail-Adresse kann maximal 319zeichenlang sein.
                Die harte Obergrenze für eine Headerzeile sind 998 Zeichen (exklusive des Zeilenumbruchs "\r\n"). Ansonsten habe ich keine entsprechende Stelle in RFC 5322 gefunden, die Deine Sorge und insbesondere die Länge von 76 Zeichen stützt.

                sha1_hex hashes sind aber jeweils 40 Zeichen lang.
                Ich verstehe soviel dass die Idee ist, dass der rechte Part den Sender / das From abbilden soll.
                der Linke Teil soll hinreichend eine unique id relativ zur Gruppe aller Mails mit gleichem rechten Teil ergeben.

                Das eigentliche Ziel ist die Schaffung einer (weitestgehenden) unikaten Angabe, anhand der die Mail identifizierbar ist.

                Gruß aus Berlin!
                eddi

                1. Da für die rechte Seite eine Domain (im Sinne RFC 1035) zu benennen ist, halte ich sha1_hex( $from ) für falsch. Zu bedenken ist auch, dass in Deinem Beispiel $formuserid syntaktisch den selben Regeln wie der Lokale Teil einer Mail-Adresse folgen muss.

                  Ein hexstring gehört wohl garantiert in dieses subset.

                  Das eigentliche Ziel ist die Schaffung einer (weitestgehenden) unikaten Angabe, anhand der die Mail identifizierbar ist.

                  Ok, dann
                  $messageid = '<'.$formmailid . '@' . $ENV{SERVER_NAME} .'>';

                  $ENV{SERVER_NAME} kann dabei auch localhost sein.

                  mfg Beat

                  --
                  ><o(((°>           ><o(((°>
                     <°)))o><                     ><o(((°>o
                  Der Valigator leibt diese Fische
                  1. Re:

                    $messageid = '<'.$formmailid . '@' . $ENV{SERVER_NAME} .'>';

                    $ENV{SERVER_NAME} kann dabei auch localhost sein.

                    Ja. Für $formmailid böte sich time stamp in Millisekunden an. Das ist einmalig genug.

                    Gruß aus Berlin!
                    eddi

                    1. Ja. Für $formmailid böte sich time stamp in Millisekunden an. Das ist einmalig genug.

                      Selber schuld. Rede nicht über die Zeit ;)

                      Nächstes Problem.
                      MIME-Date
                      Wie komme ich bei Perl an die Timezone
                      localtime gibt mir als 9. Element ja nur die Sommerzeitverschiebung, aber nicht die Zeitzone an sich.

                      für meine eigenen Formmailer habe ich bisher einfach MEZ und MESZ unterschieden. Das reicht jetzt nicht mehr aus.

                      mfg Beat

                      --
                      ><o(((°>           ><o(((°>
                         <°)))o><                     ><o(((°>o
                      Der Valigator leibt diese Fische
                      1. Hallo,

                        Ja. Für $formmailid böte sich time stamp in Millisekunden an. Das ist einmalig genug.

                        Selber schuld. Rede nicht über die Zeit ;)

                        Okay, aber Du must im Date-Header eh darüber "reden".

                        Nächstes Problem.
                        MIME-Date
                        Wie komme ich bei Perl an die Timezone
                        localtime gibt mir als 9. Element ja nur die Sommerzeitverschiebung, aber nicht die Zeitzone an sich.

                        Das Zeitformat hat sich leicht geändert, ja; Abs. 3.3. Wenn POSIX::strftime() das nicht kann, rufe den UNIX-Befehl date auf.

                        Gruß aus Berlin!
                        eddi

                        1. Wenn POSIX::strftime() das nicht kann, ...

                          cannot! Es wird nur die Abweichung relativ zur normalen Zeitzonenzeit zurückgegeben

                          ... rufe den UNIX-Befehl date auf.

                          Pfui Plattform Dependence.
                          ich könnte gmtime statt localtime verwenden und im Fall von 0000 das "-" voransetzen.
                          -0000
                          deutet (bei Normalzeit) einen Agent an, der nicht in der Lage ist, die Timezone anzuzeigen.

                          mfg Beat

                          --
                          ><o(((°>           ><o(((°>
                             <°)))o><                     ><o(((°>o
                          Der Valigator leibt diese Fische
                          1. Ist nicht perfekt.
                            Berücksichtigt keine Zeitzonen die nicht in ganzen Stunden von GMT verschieden sind.

                            sub __rfc5322_date{  
                                caller eq __PACKAGE__ or die "pivate method call";  
                                my $t=time();  
                                my @gmt = ( gmtime($t) );  
                                my @local = ( localtime($t) );  
                                my $tz = $local[2] - $gmt[2]  
                                      + ( $local[5] <=> $gmt[5]  
                                                    ||  
                                          $local[7] <=> $gmt[7] )  
                                      * 24;  
                                return( sprintf("%s, %2d %s %04d %02d:%02d:%02d %s%02d%s",  
                                        qw(Sun Mon Tue Wed Thu Fri Sat)[ $local[6] ],  
                                        $local[3],  
                                        qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[ $local[4] ],  
                                        $local[5] + 1900,  
                                        $local[2], $local[1], $local[0],  
                                        ( $tz > 0 ? '+' : '-' ),  
                                        int($tz),  
                                        '00',  
                                    )  
                                );  
                            }  
                            
                            

                            mfg Beat

                            --
                            ><o(((°>           ><o(((°>
                               <°)))o><                     ><o(((°>o
                            Der Valigator leibt diese Fische
                          2. Re:

                            ... rufe den UNIX-Befehl date auf.

                            Pfui Plattform Dependence.

                            Veto! Was kann ich dafür, dass Windows sich nicht an die Anforderungen an eine Plattform™ nach POSIX hält? ;-P

                            Gruß aus Berlin!
                            eddi