我正试图从电子邮件中获取正文,但我不知道如何。身体与头部隔开一个空间。你能给我一些例子吗?
感谢。
消息看起来像这样(带标题和正文):
From username@localhost Fri May 13 12:28:30 2010
Return-Path: <username@localhost>
X-Original-To: recipe@localhost
Delivered-To: recipe@localhost
Received: from cristi?localhost (localhost [127.0.0.1])
by Notebook (Postfix) with SMTP id 50F6F809E0
for <test@localhost>; Fri, 13 May 2010 12:28:30 +0300 (EEST)
Message-Id: <20110513092830.50F6F809E0@Cristi-Notebook>
Date: Fri, 13 May 2010 12:28:30 +0300 (EEST)
From: username@localhost
To: undisclosed-recipients:;
Text Body
.
到目前为止:
while ( buffer_recieved[begin]){
if ( buffer_recieved[begin] == '\r' && buffer_recieved[begin+1] == '\n' ) {
body[end++]=buffer_recieved[begin];
}
begin++;
}
body[end]=0;
答案 0 :(得分:0)
找到POP RFC。阅读规范。
我没看过POP,但我读过SMTP。在SMTP中,我想我记得标题以“\ r \ n \ r \ n”结尾,同样是正文。对POP来说也许是一样的。
答案 1 :(得分:0)
如果我理解正确,身体被换行分隔,所以我们可以保留一个变量,告诉我们是否已经遇到了换行符。在这种情况下,复制文本,否则检查我们是否已达到它。
bool foundBody = false;
char *bodyBegin = "\r\n\r\n";
int i = 0,j = 0, k = 0;
while(bufferReceived[i]) {
if(foundBody)
body[j++] = bufferReceived[i];
else {
if(bufferReceived[i] == bodyBegin[k])
foundBody = bodyBegin[k++] == '\0';
else
k = 0;
}
i += 1;
}
body[j] = '\0';
答案 2 :(得分:0)
你这太复杂了。你的身体开始if(strnstr(buffer, "\r\n\r\n", sizeof(buffer)) != NULL)
。现在,您只需要编码缓冲区在“\ r \ n \ r \ n”序列中分割的4个异常。
另一种方法是在读取“\ r \ n”之前进行行读取,然后转到正文的缓冲区。这是首选,因为您可以更容易地存储标头值,并且从行读取到较大缓冲区的开销可以忽略不计。