在PHP中获取邮件正文

时间:2015-02-12 13:00:37

标签: php email

我在做什么:

首先,我尝试收到电子邮件并将用户的回复保存在我的数据库中。 为此,我使用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.的msg正文。所以我explode()按摩并得到数组的第一个元素并删除最后一行。

问题: 我无法删除最后一行此程序的当前结果是:

Okay What new in it.

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

即使我添加了"/-/-/-/-/-/"符号,但符号也没有显示。

2 个答案:

答案 0 :(得分:1)

你的方法并不理想,这个答案也不理想。因为坦率地说,你想要完成的事情可能非常困难,因为电子邮件中的线程中的先前消息将根据所使用的客户端而不同,并且您也不能信任该用户(“正文”下方的线程可能已被用户更改等)

使用'&gt;'爆炸'是不理想的,因为如果它是信息的一部分呢?

\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 :(得分: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>";
  }

从此我得到了我渴望的结果。