MAPI的一些问题解答

本文来自CSDN博客:http://blog.csdn.net/yzx0023/archive/2007/06/14/1652509.aspx


为了方便大家查阅,我会将一些常见的问题列在这个帖子里面, 今后我也会不断把遇到的问题更新到这篇文章上(最近实在没力气写东西,累死),希望大家多多支持,有说的不对的,也请多多指教:

1. tmail的后台启动模式:

    前几天有网友问,他想通过SubmitMessage发送message,但是如果tmail没有起来,message只会被放到outbox里面等待发送,但是又不想在自己程序里面点发送就启动tmail界面,也有其他网友也问过类似的问题,希望调用MAPI一些功能,又不想开启tmail UI,我记的以前找到过tmail的后台启动模式,今天翻了出来,希望对大家有所帮助:

::CreateProcess(_T("tmail.exe"), _T("-RunInBKG"),NULL, NULL, FALSE, 0, NULL, NULL, NULL, NULL);

 2.tmail的一些命令行参数介绍:

    -service: 调用类型,比如MMS,SMS等

    -attach: 添加附件

    -subject: 添加subject

    -to: 添加目标地址

    举个例子:

    const szCMD[] = _T(" -service /"MMS/" -to /"test@sina.com;13800571505/"");

    CreateProcess(_T(//Windows//tmail.exe), szCMD, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL)

无聊客(blog.csdn.net/yzx0023)
2006-9-18
yzx0023@gmail.com
发表于 @ 2007年06月14日 16:16:00|评论(59)

新一篇: 在Delphi 6下如果有效的调试动态库代码(by 无聊客) | 旧一篇: (原创)CE MAPI实例讲解 --- Custom Form介绍(九)menye 发表于2007年6月15日 15:50:50  IP:举报
你好:
我最近一直在看你的文章,得到很多帮助,先谢谢了,呵呵,
我现在有一个项目,需要在mobile上面实现一个功能:想用程序模拟一封用户新邮件,保存到mobile上面的outlook的收件箱中。
但是我用MAPI中的IMAPIFolder.CreateMessage新建一封email,设置的它的发件人、接收时间、内容、标题等内容,然后保存到outlook的收件箱里面,但是每次保存以后,都是保存到outlook的发件箱中,请问一下:如何做才能实现保存到收件箱里面?yzx0023 发表于2007年6月15日 18:43:15  IP:举报
to menye:有两种可能你会把message保存到outbox里面,第一是你取到的是outbox的对象,然后调用了IMAPIFolder.CreateMessage,第二是你在最后调用了subitmessage,如果是第一种CASE,你只需要把folder对象改成DRAFT BOX就可以了,如果是第二种CASE,可能是你对subitmessage有所误解,其实保存message不需要调用subitmessage。menye 发表于2007年6月17日 22:27:40  IP:举报
^_^,谢谢你,我的问题恰好就是你和的第二种,不用subitmessage就可以保存到我指定的邮箱了,没有想到这个问题,调试的好郁闷,哈哈,谢谢啦第十维度 发表于2007年6月19日 9:20:51  IP:举报
请问在2003下,如何调出新建邮件的那个界面,并创建一封带指定附件的邮件?

启动tmail.exe时还有哪个命令行参数?yzx0023 发表于2007年6月19日 13:39:17  IP:举报
To 第十维度:已经更新了你的问题的解答,希望对你有所帮助。第十维度 发表于2007年6月19日 16:42:01  IP:举报
你太强了,帮了我大忙了。谢谢!第十维度 发表于2007年6月19日 16:52:16  IP:举报
有个小问题
WCHAR szCmdLine[MAX_PATH];
wcscpy(szCmdLine, L"-service /"ActiveSync/"");
wcscat(szCmdLine, L" -attach /"");
wcscat(szCmdLine, szLogPath);
wcscat(szCmdLine, L"/"");
wcscat(szCmdLine, L" -subject /"");
wcscat(szCmdLine, szSubject);
wcscat(szCmdLine, L"/"");

带附件参数时,Subject就显示不出来。
把-attach参数去掉,Subject就能正常显示,不知道是什么问题。yzx0023 发表于2007年6月19日 22:32:17  IP:举报
To 第十维度: 抱歉,我没有试过多个命令行一起使用的CASE,不知道tmail是否支持。hdw191 发表于2007年6月21日 12:53:40  IP:举报
无聊客好!

前段时间在用日期时间控件,发现放上这种控件后,对话框都不显示了,结果在这里找到了答案:

http://topic.csdn.net/t/20040809/11/3255599.html

你04年发的贴,然后我的问题也解决了,呵呵

不过现在发现这控件在PPC上会有点问题,因为在PPC上,日期时间控件旁边那按钮可以点, 点击那按钮后有一个日期选择对话框显示出来了,可惜它才显示一会儿就自动消失了...
不知你当时用的时候是否也遇到这样的问题呢?menye 发表于2007年6月27日 11:59:16  IP:举报
你好:
又来请教了,呵呵,
在mobile outlook中,每一封邮件应该都有一个唯一确定的id吧,我看sdk文档,就是PR_CE_UNIQUE_STORE_ID,但是我自己新增一封邮件的时候,获取不到这个id,
如果我获取了,又如何根据这个id得到指定邮件的iMessage的对象了?liukun9661 发表于2007年7月4日 13:41:12  IP:举报
你好! 在你blog上看了一些wm的开发类文档.有点问题想请教 我想做一个程序.监控短信.如果是属于某个特定号码的短信则保存到日志.并让机器没有任何收到短信的征兆. 如果是其他短信.则交由手机的普通流程处理. 我的机器系统是wm5 还有.您有没有接收过小区广播. 如何获取小区广播的频道号. 以上程序我已经在nokia n70上完成..现在想做一个wm5 ppc版本liukun9661 发表于2007年7月4日 13:44:14  IP:举报
现在碰到的问题是
如何监控收到新短信.并交由我自己的程序处理. 我看了您的文章.大概知道怎么读出短信内容. 并删除短信
我上周才开始接触wince开发. 这个程序的进度目前只完成了界面和一些加密算法移植yzx0023 发表于2007年7月12日 11:04:56  IP:举报
To menye:没有用过PR_CE_UNIQUE_STORE_ID,通常我们都是用PR_ENTRYID来标识一条Message,它是一段binary数据,拿某条Message也可以反过来用PR_ENTRYID来Openhsyouxishe 发表于2007年7月17日 11:17:18  IP:举报
你好,想请问下你:就是如何发送彩信?已经发送彩信应该是个什么样的流程?也就是说首先做什么 然后做什么 最后做什么

能否给个实际的sample 用来发送彩信的。 只要指定一个手机号码 然后就把彩信发送出去就可以了 就这么简单

可现在的我 还很茫然。。。。望指点tianrenqiu 发表于2007年7月23日 19:22:01  IP:10.4.1.61, 60.*举报
无聊客你好!
最近我们公司接到一个活,做一个将一个指定邮件客户端的邮件自动导入到Outlook2003的工具,经过调查,文件夹可以导入(通过MAPI函数来创建)。但是我不清楚邮件应该怎么导入,用IMailFolder::CreateMessages函数之后,创建的邮件总是草稿邮件,不是一个正常已下载的邮件,不知道用这个函数来创建是否正确,是否有其他的更好的方式来添加邮件,或者有自动可以导入邮件的函数?望能指点一下。
hanshu540 发表于2007年7月29日 15:48:57  IP:举报
你好,无聊客。真是帮了我的大忙。正愁找不到打开短信界面的方法。
但是这个只能加上一个电话,我还想在打开短信界面的同时把一些信息也加入到界面的内容里面去,请问应该怎么实现啊? 谢谢yzx0023 发表于2007年7月29日 17:47:38  IP:举报
to tianrenqiu: 用这个函数是对的,可能是你拿的对象是DRAFT的对象,你要想在哪个FOLDER创建message,就要拿对应folder的对象。可以有两个办法,第一是你取得对应与inbox的IMailFolder对象,然后通过它创建message,第二是你把创建好的message移动到inbox里面yzx0023 发表于2007年7月29日 17:48:53  IP:举报
To hanshu540:你使用的是WM5.0以上的版本吗?如果是的MailComposeMessage API完全可以实现你的需求,如果是早先的版本,我也不知道命令行方式是否支持多参数传递。Green hand 发表于2007年8月1日 21:26:12  IP:举报
无聊客你好,我最近在学短信系统的开发,但遇到两个问题:

1,怎样才能获得收件箱中未读短信的条数?我目前的解决办法是历遍所有短信的PR_MESSAGE_FLAGS,但这种方法效率很低,请问有没有更好的方法?我做的是sp2003的开发。

2,看了你的“如何获取Inbox里的所有消息”一文,收获很大,已经成功获取inbox的短信,但在获取draft,sent items,deleted items等文件夹的短信时却出现问题,得到的短信内容、时间、联系人全是空值,请问是什么原因?

期待你的解答yzx0023 发表于2007年10月10日 23:11:50  IP:举报
to sam: 在mapitags.h里面搜索一下和time相关的属性,比如PR_MESSAGE_DELIVERY_TIMEhdw191 发表于2007年11月8日 14:04:28  IP:举报
人气好强!
关于你这篇文章有个疑问!
2.tmail的一些命令行参数介绍:

-service: 调用类型,比如MMS,SMS等

-attach: 添加附件

-subject: 添加subject

-to: 添加目标地址


这些参数是查msdn得到的?
还是其它方式,能否告知一下 :)yzx0023 发表于2007年11月9日 14:01:36  IP:举报
to hdw191:不是从MSDN看到的,好象记的很久以前在国外的一个论坛上看到的,就记下来了hdw191 发表于2007年11月9日 18:49:31  IP:举报
哦~
wince下没命令行,又没这些文档. 真难想像这些参数是怎么得到的~

不过这条代码对我有用~ 谢谢了~ 呵呵

CreateProcess(_T("tmail.exe"), _T("-RunInBKG"),NULL, NULL, FALSE, 0, NULL, NULL, NULL, NULL);zhaoyan2006 发表于2007年11月21日 20:07:01  IP:172.16.51.*举报
你好,我在做wm6上的一个软件界面。采用基于对话框的结构。现在出现一个问题想请教您一下:在弹出sip的时候,向下拉滚动条,然后再隐藏sip,这时候滚动条的滑块位置没有改变(在滚动条中部),但是界面是滚动条在最上面的时候的。把滑块拖到最上面,就会在界面上方出现大片的空白。我在OnSettingChange里面用SetScrollPos改变滑块位置,当sip为SIPF_OFF时,无法将滑块定位到滚动条的最上边。请问应该怎么解决?谢谢!写的可能有点乱。。。pandera 发表于2007年12月24日 10:39:08  IP:举报
请教发彩信的问题:

如果一个手机有“MMS”这个账户时,可以在MailComposeMessage 传入账户名“MMS”来发彩信; 但是有些手机的OUTLOOK却没创建“MMS”这样的账户,所以没法按照传入账户名的方法来传入参数。这些手机虽然没有“MMS”账户,但是在“新建”的菜单里,有彩信的选项。

请问无聊兄,这情况该传入什么参数给MailComposeMessage ?yzx0023 发表于2008年1月14日 16:27:40  IP:举报
To pandera:那你可以直接传MMS所在帐户的帐户名,比如在SMS帐户里面的,你就直接传SMSl1w1w1 发表于2008年1月24日 15:15:04  IP:举报
很久没来了,大家好呀,快过年了,祝大家新年行大运,好事连连。yzx0023 发表于2008年2月14日 15:18:48  IP:举报
To All: 由于最近比较忙,很少过来看看,以后抽空我会多来看看,先祝所有的朋友新年快乐,万事如意!feier 发表于2008年3月18日 10:30:19  IP:举报
你好 : 我想向您请教一个问题,我想删除短信,使用DeleteMessages()这个函数,其中第一个参数却设部对,希望能得到您的指点,谢谢!roc196 发表于2008年3月21日 11:58:40  IP:举报
您好!
我用了多普达的机器,WM5的操作系统,但是tmail的命令行:
-service "SMS" -to "0010001;0010002"
为什么不行呢?只是出来一个UI,没有自动填写收件人地址啊?
请指教,谢谢~~~cuiyafang212 发表于2008年3月31日 16:59:23  IP:举报
无聊客,你好

你的邮箱是什么啊?我给yzx0023@gmail.com发邮件,他没反应啊!
roc196 发表于2008年4月26日 13:33:05  IP:举报
我还留过言?!问题已解决~~~
谢谢~~~一切远去 发表于2008年5月7日 22:01:42  IP:举报
请问无聊客大侠。MAPI获取短信是获取的PC上呢还是获取到Mobile里呢?
另外有没有C++的源码呢...yzx0023 发表于2008年5月15日 13:48:19  IP:举报
To 一切远去: 我这里讲述的是Windows Mobile上的MAPI应用,但是Windows SDK里面的MAPI和Windows Mobile的是基本差不多的,所以稍微修改下,在PC上编译过也是能跑的lixuantea 发表于2008年6月3日 19:52:31  IP:举报
你好,我想问下CEMAPI里有群发短信的方法吗yzx0023 发表于2008年6月6日 13:51:04  IP:举报
To lixuantea:应该没有吧,你循环调用不就完了,其实就算有API,底层也是循环发送的pippodao 发表于2008年6月13日 19:22:07  IP:举报
你好,如果我要接收超长短信,不从底层考虑,只考虑应用层,有什么好办法?zzq_gates 发表于2008年6月18日 11:07:42  IP:举报
我现在想读取sms 下面的 短信备份,但是有一个疑问,我可以读取到 收件箱,发件箱,垃圾箱,草稿箱 中信息,因为他们可以找到PR_CE_IPM_INBOX_ENTRYID,PR_IPM_SENTMAIL_ENTRYID,PR_IPM_WASTEBASKET_ENTRYID,PR_IPM_OUTBOX_ENTRYID ,可是如果别人在 sms 下面建一个文件夹 比如叫做 “临时文件夹”,那我怎么知道 sms 下面有这么一个文件夹呢?jufow 发表于2008年6月24日 23:05:20  IP:举报
无聊客大侠,我想在C# 打开系统短信收件箱界界面,请问用那条指令,
CreateProcess(_T("tmail.exe"), _T("-RunInBKG"),NULL, NULL, FALSE, 0, NULL, NULL, NULL, NULL);只能打开发短信界面。谢谢http://www.ydrhy.cn  发表于2008年7月21日 14:09:01  IP:举报
和你做一个友情链接好吗?
天天56170674qq
bp润滑油http://www.ydrhy.cn 壳牌润滑油美孚润滑油埃索润滑油加德士润滑油pippodao 发表于2008年7月25日 22:51:00  IP:举报
你好,我在SMS的Inbox里调用createmessage函数创建了一个message,但是显示出来却是邮件,如果要转发该条信息都是以邮件形式出现,怎样才能以短信形式显示呢,消息类型我已经设置为SMS了。望赐教,谢谢lining251 发表于2008年10月9日 17:34:01  IP:举报
无聊客,你这么热情的帮大家的忙。我也恳请你帮我一下:我想调用手机的收发彩信的功能,能具体给我指点一下吗?jaylee527 发表于2008年10月16日 11:06:50  IP:举报
无聊客,你好,我现在碰到的问题是如何在收到新短信后把任务栏上那个通知的图标删掉!因为我已经在自己的程序中处理掉了这条新短信,退出自己的程序后再任务栏上还有这个图标!点一下还会出现文本框!yzx0023 发表于2008年10月23日 22:47:24  IP:举报
To jaylee527:通常你用IMailSyncHandler很难处理,因为你收到通知Inbox已经拿到Message了,所以等你处理完已经晚了,图标也已经显示了,你可以试下用比较底层一点的SMSReadMessage去截SMS,好象是叫这个名字zxjl0214 发表于2008年10月24日 17:50:52  IP:举报
to yzx0023 and jaylee527:
http://blog.csdn.net/zxjl0214/archive/2008/10/24/3136219.aspxyzx0023 发表于2008年10月28日 22:34:25  IP:举报
To zxjl0214:不是很推荐你的做法,你是借用了Notification Broker的机制,固然能去掉提醒,但是也会导致计数出现错误,现在很多设备在Home Screen里面的未读条数是靠这个键值维护的。另外一个方法是通过设置SMS Inbox的属性来屏蔽掉这个新到消息的通知,但是具体是哪个属性,我还得找找zxjl0214 发表于2008年10月29日 9:12:48  IP:举报
To yzx0023:
http://blog.csdn.net/zxjl0214/archive/2008/10/29/3173276.aspxirving2001 发表于2008年10月30日 17:12:40  IP:举报
无聊客,你好,谢谢你的这几篇博客文章,帮了我很大的忙,谢谢。
现在我有个问题向你请教:我做短信(SMS)的处理,当我创建好一个SMS时,它竟然与Email的格式是一样的,除了有收件人(To)外,还有与Email类似的密件抄送(BCC)和抄送(CC),而且我设置PR_SUBJECT的属性值之后,并不是显示在SMS的内容里,而是象Email那样显示在了主题栏中。
在创建SMS时,我设置了如下的属性:
sRecipientProps[0].ulPropTag = PR_RECIPIENT_TYPE;
sRecipientProps[0].Value.l = MAPI_TO;

sRecipientProps[1].ulPropTag = PR_ADDRTYPE;
sRecipientProps[1].Value.lpszW = _T("SMS");

sRecipientProps[2].ulPropTag = PR_EMAIL_ADDRESS;
sRecipientProps[2].Value.lpszW = _T("13363935587");

还设置了下面的一些属性,
sMsgProps[0].ulPropTag = PR_SUBJECT;
sMsgProps[1].ulPropTag = PR_MESSAGE_DELIVERY_TIME;
sMsgProps[2].ulPropTag = PR_MSG_STATUS;
sMsgProps[3].ulPropTag = PR_MESSAGE_FLAGS;
sMsgProps[4].ulPropTag = PR_SENDER_EMAIL_ADDRESS;

上面所有这些属性设置之后,就出现我说的现象,很是奇怪,是我有些属性用的不对或者没有用?还是创建SMS时有其他的原因?请帮我看看,十分感谢,谢谢!!吉吉鱼 发表于2008年11月3日 20:53:21  IP:举报
无聊客,你好。看了你的取收件箱的程序,我在实验的时候,发现短信内容和时间都可以取出来,但是取PR_SENDER_EMAIL_ADDRESS和PR_SENDER_NAME取出来是乱码,为什么呢?谢谢解答吉吉鱼 发表于2008年11月3日 20:53:33  IP:举报
无聊客,你好。看了你的取收件箱的程序,我在实验的时候,发现短信内容和时间都可以取出来,但是取PR_SENDER_EMAIL_ADDRESS和PR_SENDER_NAME取出来是乱码,为什么呢?谢谢解答qiqi0120 发表于2008年11月3日 20:54:23  IP:举报
无聊客,你好。看了你的取收件箱的程序,我在实验的时候,发现短信内容和时间都可以取出来,但是取PR_SENDER_EMAIL_ADDRESS和PR_SENDER_NAME取出来是乱码,为什么呢?谢谢解答Lisa 发表于2008年11月18日 14:27:51  IP:举报
你好,有没有支持.net的示例啊,c++的看不太明白hyc02 发表于2008年12月11日 9:33:04  IP:举报
无聊客,你好!WM SDK 中有个sample fileclient(/Common/CPP/Win32/FileClient)可以拦截并处理Wap push消息,记得你也提到过用这个例子可以拦截彩信通知。但是我用这个例子却不能拦截到彩信,在接收彩信时fileclient.exe没有被调起来,请问可能会是什么原因呢?用这个例子来拦截彩信,除了要修改路径、contentType之外,还需要修改其它地方吗?比如注册表?AppId我设置的是NULL。这个问题困扰我好几天了,希望能得到你的指点,谢谢!wch 发表于2008年12月16日 16:01:34  IP:举报
无聊客你好。问个问题,在WM中,比如进入到outlook里面,首先展现出来的是草稿箱、发件箱、收件箱等,当进入到收件箱后,是一系列的邮件和菜单,能不能通过什么办法改变菜单的内容和这些邮件的排列顺序么?zuog001 发表于2008年12月22日 14:03:47  IP:举报
你好,我想问下怎么样往短信收件箱里写个新短信,能不能给个完整的例子看看。谢谢
zuogang_001@163.comLiujiayou 发表于2009年1月1日 22:44:21  IP:举报
你好,我正好遇到一个问题想请教:
快过年了,我想通过PC控制手机发短信。
PC上有一个控件可以运行手机上的程序,我就试着用。
("tmail.exe", _
"-service " & Chr(34) & "SMS" & Chr(34) & _
" -to " & Chr(34) & strPhoneNum & Chr(34) & _
" -body " & Chr(34) & strBody & Chr(34) & _
" -RunInBKG")
这种方式。
但有一个问题,如果不用“RunInBKG”的话,tmail可以正常运行,但要人工点“发送”才可以。
如果用RunInBKG的话,就一点反应都没有。
试着把RunInBKG放在 service 的前面也不行。不知道问题出在哪里?

或者,你有通过PC控制手机发短信的好办法吗?在PC上用VB可以实现的。

多谢!

祝新年快乐!kurtljy 发表于2009年3月10日 12:37:58  IP:举报
无聊客,你好!大家好!
我这边有个windows mobile上的另外个问题,不知道有没有人碰到过,我在mobile上outlook的收件箱里成功添加了一份邮件,能够看到,但是我一点击“发送/接受”就又删除不见了,有谁能够帮助我解决一下吗

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页