65.9K
CodeProject 正在变化。 阅读更多。
Home

CMapi v1.01 - MAPI 实现

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (20投票s)

2000 年 3 月 4 日

viewsIcon

332918

downloadIcon

3317

用于使用 Simple MAPI 发送邮件的 MFC 类。

引言

欢迎使用 CMapi,这两个简单的类封装了使用 Simple MAPI 发送邮件的功能。

Simple MAPI 是 MAPI32.dll 导出的函数集,它允许您以独立于传输的方式发送和接收邮件。自 Windows 95 起(不包括 Windows CE),它是所有 Win32 操作系统的一个可选部分。与 Internet 邮件标准 SMTP 相比,MAPI 更侧重于企业环境,例如,MS Exchange Server 等产品广泛使用 MAPI。有适用于多种消息传输的传输提供程序,包括 Exchange Server、SMTP、Fax、cc:Mail CompuServe 等。为了能够指定不同的传输,MAPI 提供了配置文件(profile)的概念,这些配置文件可以通过“邮件”控制面板小程序进行设置。

目录

特点

  • 简洁的 C++ 接口。
  • 所有代码均符合 UNICODE 标准,并提供了相应的生成配置。尽管 Simple MAPI 只导出了其函数的 ASCII 版本,但该类内部会执行必要的转换。
  • 如果需要,该代码可以在控制台应用程序中使用,或者在不弹出任何 Mapi 对话框的情况下使用。
  • 该代码能优雅地处理客户端计算机上未安装 MAPI 的情况。在内部,该类会加载 DLL 并使用 GetProcAddress() 调用。

用法

  • 要在您的代码中使用该类,只需将 cmapi.cpp 包含在您的项目中,并在需要调用这些类的任何模块中包含 #include cmapi.h
  • 您的代码需要静态或动态地包含 MFC。
  • 您可能希望将 mapi.h 添加到预编译头文件中以提高编译速度。生成消息会对此进行提示。
  • 要查看该类如何工作,请查看 app.cpp 模块中的 InitInstance() 代码。

历史

V1.0 (1999 年 5 月 14 日)

  • 首次公开发布

V1.01 (1999 年 12 月 5 日)

  • 修复了当 CMapi 用于控制台应用程序时可能出现的潜在问题,该问题会导致 ASSERT
  • 修复了在进行交互式 MAPI 登录时,如果您关闭登录对话框可能出现的断言。

API 参考

API 由以下两个类及其方法和变量组成

CMapiMessage

CMapiSession

CMapiMessage::m_To
备注

m_To 的类型为 CStringArray,包含要发送电子邮件的收件人数组。每个收件人的名称可以是友好名称(友好名称是指在地址簿中有条目的收件人所知的名称,例如,“PJ at Work”可能映射到使用 SMTP MAPI 传输发送给 pj.naughter@softech-telecom.com)或者可以是特定的传输地址,例如 SMTP:pjn@indigo.ie、FAX:34567 等。

CMapiMessage::m_CC
备注

m_CC 的类型为 CStringArray,包含电子邮件将要抄送(Carbon Copied)的收件人数组。地址的指定方式与 m_To 相同。

CMapiMessage::m_BCC
备注

m_BCC 的类型为 CStringArray,包含电子邮件将要密送(Blind Carbon Copied)的收件人数组。地址的指定方式与 m_To 相同。

CMapiMessage::m_sSubject
备注

m_sSubject 的类型为 CString,是电子邮件的主题行。

CMapiMessage::m_sBody
备注

m_sBody 的类型为 CString,是电子邮件的正文。

CMapiMessage::m_Attachments
备注

m_Attachments 的类型为 CStringArray,是包含要作为附件添加到电子邮件中的文件名列表。

CMapiMessage::m_AttachmentTitles
备注

m_AttachmentTitles 的类型为 CStringArray,包含收件人看到的文件附件的标题。如果将此数组留空,则标题将与文件名相同。例如,请查看 app.cpp 模块中的 InitInstance() 代码,了解 autoexec.bat 附件如何具有标题 my autoexec.bat

CMapiSession::CMapiSession
CMapiSession();

备注

类的标准构造函数。此类是主要的 MAPI 支持类,包含实际发送邮件消息的函数。

CMapiSession::~CMapiSession
~CMapiSession();

备注

类的标准析构函数。在内部,如果已登录 MAPI,则会注销并卸载 MAPI DLL。

CMapiSession::Logon
BOOL Logon(const CString& sProfileName, const CString& sPassword = CString(), CWnd* pParentWnd = NULL);

返回值

如果成功登录到 MAPI,则返回 TRUE,否则返回 FALSE

参数

  • sProfileName -- 用于登录的 MAPI 配置文件名
  • sPassword -- 配置文件关联的密码(如果有)
  • pParentWnd -- 父窗口,指示如果显示对话框,则该对话框相对于

备注

登录到 MAPI 消息系统,与之创建会话。如果传递空配置文件名,则 Logon 会尝试通过显示正常的 MAPI 登录对话框进行交互式登录。将 NULL 指定为父窗口(这是默认值)将使用 AfxGetMainWnd() 返回的窗口。请注意,您必须先登录到 MAPI 才能发送消息。在内部,代码会进行 ASSERT 以确保您不会忘记执行此操作。

CMapiSession::LoggedOn
BOOL LoggedOn() const;

备注

简单的访问器,如果此实例已登录到 MAPI,则返回 TRUE,否则返回 FALSE

CMapiSession::Logoff
BOOL Logoff();

返回值

如果成功从 MAPI 注销,则返回 TRUE,否则返回 FALSE

备注

Logon 相对应的函数。在内部,此函数在 CMapiSession 析构函数中被调用。

CMapiSession::Send
BOOL Send(CMapiMessage& message);

返回值

如果消息成功发送,则返回 TRUE,否则返回 FALSE

参数

  • message -- 要发送的消息

备注

使用当前登录的 MAPI 配置文件发送“message”参数中指定的邮件。

CMapiSession::MapiInstalled
BOOL MapiInstalled() const;

备注

简单的访问器,如果 MAPI 已安装并已正确初始化,可以供此实例使用,则返回 TRUE。MAPI DLL 的实际加载由 CMapiSession 构造函数在内部处理,这意味着您可以在构造 CMapiSession 实例后的任何时间调用此函数。

CMapiSession::GetLastError
DWORD GetLastError() const;

返回值

CMapiSession 实例生成的最后一条 MAPI 错误。

备注

由于该类使用 MAPI,而 MAPI 有其自己的一套与标准 Win32 方式(GetLastError())不同的错误报告方式,因此此方法允许检索该值。MAPI 错误记录在您的 VC include 目录下的 MAPI.h 文件中。

计划增强功能

  • 将代码打包成 OCX、COM 接口或 DLL,以便非 MFC 应用程序也能使用这些代码。
  • 提供一个更好的示例应用程序。目前,它更像是一个测试程序,用于测试所提供类中的所有函数。
  • 如果您有任何其他改进建议,请告诉我,以便我将其纳入下一个版本。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.