2015-02-12 5 views
0

Что я делаю:Получение тела почты в PHP

Сначала я пытаюсь получить по электронной почте и сохранить ответ пользователя в моей базе данных. Для этого я использую метод PHP imap для получения почты с моего адреса электронной почты.

Код:

function get_email() 
{ 
    //define server, email , password 
    $server = '{server.example.com:143}INBOX'; 
    $user_name = 'login'; 
    $user_pass = 'password'; 

    $mail = imap_open($server , $user_name , $user_pass); 

    $headers = imap_num_msg($mail);//counting the no of msg 

    for ($i = 1; $i <= $headers ; $i++) 
    { 
     $body = imap_fetchbody($mail, $i ,1); 
     $body = explode(">",$body); 
     $body = $body['0']; 
     $body = substr($body, 0, -5); 
     echo "<pre>"; 
     echo "/-/-/-/-/-/".$body."/-/-/-/-/-/"; 
     echo "</pre>"; 
    } 

    // close the connection 
    imap_close($mail); 
} 

Сейчас: Результат, который я получаю от $body = imap_fetchbody($mail, $i ,$i); это:

Okay What new in it. 

On Thu, Feb 12, 2015 at 4:56 PM, admin wrote: 

> My name is admin! 
> 
> 

, но только хотел ГЗС тело, Okay What new in it.. Итак, я массаж и получаю первый элемент массива и удаляю последнюю строку.

Проблема: Я не мог удалить последнюю строку текущего результата этой программы является:

Okay What new in it. 

On Thu, Feb 12, 2015 at 4:56 PM, admin 

Даже у меня есть добавить "/-/-/-/-/-/" символ, но символ не отображается.

+0

Вы не можете надежно отделить фактический ответ от цитируемый ответ, потому что каждый клиент настроен по-разному для '' On Thu, Feb 12 ... ''p Изобразительное искусство. Многие опускают его полностью, и он настраивается пользователем. Префикс '>' для цитируемого ответа не является надежным и сам по себе. –

+1

Кроме того, многие люди отвечают в очереди на существующий цитируемый ответ, перемежая новое содержимое сообщения с соответствующими частями цитируемого сообщения. –

+0

@MichaelBerkowski Да, я знаю это, но я не могу думать о надежном решении для этого. – Xitas

ответ

0

Для попыток очень сложно я прихожу к решению, которое просит пользователя ответить '#' в конце сеанса массажа. Поскольку я замечаю, что существуют разные типы ответов от разных почтовых служб, но все службы показывают ответ первым.

Код:

$msgno = imap_num_msg($mail); 
    for ($i = 1; $i <= $msgno ; $i++) 
    { 
    $body = imap_fetchbody($mail, $i ,1); 
    $body = explode("#",$body); 
    $body = $body['0']; 
    echo $body; 
    echo "<br>"; 
    } 

Из этого я получил свой результат желания.

+0

Что делать, если пользователь отправляет URL-адрес с хешем? Что, если я скажу, что я №1? # Символ довольно распространен, ... – EJTH

+0

Пользователь не может отправить мне электронную почту напрямую. Он должен ответить на мой массаж. Так что я сказал пользователю не вводить # тега, о котором идет речь, но в конце его ответа. – Xitas

1

Ваш подход не идеален, и этот ответ также не идеален. Поскольку откровенно то, что вы пытаетесь выполнить, может быть довольно сложно, поскольку предыдущие сообщения в потоке по электронной почте будут отличаться в зависимости от используемого клиента, и вы также не можете доверять пользователю (нить под «телом» может быть изменена пользователем и т. д.)

Использование взрыва '>' не является идеальным, потому что, если это часть сообщения?

взрывающийся \n> - это тоже не слишком, потому что пользователь может встроить ответы, как сказал @Michael_Berkovski.

В любом случае здесь мое решение:

$body = preg_replace('#(\n>.*?)+$#','',$body);

Это уменьшит следующее:

This is the body 
> And this is a comment within the body 
Also just the body 

>Previous messages 
>here 
>> Even indented who cares? 

к:

This is the body 
> And this is a comment within the body 
Also just the body 
+1

Также рассмотрите возможность использования абстракции для функциональности imap_ в PHP, действительно легко ошибиться, и это действительно может быть проблемой ... Как бесстыдно, поскольку я могу только предположить, что вы используете что-то вроде этого: https: // github.com/EJTH/php-mailbox-reader Он обрабатывает html-сообщения, multipart и вложения, включая встроенные изображения. Хотя я уверен, что его легко атаковать XSS, поэтому используйте его с дезинфицирующим средством, если вы планируете разрешать HTML-сообщения. – EJTH

Смежные вопросы