我在做什么:
首先,我尝试收到电子邮件并将用户的回复保存在我的数据库中。
为此,我使用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
即使我添加了"/-/-/-/-/-/"
符号,但符号也没有显示。
答案 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>";
}
从此我得到了我渴望的结果。