IMAP Body

@saftmeister
Habe noch ein Problem:
Wenn ich mit meinem E-Mail Programm oder dem dazugehörenden Webinterface eine E-Mail an das PHP Script senden funktioniert alles.
Sobald ich allerdings irgendetwas von meinem IPod schreibe bekomme ich nur Datenmüll
Code:
DQoNCkdydcOfDQpTw7ZyZW4
Allerdings funktioniert es mit 1/3 Accounts. Bei den anderen beiden habe gestern mit Zertifikaten herumgespielt, diese aber eig. wieder entfernt.
Komischerweise kommen bei den beiden anderen (mit denen ich herumgespielt habe) die Nachricht richtig im Webinterface an, wovon ich die E-Mail auslese mit PHP

Woran könnte es liegen? Ist das ein Problem von PHP oder vom IPod?
 
Was steht denn im Header der angekommenen Email? Kannst du mal den kompletten Inhalt der Mail (also inkl. Header, Body und ggf. Footer) posten? Das könnte der Analyse zu Gute kommen.
 
Hier ist der Header und Body:
Code:
Return-Path: <xxx.xxx@live.de>
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on serv2017.ncsrv.de
X-Spam-Level: **
X-Spam-Status: No, score=2.1 required=5.0 tests=AWL,TVD_SPACE_RATIO
   autolearn=no version=3.2.5
X-Original-To: xxxx@serv2017.ncsrv.de
Delivered-To: xxx@serv2017.ncsrv.de
Received: from localhost (localhost.localdomain [127.0.0.1])
   by mx1.xxxx.eu (Postfix) with ESMTP id D0C241A1284F9
   for <xxx@serv2017.ncsrv.de>; Sun, 25 May 2014 12:39:46 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at serv2017.ncsrv.de
Received: from mx1.xxx.eu ([127.0.0.1])
   by localhost (serv2017.ncsrv.de [127.0.0.1]) (amavisd-new, port 10024)
   with ESMTP id 3jqQvoHRRwBI for <xxx@serv2017.ncsrv.de>;
   Sun, 25 May 2014 12:39:46 +0200 (CEST)
Received: from dub0-omc1-s27.dub0.hotmail.com (dub0-omc1-s27.dub0.hotmail.com [157.55.0.226])
   by mx1.xxx.eu (Postfix) with ESMTP id AF5E41A1284F7
   for <test@xxxx.de>; Sun, 25 May 2014 12:39:46 +0200 (CEST)
Received: from DUB405-EAS357 ([157.55.0.238]) by dub0-omc1-s27.dub0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675);
    Sun, 25 May 2014 03:39:46 -0700
X-TMN: [9Cwb8ldpq65k5mwqBEdDS6b8gVDjokxd]
X-Originating-Email: [xxx.xxx@live.de]
Message-ID: <DUB405-EAS35711956C2B5AB59914EE00EF380@phx.gbl>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Subject: Tesst
From: =?utf-8?B?U8O2cmVuIEJ1c3Nl?= <xxx.xxx@live.de>
Date: Sun, 25 May 2014 12:39:46 +0200
To: test@xxx.de
MIME-Version: 1.0 (1.0)
X-OriginalArrivalTime: 25 May 2014 10:39:46.0706 (UTC) FILETIME=[A5B13F20:01CF7805]
X-Antivirus: avast! (VPS 140524-1, 25.05.2014), Inbound message
X-Antivirus-Status: Clean

SGFsbG8gTGV1dGUNCg0KR3J1w58NClPDtnJlbg==

Da sieht man auch wieder den Datenmüll, den PHP ausliest. Allerdings wandelt Thunderbird den automatisch in einen richtigen Text um.
Kann PHP das nicht auch?
 
Ok :) Wie kann ich es denn am geschicktesten lösen, dass er immer das wählt, was er soll?
Mit einer if-Abfrage die den Header ausliest oder wie? Aber es gibt ja noch mehr außer base64 und quoted-printable
 
Ja, es gibt
http://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html hat gesagt.:
Content-Transfer-Encoding := "BASE64" / "QUOTED-PRINTABLE" / "8BIT" / "7BIT" / "BINARY" / x-token
und genau wegen vielen Sachen wie Content-Transfer-Encoding usw.
ist das Nachprogrammieren von Thunderbird&Co. nicht ganz so einfach :rolleyes:

Wenn man nicht alles selbst machen will gibt es zB. http://at2.php.net/mailparse,
oder die ZendLib sollte auch was haben, usw.
 
@sheel
Danke :)
Wo kann ich denn das Content-Transfer-Encoding auslesen? Im Header steht nichts drin ;( bzw. welche Methode müsste ich denn von mailparse nehmen?

Habe jetzt folgendes gemacht:
PHP:
$structure = imap_fetchstructure($mbox,$mnum);
$parts = $structure->parts;
print_r($parts["encoding"]);
Allerdings sagt er, dass encoding nicht gefunden werden konnte, obwohl das Array $parts es enthält
 
Zuletzt bearbeitet von einem Moderator:
Versuch mal:

PHP:
$body = imap_fetchbody($mbox, $mnum, $part);
$structure = imap_fetchstructure($mbox, $mnum);
switch($structure->encoding)
{
  case 0:
    // TODO: Behandle 7-Bit-Nachrichten
    break;
  case 1:
    // TODO: Behandle 8-Bit-Nachrichten
    break;
  case 2:
    // TODO: Behandle Binary-Encoded-Nachrichten
    break;
  case 3:
    $body = base64_decode($body);
    break;
  case 4:
    // TODO: Behandle QUOTED-PRINTABLE-Nachrichten
    break;
  case 5:
    // TODO: Behandle Sonstig-Encodierte-Nachrichten
    break;
  default:
    // TODO: Behandle Ausnahme
    break;
}

Ansonsten wäre es interessant zu wissen, was in $structure drin ist (was du mit var_dump() rausfinden kannst).
 
@saftmeister
Es handelt sich um Base64 und das ist ja 3. Allerdings steht in $structure->encoding = 0. In structure->parts ["encoding"] = 3. Deswegen müsste ich doch structure->parts["encoding"] nehmen oder?
Habe was gefunden, dass es sich bei einer HTML Mail in parts befindet. Aber warum bekomme ich den Fehler ;(
 
Zurück