jiushizhu 发表于 2009-12-25 10:59:46

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

请给位前辈指点一下

#include <pop3.au3>

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

为什么新浪的好用啊 qq的就不行

my788521 发表于 2009-12-25 11:21:09

你仔细分析下$muti的内容就知道了
每个邮箱可能都有一些差异

jiushizhu 发表于 2009-12-25 11:59:02

2楼的 我已测试过了 提取标题部分是对的 主要是_Pop3Stat ()大部分都读不到标题字段
当然了偶尔也能读到 但是可能性很小
不知到 是什么原因
期待高手解决啊:face (31):

jiushizhu 发表于 2009-12-25 17:07:24

本帖最后由 jiushizhu 于 2009-12-25 17:10 编辑

:face (20): 没人能解决吗

remme 发表于 2009-12-26 23:53:43

个人猜测,还是和编码有关。把邮件收下来以后就能看到邮件标题。

jiushizhu 发表于 2009-12-29 07:44:52

看来这问题很难解决啊

把邮件收下来很占cpu 如果有附件的话几乎是百分之百

remme 发表于 2009-12-29 09:55:30

继续讨论。这个跟邮箱没关系,跟收到的邮件是怎么编码的有关系。我试过自己的公司邮箱,4封邮件,有的能读取到标题(编码前的),有的读取不到。只有收取下来后,才能看到subject这个项(依旧是需要解码)。

所以对于邮件这种东西,发送客户端远远比接收客户端好写。前者无非是定义发送服务器,用户密码,方式,附件,定义编码方式就可以了。后者要考虑多种的编码方式如何正确解码的问题。

jiushizhu 发表于 2009-12-29 14:39:02

楼上的 我测试过了(QQ邮箱) 10封同样的标题(是无需转换编码的字母) 有时能读到有时读不到
飘忽不定捉摸不透 概率是1/4 :face (13):
新浪的则没问题 没发现有读不到标题的

remme 发表于 2009-12-30 09:33:06

靠,那就只能猜测背后的邮件系统有关系了。难道说新浪用exchange的,qq邮件系统是自己写的?

gyjyeo 发表于 2009-12-31 00:55:03

```````````````````````````````````````
如果跟编码有问题,那怎么才能知道他们的编码呢,难道真的是用猜出来的

remme 发表于 2010-1-18 11:14:12

不能用_pop3top,只能直接写tcp连接和接收。然后用base64解码或者utf-8。后者我还没有找到udf。面前碰到的都是BG2312和BGK的编码。utf-8的还得花时间自己调试。

另外,个人感觉pop不是很稳定的系统。经常出现登录不上去,登录上去了,循环处理邮件标题的时候,检查不定时的中断。所以要在编码里加上很多的判断条件。。。。。。考验人啊这不是。

remme 发表于 2010-1-27 23:49:42

再次修正自己的话:

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

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

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

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

头不是一般的大。

jiushizhu 发表于 2010-1-28 16:29:46

楼上的大哥 请你实验好了再发贴
你好好看一看!好好看一看!好好看一看!$muti = _Pop3Top 返回的数据

jiushizhu 发表于 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
               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&"/"&$i&"   "&$bt1,20,20)
      Next               
   
WEnd

我在循环2内加了循环限次 万一读不到就死了

remme 发表于 2010-1-29 22:49:41

看懂你的代码了。你这样多试几次。你这样能取到的,基本上是乱码。

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

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

我又碰到另外一种信头,第一行是gb2312编码,第二行是ascii编码。。。。。。。
页: [1] 2
查看完整版本: 用_Pop3Top为何多数读不到QQ邮件的标题呢