Monthly Archives: November 2009

在Outlook中用VBA进行邮件过滤

微软出的东西总会有一些脑残的设计。Outlook的邮件过滤规则,我倒腾了半天都没整明白。最终决定用VBA脚本来实现邮件过滤。 使用VBA处理新邮件,一般有三种方式,各有利弊: 在邮件规则中调用VBA脚本 如果一次收取大量的邮件,可能会漏处理一些邮件。 可能会出现VbaProject.otm被损坏的情况。(TMD我就遇到了) 使用ItemAdd事件 当同时进入文件夹的邮件超过16个时,ItemAdd事件将不会被触发。致命啊~~ 使用NewMailEx事件 只有使用Exchange邮箱才能触发NewMailEx事件,只有Outlook处于启动状态时才能接收NewMailEx邮件。也就是说,当Outlook关闭后收到一些新邮件,再次打开Outlook收取这些邮件时,将不会触发NewMailEx事件。也很恶心啊~~ 所以,基本上就只有第一种方法比较符合我的要求。 我的需求,简化一下就是: 从a@example.com发送过来的邮件,移动到folder1 发送给b@example.com邮件组的邮件,移动到folder2 发送给c@exmpla.com邮件组的邮件,移动到folder3 OK,启动Outlook,按ALT+F11进入VBA编辑器,在ThisOutlookSession模块下,添加如下的函数: Sub EmailFilter(item As MailItem) ‘ 声明变量,好处是编辑器知道变量类型之后可以进行自动提示。 Dim id As String Dim email As Outlook.MailItem Dim objApp As Outlook.Application Dim objNS As Outlook.NameSpace Dim inbox, folderA, folderB, folderC As Outlook.Folder ‘ 取得收件夹和下面的三个子目录 Set objApp = Application Set objNS = objApp.GetNamespace("MAPI") Set [...]

很少想过的问题

同学参加模拟面试比赛,就把去年的题目发给我让我帮着想想。很多都是些处理职场人际关系的题目。这些问题,我几乎从来没有考虑过。我目前没有遇到过这些问题,但并不是说我所在的环境就没有复杂的关系,也许只是我还没有走到那一步而已。这些问题,仔细想想,也会有答案。从一个正面的角度来回答这些问题的话,“沟通”嘛,总是最重要的。可是,“想得到”真不等于“做得到”。我知道沟通的重要性,但我在与人沟通方面还是会犯憷,尤其是要面对一个经常发飙的manager的时候。知易行难,不只是我有这样的问题,很多人都是这样,“能做到的”也许占不到“能想到的”百分之一。 上周末培训的时候,老师让我们思考这样几个问题: 如果让别人用几个关键词来形容我,我觉得会是什么?我期望是什么? 我是谁? 我为什么而活着? 我的梦想是什么? 这些问题,我很少去想。提到梦想的时候,人们的第一反应经常会是我要得到什么。但是财富名望之类的东西,只能说是目标,不是梦想。我觉得梦想是得到了你想要的所有东西之后,你仍然期望去做的事情。梦想应该与“得到”无关,而是与“付出”有关。 实现梦想的过程就是体现你价值的过程。

上班比以前曲折多了

8:00,醒来,外面又是一片银装素裹。 8:40,出门,雪地很滑,花了15分钟走到地铁站。 9:00,地铁里很挤,最后一个进的门,塞满了门口最后一点狭小的空间。 9:20,从10号线换乘13号线,在城铁已经在关门的时候,伸手挡住了门,很幸运的钻了进去,还好车上一点也不挤。 9:30,下车,出了城铁站,就看见通往公司的路上堵满了车和人。一群建设信息高速公路的IT民工在湿滑的雪地上蹒跚前行。当然,还有某著名外企的一群人堵在路上等班车。 9:40,到公司,整整用了一个小时。

VIM中对PHP进行语法检查

在开始使用PHP之后的第4个月,我终于知道可以如此方便的对php进行语法检查······ 在~/.vimrc中加入map <F5> : !php -l % <CR>然后按F5就可以调用php进行语法检查了。 VIA: LINK 1,LINK 2

用AJAX实现进度条(2.客户端)

上次提到的用AJAX实现进度条时,服务器端必须提供一个用于查询状态的接口。接下来,在浏览器客户端要做的事情就是: 发起服务请求 调用查询状态的接口进行状态轮询 用进度条显示状态 1.发起服务请求 接着上次的例子,发起服务请求也就是向服务器发起导出Excel的请求,请求export.php并传入参数export_id,export.php执行完毕之后,会返回导出的Excel文件的地址。下面是用AJAX调用的代码: finished = false; var xmlHttp = GetXmlHttpObject(); var stateChanged = function(){ if(xmlHttp.readyState==4){ finished = true; document.location.href=xmlHttp.responseText; } } xmlHttp.onreadystatechange=stateChanged; xmlHttp.open("GET","export.php?export_id=xxx",true); xmlHttp.send(null); 2.状态轮询 上篇的例子中,status.php每次返回的是一个JSON对象,包括了三个key:current_step、total_step和msg。下面的代码中用AJAX方式轮询状态,并将状态用文本显示出来。 var xmlHttp2 = GetXmlHttpObject(); var stateChanged2 = function (){ if (xmlHttp2.readyState==4){ if(xmlHttp2.status==200){ var obj = eval(‘(‘ + xmlHttp2.responseText + ‘)’); document.getElementById("t1").innerHTML= "["+obj.current_step+"/"+obj.total_step+"]"+obj.msg; if(!finished){ setTimeout(onTimerEvent, 1000); } [...]