如何删除libcurl和POP3的电子邮件?

时间:2014-01-14 14:44:15

标签: c++ c libcurl pop3

有可能吗?我知道自定义请求;所以我发送带有“DELE”文本的自定义请求,并设置我要删除的消息ID。因此,curl_easy_perform会挂起,直到出现超时。在网络论坛上,人们写出建议,在“DELE”之后发送“QUIT”命令;但如果libcurl挂起怎么能发送“QUIT”命令?

libcurl调试输出如下:

* Connected to pop-mail.outlook.com (157.55.1.215) port 995 (#2)
* SSL connection using DES-CBC3-SHA
* Server certificate:
*        subject: C=US; ST=Washington; L=Redmond; O=Microsoft Corporation; CN=*.
hotmail.com
*        start date: 2013-04-24 20:35:09 GMT
*        expire date: 2016-04-24 20:35:09 GMT
*        issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign Organization Validation
 CA - G2
*        SSL certificate verify result: unable to get local issuer certificate (
20), continuing anyway.
< +OK DUB0-POP132 POP3 server ready
> CAPA
< -ERR unrecognized command
> USER ************@hotmail.com
< +OK password required
> PASS ******************
< +OK mailbox has 1 messages
> DELE 1
< +OK message deleted
* Operation too slow. Less than 1000 bytes/sec transferred the last 10 seconds
> QUIT
* Operation too slow. Less than 1000 bytes/sec transferred the last 10 seconds
* Closing connection 2

因此,消息被删除,但是libcurl会挂起,直到速度限制迫使它断开连接,这是个坏主意。如何在删除消息后强行停止并且不要等到超时到来?

2 个答案:

答案 0 :(得分:2)

如果查看libcurl文档,CURLOPT_CUSTOMREQUEST说:

  

POP3

     

当你告诉libcurl使用自定义请求时,它会像LIST或RETR命令一样发送,它希望服务器返回数据。因此,在指定DELE和NOOP等命令时应使用CURLOPT_NOBODY。

这就是libcurl挂起的原因 - 它正在等待服务器实际上没有发送的更多数据。因此,请添加CURLOPT_NOBODY以停止等待。

答案 1 :(得分:0)

最近在libcurl网站上添加了示例代码,详细说明了如何执行此操作:

pop3-dele.c