2011-07-06 6 views
5

Mam maile, w których potrzebuję uzyskać ciało za pomocą funkcji PHP imap, a następnie zapisuję je w bazie danych. Te wiadomości są wysyłane z systemu odpowiedzi. Używam tego kodu, aby pobrać treść wiadomościUzyskiwanie tylko określonej części ciała wiadomości e-mail przy użyciu imap_body

$bodyText = imap_fetchbody($mbox,$v,1.2); 
if(!strlen($bodyText)>0){ 
    $bodyText = imap_fetchbody($mbox,$v,1); 
} 

Działa to doskonale, ale również zawiera oryginalną treść wiadomości, czy jest jakiś sposób, aby tylko uzyskać odpowiedź.

Całe ciało email wygląda to

**This is a test 
-- 
Kind Regards, 



-----Original Message----- 
From: ------------- 
To:-------------------------- 
Subject: You have received a reply to your enquiry 
New System 
Date: Tue, 5 Jul 2011 16:24:28 +0200 
Good day, 
You have received the following reply to an enquiry you made 
------------------------------------------------------------------------------------------------- 
test3  

-------------------------------------------------------------------------------------------------- 
To reply to this comment please click on the Reply To button and add the message you wish to send.** 

Czy istnieje sposób, aby dostać się tylko treść wiadomości bez oryginalnej wiadomości przy użyciu funkcji IMAP lub inne funkcje PHP?

Odpowiedz

0

masz spróbował

substr($wholeMessage, 0, strpos($wholeMessage, 0, "-----Original Message-----")); 

ten odetnie wiadomość od początku aż do miejsca, gdzie oryginalna wiadomość ---- --- startów smyczkowych. brudny, ale może serwer potrzeb

EDIT: Ja zakładając masz tylko jedną część MIME .. Jeśli masz kilka, można po prostu zapisać te potrzebne

+0

będzie zawsze mają jedną część MIME, ja już robi w tej chwili co zasugerowałeś, ponieważ to ma dla mnie sens, jedyna troska, którą mam, z różnymi klientami poczty e-mail, czy wiadomość zawsze będzie miała ciąg znaków ----- Wiadomość oryginalna ---- w nim, gdy ktoś odpowie na wiadomość – Roland

+0

Nie sądzę, i myślę, że nie powinieneś na to liczyć. przykład kodu był powiązany z tym, co napisałeś w swoim pytaniu, i z tego, co zrozumiałem, wiadomość pochodzi z "systemu odpowiedzi", więc myślałem, że zawsze był ten sam format – marcelog

+0

tak, z systemu odpowiedzi, więc nie może affort, aby ta sama wiadomość była przechowywana dwa razy – Roland

1

Istnieje tu blogu: http://www.damnsemicolon.com/php/php-parse-email-body-email-piping który rozwiązuje problem. Używa powszechnie znanych formatów odpowiedzi klienta e-mail, aby najlepiej odgadnąć, czym jest treść odpowiedzi. To jest tak dobre, jak tylko możesz, biorąc pod uwagę, że nie możesz kontrolować używanych klientów poczty e-mail.

Po prostu uwaga, połączony kod używa od i do nazwy/adresu e-mail, aby lepiej przeanalizować adres e-mail. Można uzyskać te wartości tak:

$headerInfo = imap_headerinfo($mbox,$v); 

$fromEmail = $headerInfo->from->personal; 
$fromName = $headerInfo->from->mailbox . "@" . $headerInfo->from->host; 
$toEmail = $headerInfo->to->personal; 
$toName = $headerInfo->to->mailbox . "@" . $headerInfo->to->host; 

Edit: link wydaje się być martwy, oto cache google: http://webcache.googleusercontent.com/search?q=cache:5MxzHXFU5TkJ:www.damnsemicolon.com/php/php-parse-email-body-email-piping+&cd=1&hl=en&ct=clnk&gl=ca

Powiązane problemy