MAPISENDMAILW 回调函数 (mapi.h)
发送 Unicode 消息。 此函数替换 ANSI 函数 MAPISendMail。
在 Windows 7 及更早版本上: 安装 适用于 Windows 8 的 Microsoft Windows 软件开发工具包 (SDK) ,并使用 MAPISendMailHelper 发送邮件。
除非另行指定,否则所有信息都适用于 MAPISendMailW 和 MAPISendMail 。
语法
MAPISENDMAILW Mapisendmailw;
ULONG Mapisendmailw(
[in] LHANDLE lhSession,
[in] ULONG_PTR ulUIParam,
[in] lpMapiMessageW lpMessage,
[in] FLAGS flFlags,
ULONG ulReserved
)
{...}
parameters
[in] lhSession
类型: LHANDLE
简单 MAPI 会话的句柄或零。
如果 lhSession 参数的值为零,则 MAPI 将记录用户并创建仅在调用期间存在的会话。 此临时会话可以是现有共享会话,也可以是新会话。 如有必要,将显示登录对话框。
[in] ulUIParam
类型: ULONG_PTR
父窗口句柄或零。
如果 ulUIParam 参数包含父窗口句柄,则句柄的类型为 HWND (强制转换为 ULONG_PTR) 。
如果在调用期间未显示任何对话框,则忽略 ulUIParam 。
[in] lpMessage
类型: lpMapiMessageW
指向包含要发送的邮件的 MAPISendMailW 结构的指针。
成员 | 注释 |
---|---|
lpFiles | 当邮件没有文件附件时,将此成员设置为 NULL 。 |
lpszMessageType | 由不处理人际消息的应用程序使用。 如果应用程序处理人际消息,请将 lpszMessageType 成员设置为 NULL ,或将其设置为指向空字符串。 |
lpszSubject | NULL 值表示邮件的主题没有文本。 |
lpszNoteText | NULL 值表示 消息正文中没有文本。 |
lpRecips | NULL 值表示 没有收件人。 此外,如果此成员为 NULL, 则 nRecipCount 成员必须为零。 |
nRecipCount | 如果值为零,则表示没有收件人。 此外,如果此成员为零, 则 lpRecips 成员必须为 NULL。 |
有关函数如何处理收件人信息的更多详细信息,请参阅处理备注中的收件人信息。
[in] flFlags
类型: FLAGS
选项标志的位掩码。 可以设置以下标志。
值 | 含义 |
---|---|
|
应显示应用程序模式对话框,提示用户输入收件人和其他发送选项。
如果未设置 MAPI_DIALOG 和 MAPI_DIALOG_MODELESS ,则必须至少指定一个收件人。 |
|
在具有下一个 Office 版本的 Windows 上可用: 应显示无模式对话框,提示用户输入收件人和其他发送选项。 如果设置了 MAPI_DIALOG_MODELESS ,则 lhSession 参数应设置为零。 否则,如果设置了此标志并且 lhSession 不为零,Outlook 将引发异常。 此外,如果设置了 MAPI_DIALOG_MODELESS ,系统会忽略 MAPI_NEW_SESSION 标志。 如果未设置 MAPI_DIALOG 和 MAPI_DIALOG_MODELESS ,则必须至少指定一个收件人。 提示 若要在 Windows 7 或更早版本上使用此标志,必须同时安装 适用于 Windows 8 的 Windows SDK 和 Office 的下一个版本,并且必须调用 MAPISendMailHelper 而不是 MAPISendMailW。
|
|
应显示一个对话框,提示用户根据需要登录。
如果未设置 MAPI_LOGON_UI 标志,则客户端应用程序不会显示登录对话框,如果用户未登录,则返回错误值。 如果 lpszMessageID 参数为空,则 忽略MAPI_LOGON_UI 标志。 |
|
尝试创建新会话,而不是获取环境的共享会话。 如果未设置 MAPI_NEW_SESSION 标志,则函数将使用现有的共享会话。
如果设置 MAPI_NEW_SESSION 标志 (阻止使用共享会话) 并且配置文件需要密码,则还必须设置 MAPI_LOGON_UI 标志,否则函数将失败。 客户端应用程序可以通过使用没有密码的默认配置文件或不使用密码的显式配置文件来避免此故障。 |
|
如果提供程序不支持 Unicode,请不要将消息转换为 ANSI。
注意 此标志仅适用于 MAPISendMailW 。
|
ulReserved
类型: ULONG
保留;必须为零。
返回值
类型: ULONG
此函数返回以下值之一。
返回代码/值 | 说明 |
---|---|
|
收件人匹配多个收件人描述符结构,并且未设置MAPI_DIALOG。 未发送任何消息。 |
|
找不到指定的附件。 未发送任何消息。 |
|
无法打开指定的附件。 未发送任何消息。 |
|
指定的附件太大。 未发送任何消息。 |
|
收件人的类型不是MAPI_TO、MAPI_CC或MAPI_BCC。 未发送任何消息。 |
|
发生了一个或多个未指定的错误。 未发送任何消息。 |
|
内存不足,无法继续。 未发送任何消息。 |
|
一个或多个收件人无效或未解析为任何地址。 |
|
没有默认登录,并且显示登录对话框时用户无法成功登录。 未发送任何消息。 |
|
消息中的文本太大。 未发送任何消息。 |
|
文件附件太多。 未发送任何消息。 |
|
接收者太多。 未发送任何消息。 |
|
指定 了 MAPI_FORCE_UNICODE 标志,并且不支持 Unicode。
注意 此值只能由 MAPISendMailW 返回。
|
|
收件人未显示在地址列表中。 未发送任何消息。 |
|
用户取消了其中一个对话框。 未发送任何消息。 |
|
调用成功,消息已发送。 |
注解
MAPISendMailW (Unicode) 和 MAPISendMail (ANSI) 函数都发送标准消息,无论是否具有任何用户交互。 必须配置配置文件,以便任一函数都可以打开默认服务提供程序,而无需用户交互。
MAPISendMailW 和 MAPISendMail 都不需要发起方类型的收件人来发送邮件。
客户端应用程序可以提供收件人姓名、主题文本、文件附件或邮件文本的完整列表或部分列表。 如果缺少任何信息, (MAPISendMailW 或 MAPISendMail) 调用的函数可以提示用户输入缺失的信息。
如果未缺少任何信息,则可以按原样发送消息,或者可以提示用户验证信息并在必要时更改值。
MAPISendMailW 和 MAPISendMail 都不同于 MAPISendDocuments 函数,因为它们允许在生成消息时具有更大的灵活性。
消息文本
某些客户端应用程序可以截断过长或包含回车符、换行符或表单源的主题行。每个段落都应以 CR (0x0d) 、LF (0x0a) 或 CRLF 对 (0x0d0a) 结尾。 MAPISendMailW 和 MAPISendMail 均根据需要换行。
如果文本超出系统限制,函数将返回 MAPI_E_TEXT_TOO_LARGE 值。
文件附件
在某些消息传送系统中,每封邮件的附件数可能会受到限制。 如果超出此限制,函数将失败并返回 MAPI_E_TOO_MANY_FILES 值。在函数返回之前,将文件附件复制到消息中;因此,以后对文件的更改不会影响消息的内容。 复制文件时,必须关闭这些文件。
不要尝试显示邮件文本范围之外的附件。
收件人
某些消息传送系统可以限制每封邮件的收件人数。 如果客户端应用程序传递指示超过系统限制的收件人数的非 NULL 值,则该函数将失败并返回 MAPI_E_TOO_MANY_RECIPIENTS 值。如果客户端应用程序将消息发送到一个或多个自定义收件人,并且你想要避免解析这些收件人的姓名,则必须指定自定义收件人的地址。
若要在调用 MAPISendMailW 时指定收件人的地址,必须将包含收件人信息的 MapiRecipDescW 结构的 lpszAddress 成员设置为自定义地址。 此 MapiRecipDescW 结构包含在存储在 MapiMessageW 结构的 lpRecips 成员中的收件人数组中,该成员由 lpMessage 参数传递给函数。
从 函数成功返回并不一定意味着接收方验证。 邮件可能尚未发送给所有收件人。 根据传输提供程序,收件人验证过程可能很长。
处理收件人信息
MapiMessageW 或 MapiMessage 结构的 lpRecips 成员可以包含条目标识符、收件人的姓名、地址或姓名和地址对。 下表显示了 函数如何处理每个事例。收件人信息 | 操作 |
---|---|
条目标识符 | 无名称解析;名称和地址将被忽略。 |
名称 | 使用简单 MAPI 解析规则解析的名称。 |
地址 | 无名称解析;address 用于邮件传递和显示收件人姓名。 |
名称和地址 | 无名称解析;name 仅用于显示收件人姓名。 |
要求
最低受支持的客户端 | Windows 8 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2012 [仅限桌面应用] |
目标平台 | Windows |
标头 | mapi.h |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈