在OutLook中收取POP3的邮件时,RETR命令以什么作为结束符

kittywu 2004-06-11 11:27:10
本人在做一个SMTP,POP3的服务器时,用FoxMail收发均没问题,但是用OutLook Express 收取邮件时,收到RETR 命令时,却一直在等待服务器回应,我看了一下,应该是服务器对RETR命令返回的字符串没有结束符(有\r\n.\r\n),是不是OutLook用另外的字符作为RETR响应的结束符??
...全文
406 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhzxlqt 2004-06-12
  • 打赏
  • 举报
回复
你说的问题我最初也遇到过,已经解决,现将POP3的代码贴上来:
if(rectxt.SubString(1,4).UpperCase()=="RETR")
{
if(ipop3status<2)
{
sendtxt="-ERR authentication required.\r\n";
try
{
pStream->WriteBuffer(sendtxt.c_str(),sendtxt.Length());
}
catch(...)
{
Terminate();
}
}
else
{
sPara=rectxt.SubString(6,rectxt.Length()-7);
int no=StrToInt(sPara)-iDeleted;
TSearchRec sr;
int iAttributes = 0;
iAttributes |= faAnyFile;
int messagenumber=0;
long messagebyte=0;

FILE *popfp;

int lfilelen,ifread;
AnsiString str,str1;
if (FindFirst(mailpath+Domain+"\\"+Name+"\\*.mal", iAttributes, sr) == 0)
{
do
{
if (sr.Name.SubString(1,1)!=".")
{
messagenumber++;
if(messagenumber==no)
{
int ifilesize=sr.Size;
sPOPFilename=mailpath+Domain+"\\"+Name+"\\"+sr.Name;
popfp=fopen((mailpath+Domain+"\\"+Name+"\\"+sr.Name).c_str(),"rt");
if(popfp)
{
sendtxt="+OK "+IntToStr(sr.Size)+" octets\r\n";
try
{
pStream->WriteBuffer(sendtxt.c_str(),sendtxt.Length());
}
catch(...)
{
Terminate();
}
// while(!feof(popfp))
while(ifilesize)
{
// fgets(ch,513,popfp);
char ch[513];
ZeroMemory(ch,513);
if(ifilesize<=513)
{
fread((char*)ch,ifilesize,1,popfp);
str=AnsiString(ch).SubString(1,ifilesize);
ifilesize=0;
}
if(ifilesize>513)
{
fread((char*)ch,513,1,popfp);
str=AnsiString(ch).SubString(1,513);
ifilesize-=513;
}

str1=str;

if((str.SubString(str.Length()-1,1)=="=")&&(str.SubString(str.Length()-2,1)!="?"))
{
str1=str.SubString(1,str.Length()-2);
}
sendtxt=str1;
try
{
pStream->WriteBuffer(sendtxt.c_str(),sendtxt.Length());
}
catch(...)
{
Terminate();
}
}
sendtxt="\r\n.\r\n";
try
{
pStream->WriteBuffer(sendtxt.c_str(),sendtxt.Length());
}
catch(...)
{
Terminate();
}
if(popfp)
fclose(popfp);
break;
}
}
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
}
}
kittywu 2004-06-12
  • 打赏
  • 举报
回复
“当你将邮件内容发送完成后,再发送一个"\r\n.\r\n";在FoxMail和OutLook Express中我都试过,没有问题”

你说的方法我试过了,在FoxMail中可以通过,但不知为何,OutLook Express一直在等待接收数据,而不结束,很奇怪的?

我昨晚就在想这个问题,我想应该可以通过自身的SMTP服务器发到另外的服务器上,如果解决了,给你email!
xhzxlqt 2004-06-11
  • 打赏
  • 举报
回复
当你将邮件内容发送完成后,再发送一个"\r\n.\r\n";
在FoxMail和OutLook Express中我都试过,没有问题.
我也在搞这个东西.
我也有一个问题不知楼主是否能帮我解决:邮件服务器如何与别的邮件服务器交换邮件?比如说用"xyz@112.com"发送到"abc@223.com" ,112.com上的邮件服务器如何将本地的这封邮件发送到223.com上的邮件服务器?(可不要建议到223.com上去申请一个免费邮箱)
这个问题我想你早晚也会遇到,如果已经(或以后)解决请告诉我如何解决(xhzxlqt@163.com,xhzxlqt@126.com)
谢谢!

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧