找回密码
 加入
搜索
查看: 4975|回复: 16

用_Pop3Top为何多数读不到QQ邮件的标题呢

  [复制链接]
发表于 2009-12-25 10:59:46 | 显示全部楼层 |阅读模式
请给位前辈指点一下

#include <pop3.au3>

While 1
        Sleep(3000)
        _pop3Disconnect ()
        _pop3Connect ("pop.qq.com", "用户名", "密码", 110);请填入你的邮箱pop3、用户名与密码
        $start = _Pop3Stat ()   
        For $i = 1 To $start[1]
                $muti = _Pop3Top ($i, 2)       
         $bt1 = StringMid($muti,StringInStr($muti,"Subject:")+9,StringInStr($muti,"Date:")-StringInStr($muti,"Subject:")-11)
                 ToolTip($start[1]&"/"&$i&"   "&$bt1,20,20)
        Next               
   
WEnd

为什么新浪的好用啊 qq的就不行
发表于 2009-12-25 11:21:09 | 显示全部楼层
你仔细分析下$muti的内容就知道了
每个邮箱可能都有一些差异
 楼主| 发表于 2009-12-25 11:59:02 | 显示全部楼层
2楼的 我已测试过了 提取标题部分是对的 主要是_Pop3Stat ()大部分都读不到标题字段
当然了偶尔也能读到 但是可能性很小
不知到 是什么原因
期待高手解决啊
 楼主| 发表于 2009-12-25 17:07:24 | 显示全部楼层
本帖最后由 jiushizhu 于 2009-12-25 17:10 编辑

没人能解决吗
发表于 2009-12-26 23:53:43 | 显示全部楼层
个人猜测,还是和编码有关。把邮件收下来以后就能看到邮件标题。
 楼主| 发表于 2009-12-29 07:44:52 | 显示全部楼层
看来这问题很难解决啊

把邮件收下来很占cpu 如果有附件的话几乎是百分之百
发表于 2009-12-29 09:55:30 | 显示全部楼层
继续讨论。这个跟邮箱没关系,跟收到的邮件是怎么编码的有关系。我试过自己的公司邮箱,4封邮件,有的能读取到标题(编码前的),有的读取不到。只有收取下来后,才能看到subject这个项(依旧是需要解码)。

所以对于邮件这种东西,发送客户端远远比接收客户端好写。前者无非是定义发送服务器,用户密码,方式,附件,定义编码方式就可以了。后者要考虑多种的编码方式如何正确解码的问题。
 楼主| 发表于 2009-12-29 14:39:02 | 显示全部楼层
楼上的 我测试过了(QQ邮箱) 10封同样的标题(是无需转换编码的字母) 有时能读到有时读不到
飘忽不定捉摸不透 概率是1/4
新浪的则没问题 没发现有读不到标题的
发表于 2009-12-30 09:33:06 | 显示全部楼层
靠,那就只能猜测背后的邮件系统有关系了。难道说新浪用exchange的,qq邮件系统是自己写的?
发表于 2009-12-31 00:55:03 | 显示全部楼层
```````````````````````````````````````
如果跟编码有问题,那怎么才能知道他们的编码呢,难道真的是用猜出来的
发表于 2010-1-18 11:14:12 | 显示全部楼层
不能用_pop3top,只能直接写tcp连接和接收。然后用base64解码或者utf-8。后者我还没有找到udf。面前碰到的都是BG2312和BGK的编码。utf-8的还得花时间自己调试。

另外,个人感觉pop不是很稳定的系统。经常出现登录不上去,登录上去了,循环处理邮件标题的时候,检查不定时的中断。所以要在编码里加上很多的判断条件。。。。。。考验人啊这不是。
发表于 2010-1-27 23:49:42 | 显示全部楼层
再次修正自己的话:

pop是很稳定的系统,不稳定是因为自己写的正则有问题。多加判断@error和@extended之后代码就强壮了很多。

现在发现base64是一种很微妙的解码,比如说,现在已经发现有gb2312,gbk,gb18030前置的标题,而且发现最后的结束符在=?=,和?=都会出现。

一行就罢了,标题过长还会出现两行。

两行也就罢了,如果标题以英文开头会出现3行。

头不是一般的大。
 楼主| 发表于 2010-1-28 16:29:46 | 显示全部楼层
楼上的大哥 请你实验好了再发贴
你好好看一看!好好看一看!好好看一看!$muti = _Pop3Top 返回的数据
 楼主| 发表于 2010-1-28 16:44:38 | 显示全部楼层
本帖最后由 jiushizhu 于 2010-1-28 16:49 编辑

目前用此方法将就用
#include <pop3.au3>

While 1
        Sleep(3000)
        _pop3Disconnect ()
        _pop3Connect ("pop.qq.com", "用户名", "密码", 110);请填入你的邮箱pop3、用户名与密码
        $start = _Pop3Stat ()   
        For $i = 1 To $start[1]
               While 2
                     $muti= _Pop3Top ($i, 0)
                       If StringInStr($data,"Subject:") Then ExitLoop
                       Sleep(50)
               WEnd        
               $bt1 = StringMid($muti,StringInStr($muti,"Subject:")+9,StringInStr($muti,"Date:")-StringInStr($muti,"Subject:")-11)
               ToolTip($start[1]&"/"&$i&"   "&$bt1,20,20)
        Next               
   
WEnd

我在循环2内加了循环限次 万一读不到就死了
发表于 2010-1-29 22:49:41 | 显示全部楼层
看懂你的代码了。你这样多试几次。你这样能取到的,基本上是乱码。

有些信头里居然有两次Subject:。

我现在抛弃_pop3top了,直接用tcpreceive的方式来收,然后解码。

我又碰到另外一种信头,第一行是gb2312编码,第二行是ascii编码。。。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 15:27 , Processed in 0.080547 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表