Mail Header

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mail Header

    Hallo zusammen

    Ich bräuchte eure hilfe. Es geht darum wegem dem Mail Header. Komme leider nicht mehr weiter. Es gibt 2 Punkten.



    Punkt 1:


    Das passiert nur bei GMX. Das a) der absender nicht angezeigt wird und b) der header im Mail Body dargestellt wird.
    Bei Hotmail oder jegliche andere Mailprogramme wird dies ohne Problem dargestellt.

    Wo liegt hier der Hund begraben?


    Punkt 2:
    Unser Kunde meldete folgendes:

    Im Header des E- Mails findet sich folgende Zeile: "X-Amavis-Alert: BAD HEADER Non-encoded 8-bit data (char FC hex) in message header" deshalb im Anhang das besagte E-Mail zur Analyse.
    Was bedeutet dies?

    Hier die Mail Funktion:

    PHP-Code:

    function mailsender($title,$messages,$receiver,$extends=1)
    {
        global 
    $config;
        
    $mail_seperator="-----------------";


        if (
    $extends==1$headers .= "MIME-Version: 1.0\r\n";
        
    $headers .= "X-Sender: IMMOMARKT <".$config['site_email'].">\n";
        
    $headers .= "From: IMMOMARKT <".$config['site_email'].">\n";
        
    $headers .= "Reply-To: IMMOMARKT <".$config['site_email'].">\n";
        
    $headers .= "Return-Path: IMMOMARKT <".$config['site_email'].">\n";



        if (
    $extends==1$headers .= "Content-Type: multipart/mixed;\n\tboundary=$mail_seperator\n";

        if (
    $extends==1){
            
    $message .="\n--$mail_seperator\n";
            
    $message .="Content-transfer-encoding: 8BIT\r\n";
            
    $message .="Content-type: text/plain\n\n";
        }
        
    $message .= $messages."\n";

        if (
    mail($receiver,$title,$message,$headers)) $mailer true;
        else 
    $mailer false;

        return 
    $mailer;

    Danke für eure Hilfe.
    MFG CHRIS
    FlowFact AG

  • #2
    So mal ins blaue geschossen:
    Der letzte Header sollte/muss mit einem doppelten CRLF versehen werden. Sonst können gewisse Mailprogs das Ende des Headerbereichs nicht feststellen.
    Ausserdem solltest du dich für eine Version entscheiden
    Entweder \n oder \r\n, aber nicht beides mischen, das kommt bestimmt nicht gut.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Hi Tobi

      Danke für deine Hilfe.

      Das hat mir jetzt ein wenig geholfen. Aber...



      Jetzt wird der Body nicht mehr angezeigt. ^^
      --- BLACKOUT ---

      PHP-Code:


      function mailsender($title,$messages,$receiver,$extends=1)
      {
          global 
      $config;
          
      $mail_seperator="-----------------";


          if (
      $extends==1$headers .= "MIME-Version: 1.0\n";
          
      $headers .= "X-Sender: IMMOMARKT <".$config['site_email'].">\n";
          
      $headers .= "From: IMMOMARKT <".$config['site_email'].">\n";
          
      $headers .= "Reply-To: IMMOMARKT <".$config['site_email'].">\n";
          
      $headers .= "Return-Path: IMMOMARKT <".$config['site_email'].">\n";



          if (
      $extends==1$headers .= "Content-Type: multipart/mixed;\nboundary=$mail_seperator\n";

          if (
      $extends==1){
              
      $message .="\n--$mail_seperator\n";
              
      $message .="Content-transfer-encoding: 8BIT\n";
              
      $message .="Content-type: text/plain\n\n";
          }
          
      $message .= $messages."\n\n";

          if (
      mail($receiver,$title,$message,$headers)) $mailer true;
          else 
      $mailer false;

          return 
      $mailer;


      Und was sagst du zum Punkt 2?
      MFG CHRIS
      FlowFact AG

      Kommentar


      • #4
        Also ich sehe beim letzten $headers immer nur einen CRLF
        PHP-Code:
        if ($extends==1$headers .= "Content-Type: multipart/mixed;\nboundary=$mail_seperator\n\n"
        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          @jahlives: \r\n wäre RFC-konform.
          \n funktioniert nur, weil so gut wie alle MDAs die RFC-Korrektur \n -> \r\n vornehmen. Der Threadstarter sollte sich also nicht "entscheiden" sondern "zusammenreißen".

          Zum zweiten Punkt:
          "X-Amavis-Alert: BAD HEADER Non-encoded 8-bit data (char FC hex) in message header"
          sagt es doch schon. Der Virenscanner hat festgestellt, dass die Mail zwar von sich behauptet, sie wäre "Content-transfer-encoding: 8BIT", dann aber doch "non-encoded" Daten im Header hat.

          xFC = 'f' = \u0066

          Kommentar


          • #6
            Leider immernoch den gleichen Effekt.

            Hier der aktuellen Stand:


            PHP-Code:

            function mailsender($title,$messages,$receiver,$extends=1)
            {
                global 
            $config;
                
            $mail_seperator="-----------------";


                if (
            $extends==1$headers .= "MIME-Version: 1.0\n";
                
            $headers .= "X-Sender: IMMOMARKT <".$config['site_email'].">\n";
                
            $headers .= "From: IMMOMARKT <".$config['site_email'].">\n";
                
            $headers .= "Reply-To: IMMOMARKT <".$config['site_email'].">\n";
                
            $headers .= "Return-Path: IMMOMARKT <".$config['site_email'].">\n";



                if (
            $extends==1$headers .= "Content-Type: multipart/mixed;\nboundary=$mail_seperator\n\n";

                if (
            $extends==1){
                    
            $message .="\n--$mail_seperator";
                    
            $message .="Content-transfer-encoding: 8BIT\n";
                    
            $message .="Content-type: text/plain\n\n";
                }
                
            $message .= $messages."\n\n";


                if (
            mail($receiver,$title,$message,$headers)) $mailer true;
                else 
            $mailer false;

                return 
            $mailer;

            MFG CHRIS
            FlowFact AG

            Kommentar


            • #7
              Probier mal onemorenerd's Version aus. Ist gemäss RFC korrekt. Und mach den LF beim ersten $message weg.

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Der aktuelle Stand ist auch immernoch der gleiche Bockmist.

                Nochmal in aller Deutlichkeit:
                - Verwende ausschließlich \r\n als Zeilenumbruch.
                - Schließe die Header mit einer leeren Zeile ("\r\n") ab.
                - Encode konsequent in 8-bit oder korrigiere den CTE-Header.

                Kommentar


                • #9
                  Hach, bin echt am verzfeifeln jetzt.

                  PHP-Code:
                  function mailsender($title,$messages,$receiver,$extends=1)
                  {
                      global 
                  $config;
                      
                  $mail_seperator="-----------------";


                      
                      
                  $headers .= "From: IMMOMARKT <".$config['site_email'].">\n";
                      if (
                  $extends==1$headers .= "MIME-Version: 1.0\n";
                      
                  $headers .= "Reply-To: IMMOMARKT <".$config['site_email'].">\n";
                      
                  $headers .= "Return-Path: IMMOMARKT <".$config['site_email'].">\n";
                      
                  $headers .= "X-Sender: IMMOMARKT <".$config['site_email'].">\n";
                      
                  $header     .=    "Content-Transfer-Encoding: 8BIT\r\n";
                      
                  $header     .=    "Content-type: text/html\r\n";
                      
                  $header     .=    "Content-type: inline\r\n";
                      
                  $header     .=    "Content-Transfer-Encoding: quoted-printable\r\n\tcharset=\"iso-8859-1\"\r\n";
                      
                  $header    .=    "Content-Type: multipart/mixed;\r\n\tboundary=$mail_seperator\r\n\n";
                      
                      
                  $message .= $messages."\r\n\r\n";

                      if (
                  mail($receiver,$title,$message,$headers)) $mailer true;
                      else 
                  $mailer false;

                      return 
                  $mailer;


                  die erste vier zeilen kann ich nicht mit "\r\n" abschliessen. Denn wenn ich es mache, geht gar nix mehr. Abesender ist Anonymus und so spässe.

                  Wenn ich es genau so wie oben machen dann ist im produzierten header so:

                  Return-Path: <stgallen@n-sa.ch>
                  X-Flags: 1001
                  Delivered-To: GMX delivery to hoatran@gmx.ch
                  Received: (qmail invoked by alias); 03 Aug 2006 13:32:55 -0000
                  Received: from ipx10599.ipxserver.de (EHLO ipx10599.ipxserver.de) [80.190.251.106]
                  by mx0.gmx.net (mx047) with SMTP; 03 Aug 2006 15:32:55 +0200
                  Received: (qmail 16885 invoked by uid 30); 2 Aug 2006 17:46:19 +0200
                  Date: 2 Aug 2006 17:46:19 +0200
                  Message-ID: <20060802154619.16883.qmail@ipx10599.ipxserver.de>
                  To: hoatran@gmx.ch
                  Subject: Aktivierungsmail für das Konto hoatran@gmx.ch
                  From: IMMOMARKT <stgallen@n-sa.ch>
                  MIME-Version: 1.0
                  Reply-To: IMMOMARKT <stgallen@n-sa.ch>
                  X-Sender: IMMOMARKT <stgallen@n-sa.ch>
                  X-GMX-Antivirus: -1 (not scanned, may not use virus scanner)
                  X-GMX-Antispam: 0 (Mail was not recognized as spam)
                  X-GMX-UID: MMPkcOsPRkkeK6IXyWVqVqNmdWkvKFP4
                  Also nichts mit Content zu sehen, dem zu folge wird der body zwar angezeigt, aber die umlaute werden nicht richtig dargestellt.
                  MFG CHRIS
                  FlowFact AG

                  Kommentar


                  • #10
                    Im Header darf nur 7bit gesendet werden.

                    Mit Content-Transfer-Encoding gibst du nur das Encfür den Inhalt an.

                    Du verwendest in deinem Subject ein Zeichen das nicht 7bit ist (ü in für) - somit ist der Header nicht valide.

                    Behandel das Subject mal hiermit:
                    Code:
                    function quoted_printable_encode( $sString, $charset = 'iso-8859-1' ) {
                        $aMatch = array();
                        if(preg_match('/[^\x21-\x3C\x3E-\x7E\x09\x20]/e', $sString)){
                            $sString = preg_replace( '/[^\x21-\x3C\x3E-\x7E\x09\x20]/e', 
                                                    'strtoupper(sprintf( "=%02x", ord ( "$0" ) )) ;',
                                                    $sString );
                            preg_match_all( '/.{1,73}([^=]{0,3})?/', $sString, $aMatch );
                            return '=?'.$charset.'?Q?'.implode( '=' . CR, $aMatch[0]).'?=';
                        }else{
                            return $sString;
                        }
                    }
                    Nicht bunt, weil sonst die \'s verschluckt werden...
                    Zuletzt geändert von prego; 03.08.2006, 16:43.

                    Kommentar


                    • #11
                      Habe dies jetzt auf 7BIT geändert und den Subject durch den Parser laufen lassen.

                      1. Der Subject in der Mailliste wird richtig angezeigt, hingegen in der Mailanzeige nicht

                      2. Auch wenn ich jetzt auf 7BIT geändert habe, keine verbesserung.



                      Return-Path: <stgallen@n-sa.ch>
                      X-Flags: 1001
                      Delivered-To: GMX delivery to hoatran@gmx.ch
                      Received: (qmail invoked by alias); 03 Aug 2006 15:00:08 -0000
                      Received: from ipx10599.ipxserver.de (EHLO ipx10599.ipxserver.de) [80.190.251.106]
                      by mx0.gmx.net (mx066) with SMTP; 03 Aug 2006 17:00:08 +0200
                      Received: (qmail 17156 invoked by uid 30); 2 Aug 2006 19:13:28 +0200
                      Date: 2 Aug 2006 19:13:28 +0200
                      Message-ID: <20060802171328.17154.qmail@ipx10599.ipxserver.de>
                      To: hoatran@gmx.ch
                      Subject: =?iso-8859-1?Q?Aktivierungsmail f=FCr das Konto hoatran@gmx.ch?=
                      From: IMMOMARKT <stgallen@n-sa.ch>
                      MIME-Version: 1.0
                      Reply-To: IMMOMARKT <stgallen@n-sa.ch>
                      X-Sender: IMMOMARKT <stgallen@n-sa.ch>
                      X-GMX-Antivirus: -1 (not scanned, may not use virus scanner)
                      X-GMX-Antispam: 0 (Mail was not recognized as spam)
                      X-GMX-UID: L2qgZMAkeSE5CrcO0XUhW0V2IGRvb8B+


                      MFG CHRIS
                      FlowFact AG

                      Kommentar


                      • #12
                        Das Problem mit der GMX Detailanzeige hab ich auch noch nicht gelöst. Setz ich mich nächste Woche dran.

                        Welche Probleme hast du jetzt sonst noch?

                        Kommentar


                        • #13
                          @chris
                          Also bei deinem letzten Code Post steht immer noch Bockmist drinne. Du mischt immer noch \r\n und \n ausserdem sehe ich in einem Header ein \t was auch nicht gut sein dürfte.
                          Ich habe bei meinem Mailscript keine Probs mit GMX. Die Mail kommen an und sehen gut aus. Nur das Anzeigen eines Bildes inline funzt ned, sondern es wird immer als Attachment angezeigt.

                          Gruss

                          tobi
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #14
                            Hallo

                            Danke für deine Antwort.

                            Wie ich dort geschrieben habe, das ich die erste vier Zeile bewusst auf "\n" beschränkt habe. Wenn ich hier jetzt "\r\n" das gar nichts mehr funktioniert.

                            1. Kein Absender wird angezeigt
                            2. Ein Teil vom Header wird im Body angezeigt
                            3. Umlaute funktioniert nicht (was jetzt auch nicht funktioniert)
                            MFG CHRIS
                            FlowFact AG

                            Kommentar


                            • #15
                              Die \r\n sind aber nach RFC und jeder Mailserver muss diese beherrschen. \n kann funktionieren, muss aber nicht.
                              Irgendwie ist da sonst noch der Wurm drinne.
                              Nach MIME Version würde sich ein \r\n auch nicht schlecht machen.
                              Wie gesagt \r\n ist korrekt. Mach's mal so. Ich sollte so nach 2 Uhr wieder zu Hause sein und werde mir dann mal den Quellcode meines funzenden Mailscriptes anschauen und mit deinem vergleichen.
                              Ggf hat du in deinem Quellcode auch noch \t in den headern. Auch wenn du es nicht explizit schreibst so sollte ein
                              Code:
                               "         irgendeinheader"
                              trotzdem \t's erzeugen.
                              Ich melde mich wieder...

                              Gruss

                              tobi
                              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                              Kommentar

                              Lädt...
                              X