2017-05-30 3 views
1

私はメールのメール本文をexctractに次のコードを使用しています。imap_fetchbodyを使用しているときに謎めいたメール本文

$imap = imap_open($mailbox,$user,$password); 
$mails = imap_search($imap,'UNSEEN'); 
foreach($mails as $mail) 
{ 
    $message = trim(utf8_encode(quoted_printable_decode(imap_fetchbody($imap,$mail,"1")))); 

    if(strpos($message,"<html") !== false) 
    { 
    $mail_body = fopen($dir."mail.html","w"); 
    } 
    else 
    { 
    $mail_body = fopen($dir."mail.txt","w"); 
    } 
} 

これは問題なく動作していますが、これはすべてのテストで機能します。 メールが転送される場合も、html-メール、プレーンテキストメール。

他のソースからは、(imap_fetchbodyを使用した後の)メッセージは、いくつかの暗号化された文字列のように見えます。このように:

dGVpZW4gaW0gUERGLUZvcm1hdDoNClJla2xhbWF0aW9uc2luZm9ybWF0aW9uOiAyMTMzNjc0MSBS SV8yMTMzNjc0MS5wZGYNCg0KTWl0IGZyZXVuZGxpY2hlbiBHcsO8w59lbg0KSWhyIG5vYmlsaWEg VGVhbQ0KX19fDQoNCm5vYmlsaWEtV2Vya2UgSi4gU3RpY2tsaW5nIEdtYkggJiBDby4gS0cgfCBX YWxkc3RyLiA1My01NyB8IDMzNDE1IFZlcmwNCg0KRGllIEdlc2VsbHNjaGFmdCBpc3QgZWluZSBL

私はすでに「1.1」や「1.2」のようにimap_fetchbodyためのいくつかの他の引数を使用しようとしましたが、私は、メッセージが空であることを行うとき。

この影響がなぜ発生するのですか?

+0

これらのメールが最初に実際に暗号化されていないことを確認しましたか? – Sylence

+0

はい、暗号化されていません。問題は、メールと転送されたメールのエンコーディングでした。 –

答えて

1

最終的に解決策が見つかりました。原因は、最初はリンゴのデバイスから送信された転送されたメールのようです。

ここで私はこれを使ってメッセージを抽出し、それが動作します。

$structure = imap_fetchstructure($imap, $mail); 
    $part = $structure->parts[1]; 
    $message = imap_fetchbody($imap,$mail,1); 
    if(strpos($message,"<html") !== false) 
    { 
     $message = trim(utf8_encode(quoted_printable_decode($message))); 
    } 
    else if($part->encoding == 3) 
    { 
     $message = imap_base64($message); 
    } 
    else if($part->encoding == 2) 
    { 
     $message = imap_binary($message); 
    } 
    else if($part->encoding == 1) 
    { 
     $message = imap_8bit($message); 
    } 
    else 
    { 
     $message = trim(utf8_encode(quoted_printable_decode(imap_qprint($message)))); 
    } 
関連する問題