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 以上的环境。
如果需要短信通知,需要一个开启飞信服务的电信手机号码。
| < Prev | Next > |
|---|
Last Updated ( Thursday, 12 November 2009 22:28 )



