multipart mails korrupt

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

  • multipart mails korrupt

    hallo,

    ich muss gerade eine email-klasse umbauen, die mich zur verzweiflung bringt. eine daraus erzeugte mail sieht so aus:

    Code:
    From: ICH<XXX@XXX>
    Cc: YYY@YYY
    Bcc: AAA@AAA
    MIME-Version: 1.0
    Content-Type: multipart/mixed; boundary="26D74685418CA1F2FD21C252ED647C94"
    --26D74685418CA1F2FD21C252ED647C94
    Content-Type: multipart/alternative; boundary="CAB1734DC5ED696706168D8AD97E0D5C"
    --CAB1734DC5ED696706168D8AD97E0D5C
    Content-Type: text/plain; charset="ISO-8859-1"
    Content-Transfer-Encoding: quoted-printable
    Hier kommt der Text hinneue zeilen
    --CAB1734DC5ED696706168D8AD97E0D5C
    Content-Type: text/html; charset="ISO-8859-1"
    Content-Transfer-Encoding: quoted-printable
    <html><body>Hier kommt der Text hin<br><br>neue zeilen</body></html>
    --CAB1734DC5ED696706168D8AD97E0D5C--
    --26D74685418CA1F2FD21C252ED647C94
    Content-Type: application/octet-stream; name="ABC"
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment; filename="ABC"
    PD8Kc2Vzc2lvbl9uYW1lKCdzJyk7CnNlc3Npb25fc3RhcnQoKTsKCgoKZGllKCdXYXJ0dW5n
    .
    .
    .
    aXNzZXQoJCQxKSkgPyAkJDEgOiAiIicsICR0cGwwMSk7CgoKPz4K
    --26D74685418CA1F2FD21C252ED647C94--
    die mail kommt an, aber
    - der text ist futsch
    - das attachment ist nicht lesbar

    was übersehe ich hier?
    Kissolino.com

  • #2
    der code dazu wäre wohl noch interessant um zu sehen wo der fehler liegt

    Kommentar


    • #3
      der code entspricht weitestgehend der mail-klasse von günne => codeschnipsel.

      die beiden funktionen sehen so aus:
      PHP-Code:
      function text($text)
              {
                  
      $this->textheader .= 'Content-Type: multipart/alternative; boundary="'.$this->textboundary.'"'."\n";
                  
      $this->textheader .= '--'.$this->textboundary."\n";
                  
      $this->textheader .= 'Content-Type: text/plain; charset="'.$this->charset.'"'."\n";
                  
      $this->textheader .= 'Content-Transfer-Encoding: quoted-printable'."\n";
                  
      $this->textheader .= strip_tags($text)."\n";
                  
      $this->textheader .= '--'.$this->textboundary."\n";
                  
      $this->textheader .= 'Content-Type: text/html; charset="'.$this->charset.'"'."\n";
                  
      $this->textheader .= 'Content-Transfer-Encoding: quoted-printable'."\n";
                  
      $this->textheader .= '<html><body>'.$text.'</body></html>'."\n";
                  
      $this->textheader .= '--'.$this->textboundary.'--'."\n";
              }

              
      // Funktion zum anhängen für Attachments in der Email
              
      function attachment($datei)
              {
                  
      // Überprüfen ob File Existiert
                  
      if(is_file($datei))
                  {
                      
      // Header für Attachment erzeugen
                      
      $attachment_header '--'.$this->emailboundary."\n" ;
                      
      $attachment_header .= 'Content-Type: application/octet-stream; name="'.basename($datei).'"'."\n";
                      
      $attachment_header .= 'Content-Transfer-Encoding: base64'."\n";
                      
      $attachment_header .= 'Content-Disposition: attachment; filename="'.basename($datei).'"'."\n";

                      
      // Daten der Datei einlesen, in das BASE64 Format formatieren und auf max 72 Zeichen pro Zeile
                      // aufteilen
                      
      $file['inhalt'] = fread(fopen($datei,"rb"),filesize($datei));
                      
      $file['inhalt'] = base64_encode($file['inhalt']);
                      
      $file['inhalt'] = chunk_split($file['inhalt'],72);

                      
      // Attachment mit Header in der Klassenvariable speichern
                      
      $this->attachment[] = $attachment_header.$file['inhalt'];
                  }
                  else
                  {
                      die(
      'Die Datei "'.$datei.'" existiert nicht...'."\n");
                  }
              } 
      die gesamte klasse lief bisher fehlerfrei. bis heute bei hosteurope die daumenschraube beim mailversand angezogen wurde. änderung zum script-zustand von gestern: \\n\\n wurden durch \\n ersetzt. seither kommen die mails zwar an, sind aber mehr oder weniger schrott.

      deshalb meine eingangsfrage ohne code
      Kissolino.com

      Kommentar


      • #4
        Moin Wurzel,

        änderung zum script-zustand von gestern: \\n\\n wurden durch \\n ersetzt.
        Welche Stellen betrifft das?

        Kommentar


        • #5
          EDIT:
          Arks, sorry - versehentlich editiert, statt zu antworten ...
          wahsaga

          Zuletzt geändert von wahsaga; 27.06.2007, 15:14.
          Kissolino.com

          Kommentar


          • #6
            Wieso verwendest du denn \n\n?
            Einzelne Header-Zeilen werden doch in einer E-Mail durch \r\n abgetrennt.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Wurzel, was geht denn mit dir? Fehlermeldung in Code-Tags...

              Kommentar


              • #8
                @wahsaga
                frag mich mal was leichteres. ich hab das script das letzte mal vor ~ 2 jahren angefasst, danach nur noch benutzt.

                @Tobiaz
                der code aus meinem 2. posting liefert das ergebnis aus meinem 1. post (das encodierte attachment geraffel ist nat. gekürzt) ... es passiert damit folgendes:
                - kein eintrag im errorlog
                - mail kommt an
                - mail kaputt

                wenn es jetzt am \r liegen sollte, frag ich mich, warum das script bisher geklappt hat und auf unterschiedlichen servern (die nicht bei he stehen) weiterhin so funktioniert.
                Kissolino.com

                Kommentar


                • #9
                  Das ist schon plausibel. sind halt die fehlertoleranzen. Ich wette 25% der codes hier im forum bestehen aus \n\n (allerdings auch teilweise nur aus \n)

                  Aber richtig ist es, wie wahsaga geschrieben hat.

                  Kommentar


                  • #10
                    Das mag halt bisher vom MTA toleriert worden sein, und doppelte \n hat er dabei vermutlich in einen Umbruch umgewandelt.

                    Nach dem Update mag er das jetzt aber nicht mehr akzeptieren:
                    double newline in headers, possible injection, mail dropped
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      so, da bin ich wieder.

                      also es klappt nichts, nicht mal die tür.

                      \n durch \r\n ersetzt. mail kommt nachwievor an und ist nachwievor schrott. egal, ob mit oder ohne attachment. die mail ist leer obwohl der quelltext was anderes sagt.
                      Code:
                      From - Wed Jun 27 16:44:35 2007
                      X-Account-Key: account5
                      X-UIDL: c930869b9d26c22b1166f7516a8692b5
                      X-Mozilla-Status: 0001
                      X-Mozilla-Status2: 10000000
                      X-Envelope-From: <.................>
                      X-Envelope-To: <..................>
                      X-Delivery-Time: 1182955152
                      Return-Path: <.........................>
                      Received: from selenium.webpack.hosteurope.de ([..................])
                      	by mailin.webmailer.de (reg mi36) (RZmta 7.6)
                      	with ESMTP id A018ecj5REZ1gh for <.....................>;
                      	Wed, 27 Jun 2007 16:39:12 +0200 (MEST)
                      Received: from nobody by selenium.webpack.hosteurope.de running ExIM using local
                      	id 1I3Yfn-0001eP-JK; Wed, 27 Jun 2007 16:39:11 +0200
                      To: ...........................
                      Subject: Hier kommt der Betreff rein
                      X-PHP-Script: ................../test.php for ........................
                      From: ICH<......................>
                      MIME-Version: 1.0
                      Content-Type: multipart/mixed; boundary="96BC45076B8F860427531A0B64338541"
                      Message-Id: <E1I3Yfn-0001eP-JK@selenium.webpack.hosteurope.de>
                      Date: Wed, 27 Jun 2007 16:39:11 +0200
                      X-bounce-key: webpack.hosteurope.de;....................;1182955151;18ccf0b0;
                      X-RZG-CLASS-ID: mi
                      
                      --96BC45076B8F860427531A0B64338541
                      Content-Type: multipart/alternative; boundary="E04CE74220C241ABEC09BFAE966D301C"
                      --E04CE74220C241ABEC09BFAE966D301C
                      Content-Type: text/plain; charset="ISO-8859-1"
                      Content-Transfer-Encoding: quoted-printable
                      Hier kommt der Text hinneue zeilen
                      --E04CE74220C241ABEC09BFAE966D301C
                      Content-Type: text/html; charset="ISO-8859-1"
                      Content-Transfer-Encoding: quoted-printable
                      <html><body>Hier kommt der Text hin<br><br>neue zeilen</body></html>
                      --E04CE74220C241ABEC09BFAE966D301C--
                      --96BC45076B8F860427531A0B64338541
                      Content-Type: application/octet-stream; name="......"
                      Content-Transfer-Encoding: base64
                      Content-Disposition: attachment; filename="....."
                      PD8Kc2Vzc2lvbl9uYW1lKCdzJyk7CnNlc3Npb25fc3RhcnQoKTsKCgoKZGllKCdXYXJ0dW5n
                      .
                      .
                      .
                      aXNzZXQoJCQxKSkgPyAkJDEgOiAiIicsICR0cGwwMSk7CgoKPz4K
                      --96BC45076B8F860427531A0B64338541--
                      thunderbird zeigt zwar ein attachment an, aber nur in der mailübersicht. any ideas?

                      PS: was die da installiert haben ist: http://www.hardened-php.net/suhosin/
                      Kissolino.com

                      Kommentar


                      • #12
                        Sicher, dass das mit verschachtelten Boundaries geht?
                        Ich weiß es nicht, ich hab es aber noch nie gesehen...

                        Generell halt erstmal das Problem eingrenzen, d.h. erstmal nur ein Boundary-Tag verwenden, gucken ob es funktioniert, dann das andere gucken ob es funktioniert, wenn beides ja, dann würd ich mich doch mal darüber informieren, ob es mit dem Verschachteln überhaupt geht (ISO-Dateien cross lesen), denn das wäre jetzt so die Fehlerquelle, die ich da erkenne~

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          Man darf, soll und muss ggf. mehrere Parts schachteln. Das ist schon korrekt.

                          Würde auch mal nen Testscript aufbauen, um allein die Klasse zu testen. Wenn du alle Methoden verwendest und die Klasse funktioniert, sind wir ein stück weiter - wenn nicht, dann auch.

                          Wo hast du die \r denn eingesetzt? In der Version ohne die doppelten \n oder in der anderen? Letzteres würde ich für sinnvoller halten. Einfach alle \n\n durch ersetzen (lassen).

                          Kommentar


                          • #14
                            der mail-quelltext stammt aus einer testdatei. es werden alle funktionen der klasse genutzt (cc, bcc, attachment, etc pp).

                            hab jetzt mal eine "jungfräuliche" mail-klasse benutzt und diese schrittweise "abgewrackt":

                            - in der grundconfig auf meinem server alles bestens ... he = eintrag im errorlog
                            - in der grundconfig \N DURCH \R\N ERSETZT auf meinem server alles bestens ... he = eintrag im errorlog
                            - ALLE \R\N\R\N DURCH \R\N ERSETZT von meinem server kommt die mail als schrott an (abgeschnittene zeichenfolgen) ... he = mail wird versendet, ergebnis wie von meinem server = schrott
                            - an 2 STELLEN \R\N\R\N WIEDER EINGEBAUT von meinem server alles bestens (mail&attachment lesbar) ... he = eintrag im errorlog

                            hallo?! irgendwie hab ich wohl gesprächsbedarf mit he. oder seh ich das falsch?
                            Kissolino.com

                            Kommentar


                            • #15
                              - in der grundconfig \N DURCH \R\N ERSETZT auf meinem server alles bestens ... he = eintrag im errorlog
                              wo sind denn die \n\n hin???

                              ALLE \R\N\R\N DURCH \R\N ERSETZT von meinem server kommt die mail als schrott an (abgeschnittene zeichenfolgen) ... he = mail wird versendet, ergebnis wie von meinem server = schrott
                              nach den headern MUSS sogar ein Doppelter Zeilenumbruch stehen.

                              - an 2 STELLEN \R\N\R\N WIEDER EINGEBAUT von meinem server alles bestens (mail&attachment lesbar) ... he = eintrag im errorlog
                              okay.

                              hallo?! irgendwie hab ich wohl gesprächsbedarf mit he. oder seh ich das falsch?
                              joar,

                              vorab
                              - teste mal die mailklasse von http://www.phpguru.org/

                              Kommentar

                              Lädt...
                              X