给梦一个奔跑的方向!
PDF Print E-mail
User Rating: / 0
PoorBest 
Written by xlingfairy
Thursday, 12 November 2009 12:56
1,添加长短信支持。
2,修正长邮件标题不能显示完全的BUG
3,添加常用的POP3邮箱设定项。(hotmail,gmail,163)
 
 
关于长邮件标题不能显示完全:
如果邮件名过长,在 TOP 命令里返回的 headers 会像这样:
 
。。。
Subject: =?gb2312?B?1eLKx7OkserM4rXE08q8/rLiytQ=?=
 =?gb2312?B?o6G5/rn+uf6jodXiysex6szio6w=?= =?gb2312?B?xNy/tLW9wvCjvw==?=
。。。
 
即 subject 分行了,原来是按行处理的,判断一行的最前面几个字符是不是 "Subject:", 如果是,就说明这一行是 标题。这样显然对不上 上面所说的 分行 的情况。
 
解决方法:
将TOP命令返回的内容在第一个 \r\n\r\n 处断开,后面的舍弃(后面的部分即邮件的正文部分), 在用正则表达式:
new Regex(@"(?<header>^\S+):", RegexOptions.Compiled | RegexOptions.Multiline);
将保留部分拆分成数组,形式如下:
...
array[] = From
array[] = =?gb2312?B?yO6Egg==?= <xlingfairy@hotmail.com>
array[] = To
array[] = <xling@dajiaozi.com>
array[] = Subject
array[] = =?gb2312?B?1eLKx7OkserM4rXE08q8/rLiytQ=?= \r\n =?gb2312?B?o6G5/rn+uf6jodXiysex6szio6w=?= =?gb2312?B?xNy/tLW9wvCjvw==?=
...
 
 
        private void GetInfo(List<string> lines, out string subject, out string from, out DateTime time) {
            subject = "";
            from = "";
            string _time = "";
 
            string ctx = string.Join("\r\n", lines.ToArray());
            ctx = ctx.Split(new string[]{ "\r\n\r\n" }, StringSplitOptions.None)[0];// header 和邮件正文之前以 \r\n\r\n 隔开
            MatchCollection ms = topHeaderReg.Matches(ctx);
            string[] tmp = topHeaderReg.Split(ctx);
 
            for (int i = 0; i < tmp.Length; i ++) {
                if (subject != "" && from != "" && _time != "") {
                    break;
                }
 
                if (tmp[i] == "Subject" && subject == "") { 
                    subject = tmp[i + 1];
                    i++;
                    continue;
                }
 
                if (tmp[i] == "From" && from == "") {
                    from = tmp[i + 1];
                    i++;
                    continue;
                }
 
                if (tmp[i] == "Date" && _time == "") {
                    _time = tmp[i + 1];
                    i++;
                    continue;
                }
            }
 
            if (_time != "") {
                Match ma = dateTimeReg.Match(_time);
                if (ma.Success)
                    time = DateTime.Parse(ma.Groups[0].Value);
                else
                    time = new DateTime();
            } else
                time = new DateTime();
        }
 
 
svn:
http://mail-notify.googlecode.com/svn/trunk/
 
试用下载:
http://code.google.com/p/mail-notify/downloads/list
 
说明:
需要.NET Framework 2.0 以上的环境。
 
如果需要短信通知,需要一个开启飞信服务的电信手机号码。
Last Updated ( Thursday, 12 November 2009 22:28 )
 

Add comment


Security code
Refresh

Popular Contents

Recommend

Site Info

Members : 1
Content : 100
Web Links : 7
Content View Hits : 56495

Links