这个有必要记录一下,在使用 MAPI 发送中文短信时,会发现所有的英文都很正常,但是中文却变成了 "?" 这样的乱码。在接收端用内存视图查看,会发现这个 "?" 是真正的问号字符,而不是乱码。
出现这个问题的原因是发送端未将短信属性设为 Unicode 格式,具体代码如下:
C++代码
MAPINAMEID idName;
ZeroMemory(&idName,
sizeof
(MAPINAMEID));
idName.lpguid = (LPGUID)&PS_MAPI;
idName.ulKind = MNID_STRING;
idName.Kind.lpwstrName = L
"SMS:Unicode"
;
LPMAPINAMEID pidName = &idName;
LPSPropTagArray pPropTag = NULL;
HRESULT
hr = pMessage->GetIDsFromNames(1, &pidName, MAPI_CREATE, &pPropTag);
这样就获得了 Unicode 短信属性的 Tag,接下来就可以设置短信并发送了。
SPropValue props[5];
ZeroMemory(&props,
sizeof
(props));
props[0].ulPropTag = PR_SUBJECT_W;
props[0].Value.lpszW = L
"你好,世界!"
;
props[1].ulPropTag = PR_SENDER_EMAIL_ADDRESS;
props[1].Value.lpszW = L
""
;
props[2].ulPropTag = PR_MSG_STATUS;
props[2].Value.ul = MSGSTATUS_RECTYPE_SMS;
props[3].ulPropTag = PR_MESSAGE_FLAGS; props[3].Value.ul = MSGFLAG_FROMME | MSGFLAG_UNSENT; props[4].ulPropTag = CHANGE_PROP_TYPE(pPropTag[0].aulPropTag[0], PT_BOOLEAN); props[4].Value.b = TRUE; hr = pMessage->SetProps(
sizeof
(props) /
sizeof
(props[0]), (LPSPropValue)&props, NULL); hr = pMessage->SubmitMessage(0);
另外,值得一提的是,PS_MAPI 要自己定义一下了,如果找不到的话:
GUID PS_MAPI = {0x00020328, 0, 0, 0xC0,0,0,0,0,0,0,0x46};
相关推荐
"使用 MAPI 实现邮件发送" 一、简述 使用 MAPI(Messaging Application Programming Interface)可以实现邮件发送功能。在本文中,我们将使用 Simple MAPI,这是一个子集,提供了一组易于使用的函数和相关数据结构...
在VB(Visual Basic)编程中,使用MAPI(Messaging Application Programming Interface)控件发送邮件是一种常见的方法,尤其在早期的Windows应用程序开发中。MAPI提供了一种标准接口,允许应用程序与邮件系统进行...
- 使用MAPI发送邮件可能需要安装相应的邮件客户端,如Outlook,因为MAPI通常依赖本地的邮件客户端。 6. **示例代码**: 下面是一个简单的MFC程序中使用MAPI发送邮件的示例: ```cpp #include <mapi.h> void ...
在VB(Visual Basic)编程中,使用MAPI(Messaging Application Programming Interface)发送邮件是一种常见的方法。MAPI允许程序与电子邮件系统进行交互,如Outlook,从而实现自动化发送邮件的功能。以下将详细介绍...
此外,还可以参考一些社区论坛和在线教程,例如查阅 `Mapi98.CHM` 文件,这是一份详细的帮助文档,包含了关于 MAPI 控件的所有使用方法和实例。 通过以上介绍,我们可以看到,利用 MAPI 控件实现邮件的自动化发送...
在.NET Compact Framework环境下,开发针对Windows Mobile等移动设备的软件时,也需要处理邮件功能,这就需要用到MAPI的C#封装。 本文将详细介绍如何在.NET Compact Framework中使用MAPI .NET CF,以及提供的文件...
4. **邮件的创建与附件**:在使用MAPI控件发送文件时,需要设置邮件的收件人、抄送人、主题和正文。同时,通过`MAPI.AddAttachment`方法可以将10KB大小的文件作为附件添加到邮件中。由于文件较小,这个大小限制可能...
3. **使用MAPI发送邮件**:在C++中,可以通过包含"IMAPI.CPP"和"IMAPI.H"这两个文件来实现MAPI功能。`IMAPI`通常包含了封装MAPI接口的类,`IMAPI.H`则是相关的头文件,定义了接口和常量。开发者需要创建一个MAPI会话...
### 实例:使用MAPI发送邮件 假设我们需要开发一个简单的应用,该应用能够通过MAPI接口发送邮件。下面是一个简化的流程: 1. **初始化MAPI会话**:首先需要调用`Logon`函数来创建一个MAPI会话。 2. **获取默认存储...
这可能包括短信的收件人、发件人、时间戳、内容等信息。对于MAPI,可能涉及到从邮件服务器检索短信,而不是直接访问手机存储。 5. **解析和显示**:将获取到的短信数据解析成应用程序可以处理的格式,然后在界面上...
MAPI(Messaging Application Program Interface)是Microsoft提供的一种电子邮件程序接口,允许开发者使用Outlook Express系统进行电子邮件的发送和接收。该接口提供了一些基本的电子邮件处理函数,包括邮件的发送...
4. **示例代码分析**:Demo中的代码可能包含了初始化MAPI会话、选择或创建邮件存储、打开邮件文件夹、创建新邮件、附件处理、发送邮件等常见操作的示例。通过这些代码,开发者可以学习到如何在Delphi 2010中正确地...
总的来说,通过学习和理解这些源码,你可以掌握在MFC程序中利用MAPI发送邮件的方法,这对于开发具有邮件功能的应用程序非常有用。然而,由于MAPI本身较为复杂,实际使用时可能还需要查阅更多的文档和参考资料来完善...
一个使用MAPI发送邮件的例子,推荐下载
在项目"MAPI Test"中,我们可以看到一个简单的实现示例,它演示了如何使用上述方法发送一条短信。这个例子可以帮助我们更好地理解和应用MAPI接口,进一步完善我们的Windows Mobile SMS应用程序。 需要注意的是,...
这篇内容将详细介绍如何在Delphi中使用MAPI发送邮件,并结合提供的"sendmail.dcr"和"sendmail.pas"文件来解析其核心功能。 首先,要使用MAPI,你需要引入相关的库。在Delphi中,这通常通过引入`mapi32.lib`库和包含...
标题中的“用MAPI发送邮件”指的是通过Microsoft Messaging Application Programming Interface (MAPI)来实现电子邮件的发送功能。MAPI是一种标准的接口,允许应用程序与邮件系统进行交互,包括创建、发送、接收和...
MAPI提供了一套标准的API,使得开发者能够实现邮件发送、接收、存储和管理等功能,而无需关心底层的通信协议细节。 在【MAPI.rar_MA_mapi】这个压缩包中,包含的是一个关于使用MAPI进行电子邮件应用程序开发的源...
ruby下用mapi发送邮件