Companerosmatt: form action subject

Hallo zusammen,

dies ist mein erster Beitrag und ich hoffe sehr, dass ihr mir in diesem Fall weiterhelfen könnt. Und zwar möchte ich, dass die Betreffzeile mit Vor und Nachnamen bestückt wird:

<form action="mailto:x.y@test.de?subject=Test" method="post" enctype="text/plain">

Diese Informationen sollten optimalerweise im Betreff stehen (Vorname+ Nachname):

<!--Vor und Nachname-->
            <tr>
                <td>Vorname: </td>
                <td><input type="text" name="Vorname" required></td>
                <td>Nachname: </td>
                <td><input type="text" name="Nachname" required></td>
            </tr>

Folgendes habe ich herausgefunden - bastel ich

<form action="mailto:x.y@test.de?subject="Vorname method="post" enctype="text/plain"> um, spuckt er mir zumindest schon einmal den richtigen Vornamen im Betreff aus, wo das "&body" herkommt, kann ich mir allerdings nicht erklären...

Habt ihr einen heißen Tipp für mich?

Gruß Mattes &body=Vorname=s

  1. @@Companerosmatt

    Folgendes habe ich herausgefunden - bastel ich

    Womit bastelst du da? JavaScript? PHP?

    <form action="mailto:x.y@test.de?subject="Vorname method="post" enctype="text/plain"> um, spuckt er mir zumindest schon einmal den richtigen Vornamen im Betreff aus

    Das kann ich mir bei dem gezeigten Code nicht vorstellen.

    Eins kann ich dir aber schon mit Sicherheit sagen: Deinen Eingabefeldern fehlt die Beschriftung.

    Du musste deinen Eingabefeldern IDs verpassen und und in die tds noch labels mit for-Attributen mit den entsprechenden IDs einbauen:

    <!--Vor und Nachname-->
    <tr>
      <td><label for="Vorname">Vorname:</label></td>
      <td><input id="Vorname" name="Vorname" required></td>
      <td><label for="Nachname">Nachname:</label></td>
      <td><input id="Nachname" name="Nachname" required></td>
    </tr>
    

    (type="text" ist default; kann weggelassen werden.)

    Noch besser allerdings: Du verzichtest ganz auf die Tabelle. Die Beschriftung sollte immer über dem Eingabefeld stehen, nicht daneben.

    🖖 Живіть довго і процвітайте

    --
    When the power of love overcomes the love of power the world will know peace.
    — Jimi Hendrix
    1. Hallo,

      Noch besser allerdings: Du verzichtest ganz auf die Tabelle. Die Beschriftung sollte immer über dem Eingabefeld stehen, nicht daneben.

      du hast noch vergessen darauf hinzuweisen, dass man bitte nicht die Domain der Stiftung Warentest als Platzhalter verwenden sollte.

      Einen schönen Tag noch
       Martin

      --
      Windows ist manchmal echt witzig. Vor einiger Zeit erlebt:
      "Die Problembehandlung kann aufgrund eines Problems nicht gestartet werden."
      1. @@Der Martin

        du hast noch vergessen darauf hinzuweisen, dass man bitte nicht die Domain der Stiftung Warentest als Platzhalter verwenden sollte.

        In. Der. Tat.

        Aufgefallen war’s mir. Ich hatte es tatsächlich vergessen zu erwähnen.

        Aber du wiederum hättest auch gleich auf RFC 2606 verlinken können.

        🖖 Живіть довго і процвітайте

        --
        When the power of love overcomes the love of power the world will know peace.
        — Jimi Hendrix
  2. Hallo Companerosmatt,

    abgesehen von den Grundsatzüberlegungen Gunnars, die mit deinem Problem nicht direkt zu tun haben, ist dies hier

    <form action="mailto:x.y@test.de?subject="Vorname method="post" enctype="text/plain">
    

    inkorrekt. Vorname steht außerhalb der Anführungszeichen und kann vom Browser nicht verarbeitet werden.

    Das Senden eines Formulars an ein Mailprogramm mittels mailto: ist aus mehreren Gründen problematisch.

    • Du musst die Empfänger-URL verschleiern, sonst wird sie von Spammern abgegriffen
    • Leerstellen im Betreff oder Inhalt werden vom Browser als + codiert und nicht als %20 - wodurch sie im Mailprogramm als + erscheinen. Zumindest ist das bei der Kombi Google Chrome und Microsoft Outlook so. Um das zu verhindern, müsstest Du die Feldinhalte von Hand codieren (mit Javascript, encodeURI Funktion - die erzeugt immer %20 für Spaces) und das action Attribut des Forms damit belegen. Und es muss ein GET Request sein, kein POST. Du kannst zwar auch ein Form an das Mailprogramm posten, aber dann hast Du wieder das "+ für Space" Problem.

    Zumindest bei mir in Chrome ist es darüber hinaus so, dass der Browser bei einer mailto URL keinen echten POST durchführt. Es steht zwar "POST" im Netzwerktrace der Entwicklerwerkzeugen, aber die Header-Informationen sehen anders aus UND er schreibt die Feldinhalte als body=... in die URL - sendet also keinen Formular-Inhalt gemäß der POST Definition. Das ist die Herkunft deines body. Es sieht so aus, als müsse mailto immer als GET gesendet werden, um zu funktionieren.

    Wenn's einen Trick gibt, die Kodierung des Space als "+" zu vermeiden, wird es natürlich einfacher. Aber ich habe die üblichen enctypes am Form durchprobiert, und es kommt immer das +.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hi,

      Das Senden eines Formulars an ein Mailprogramm mittels mailto: ist aus mehreren Gründen problematisch.

      • Du musst die Empfänger-URL verschleiern, sonst wird sie von Spammern abgegriffen
      • Leerstellen im Betreff oder Inhalt werden vom Browser als + codiert und nicht als %20 - wodurch sie im Mailprogramm als + erscheinen. Zumindest ist das bei der Kombi Google Chrome und Microsoft Outlook so. Um das zu verhindern, müsstest Du die Feldinhalte von Hand codieren (mit Javascript, encodeURI Funktion - die erzeugt immer %20 für Spaces) und das action Attribut des Forms damit belegen. Und es muss ein GET Request sein, kein POST. Du kannst zwar auch ein Form an das Mailprogramm posten, aber dann hast Du wieder das "+ für Space" Problem.
      • der Client muß über ein Mail-Programm verfügen (und selbiges muß korrekt eingerichtet sein). Ist nicht immer der Fall - ich kenn mehrere Leute, die haben auf dem Smartphone keinen Mail-Client ...

      cu,
      Andreas a/k/a MudGuard