2014-01-11 26 views
1

下面的代碼會輸出不正確的html,並在兩者之間插入一些垃圾字符。我認爲解決方案將是基礎轉換。但我找不出哪個基地。imap fetch_body輸出不正確的html

<?php 
$hostname = '{imap.gmail.com:993/imap/ssl}[Gmail]/Sent Mail'; 
$username = '[email protected]'; 
$password = '*****'; 
$sent = imap_open($hostname, $username, $password) or die('Cannot connect to Gmail: ' . imap_last_error()); 
$emails = imap_search($sent, 'SUBJECT "Part"'); 

if ($emails) 
{ 
    foreach ($emails as $email_number) 
    { 
     $message = imap_body($sent, $email_number,1.2); 
     echo $message; 
    } 
} 
imap_close($sent); 

?> 

輸出HTML

<td colspan="3D&quot;2&quot;" 
st="yle=3D&quot; 
border-color:rgb(204,204,20=" 4); 
border-width:0px="" 0px="" 1px="" 1px; 
font-family:ari="al; 
color:rgb(255,255,255); 
background-color:rgb(123,186,0="); 
text-align:center; 
width:100px"=""> 

回答

2

看起來你想用quoted_printable_decode()顯示它特別像這樣前將解碼輸出:

foreach ($emails as $email_number) 
{ 
    $message = imap_body($sent, $email_number,1.2); 
    echo quoted_printable_decode($message); 
} 

瞭解更多關於此功能在這裏:http://www.php.net/manual/en/function.quoted-printable-decode.php

注意:imap_qprint()表現相同,也可以使用。

+0

爲什麼不'imap_qprint()'如果已經使用'imap'庫? – Ohgodwhy

+0

我編輯了我的答案來記錄這一點,但我總是喜歡選擇具有更多描述性名稱並且不需要依賴關係的函數。 –

+0

我同意,但這個問題的上下文涉及'imap_'庫的使用,無論如何這應該是正確的解決方案。 – Ohgodwhy

2

IMAP只是郵件的傳輸協議。郵件消息本身可以具有MIME格式的固有結構,例如,帶有附件的典型的HTML消息將具有以下結構:

mail 
|- multipart/mixed 
| |- multipart/alternative 
|  |- text/plain - plain text content 
|  |- text/html - HTML content 
|- application/octet-stream - the attachment 

各葉部分(例如內容和附件)的可能具有內容傳輸編碼一個,典型地引號的可打印,BASE64或有時二進制。文本部分也可以具有字符集(在內容類型標題內定義),例如utf-8,iso-8859-1等。另外,可能有文本部分用作附件,它們將內容處置標題設置爲'附件'。

要顯示郵件的文本,您必須首先找到相關的內容部分,然後解碼content-transfer-encoding,然後轉換輸出中所需的給定字符集中的內容。 IMAP庫支持大部分必要的操作,但似乎沒有簡單的方法以您需要的形式獲取內容,例如,你必須調用所有的功能來解析結構,解碼和轉換你自己。

+0

我正在使用text/html。 「1.2」在這一行。 $ message = imap_body($ sent,$ email_number,1.2);你的回答是信息。感謝它。通過使用quoted_printable_decode() – coding

+0

解決了我的問題通過調用quoted_printable_decode確實解決了您的特定問題。你還沒有確定的是,同樣的信息可以很容易地使用,例如base64編碼。它仍然是一個完全有效的電子郵件,但你的代碼將無法正常工作,這就是爲什麼Steffen花時間添加他精心設計的答案的原因。 –