MushaX: mail(): Mails landen im Spam (BAD_ENC_HEADER), was ist falsch?

Hallo zusammen,

hab mich jetzt schon stunden mit google und diversen Foren beschäftigt, aber ich komm nicht dahinter. Eine Bestätigungsemail, die mit mail() versandt wird, landet bei gmx immer im Spam. Nach versuchen mit meinem eigenen Server hab ich nun, denke ich, den Hauptgrund gefunden:

"BAD_ENC_HEADER Message has bad MIME encoding in the header"

Dieser Punkt verschafft mir die meisten Spampunkte. Konnte zu dieser Regel aber nichts näheres finden. Der Header der Mail sieht so aus:

$header = 'From: '.$_POST[email].' <'.$_POST[email].'>' . "\r\n";
$header.= 'MIME-Version: 1.0' . "\r\n";
$header.= 'X-mailer: php/' . phpversion() . "\r\n";
$header.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$header.= 'Content-Transfer-Encoding: 8bit' . "\r\n\r\n";

Habe beim Content-Transfer-Encoding schon 7bit und quoted-printable ausprobiert, aber das scheints nicht zu sein. Jemand eine Idee? Danke.

  1. $header.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

    Ist meines Wissens falsch.
    entweder multipart oder text/plain

    mfg Beat

    --
                     /|
      <°)))o><      / |    /|
                ---- _|___/ |     ><o(((°>
               OvVVvO    __ |         ><o(((°>
    <°)))o><  /v    v\/  |
     <°)))o>< ^    ^/_/_         ><o(((°>
               ^^^^/___/
    ><o(((°>    ----       ><o(((°>
       <°)))o><                      ><o(((°>o
    1. $header.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

      Ist meines Wissens falsch.
      entweder multipart oder text/plain

      mfg Beat

      Also multipart/mixed hab ich schon ausprobiert, dann kommt die Mail als Text an und die Spam Meldung "BAD_ENC_HEADER" ist immer noch vorhanden. text/plain ist ebenso text und laut zig Seiten im Netz wäre ich mit html/text für eine html Mail schon gar nicht so falsch.

      1. Also multipart/mixed hab ich schon ausprobiert, dann kommt die Mail als Text an und die Spam Meldung "BAD_ENC_HEADER" ist immer noch vorhanden. text/plain ist ebenso text und laut zig Seiten im Netz wäre ich mit html/text für eine html Mail schon gar nicht so falsch.

        Kann mein Mailprogramm denn HTML? Das wäre mir mal was ganz neues.

        mfg Beat

        --
                         /|
          <°)))o><      / |    /|
                    ---- _|___/ |     ><o(((°>
                   OvVVvO    __ |         ><o(((°>
        <°)))o><  /v    v\/  |
         <°)))o>< ^    ^/_/_         ><o(((°>
                   ^^^^/___/
        ><o(((°>    ----       ><o(((°>
           <°)))o><                      ><o(((°>o
    2. Yerf!

      $header.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

      Ist meines Wissens falsch.
      entweder multipart oder text/plain

      Nicht falsch, nur ungünstig. HTML-only Mails bekommen auch ne Spam-Strafe.

      Gruß,

      Harlequin

      --
      <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  2. echo $begrüßung;

    "BAD_ENC_HEADER Message has bad MIME encoding in the header"
    $header = 'From: '.$_POST[email].' <'.$_POST[email].'>' . "\r\n";
    $header.= 'MIME-Version: 1.0' . "\r\n";
    $header.= 'X-mailer: php/' . phpversion() . "\r\n";
    $header.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $header.= 'Content-Transfer-Encoding: 8bit' . "\r\n\r\n";

    Da fehlen noch ein paar Header, beispielsweise To und vor allem Subject (was eine Spezialbehandlung benötigt).

    $header = 'From: '.$_POST[email].' <'.$_POST[email].'>' . "\r\n";

    Wenn der anzuzeigende Name gleich der EMail-Adresse ist, kannst su dir diese Dopplung sparen. Hast du außerdem sichergestellt, dass man diese Zeile nicht zur Header-Injection missbrauchen kann? Sprich, dass bei Zeilenumbruchszeichen in $_POST['email'] ('email' bitte in Anführungszeichen setzen) beispielsweise ein Versand wegen Spam-Versuch abgelehnt wird?

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      "BAD_ENC_HEADER Message has bad MIME encoding in the header"
      $header = 'From: '.$_POST[email].' <'.$_POST[email].'>' . "\r\n";
      $header.= 'MIME-Version: 1.0' . "\r\n";
      $header.= 'X-mailer: php/' . phpversion() . "\r\n";
      $header.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
      $header.= 'Content-Transfer-Encoding: 8bit' . "\r\n\r\n";

      Da fehlen noch ein paar Header, beispielsweise To und vor allem Subject (was eine Spezialbehandlung benötigt).

      $header = 'From: '.$_POST[email].' <'.$_POST[email].'>' . "\r\n";

      Wenn der anzuzeigende Name gleich der EMail-Adresse ist, kannst su dir diese Dopplung sparen. Hast du außerdem sichergestellt, dass man diese Zeile nicht zur Header-Injection missbrauchen kann? Sprich, dass bei Zeilenumbruchszeichen in $_POST['email'] ('email' bitte in Anführungszeichen setzen) beispielsweise ein Versand wegen Spam-Versuch abgelehnt wird?

      echo "$verabschiedung $name";

      Hi,

      also das Subject hab ich als extra Variable, lautet:

      $betreff2 = '=?ISO-8859-1?Q?Ihre Buchungsbest=E4tigung?=';

      Denke das sollte passen. Hab heute diese Buchungsbestätigung als Text E-Mail umgeschrieben und dann den Header so angepasst:

      $header = 'From: '.$_POST[email].' <'.$_POST[email].'>' . "\n";
       $header.= 'MIME-Version: 1.0' . "\n";
       $header.= 'Content-type: text/plain; charset="iso-8859-1"' . "\n";
       $header.= 'Content-Transfer-Encoding: quoted-printable' . "\n\n";

      Und tadaaaa, ich hab immer noch das Spam-Merkmal "BAD_ENC_HEADER". Langsam bekomm ich die Kriese. Das mit dem "From:" muss ich noch ändern, danke für den Hinweis. Was könnte das noch sein?

      Danke