MAPISendMailHelper 函数 (mapiunicodehelp.h)

获取 Unicode 邮件信息并使用 MAPISendMailW 发送消息,或者如有必要,将邮件转换为 ANSI 并使用 MAPISendMail 发送消息。 在Windows 8及更高版本上:直接调用 MAPISendMailW 以发送邮件。

语法

ULONG MAPISendMailHelper(
  [in] LHANDLE        lhSession,
  [in] ULONG_PTR      ulUIParam,
  [in] lpMapiMessageW lpMessage,
  [in] FLAGS          flFlags,
  [in] ULONG          ulReserved
);

参数

[in] lhSession

简单 MAPI 会话的句柄或零。

如果 lhSession 参数的值为零,则 MAPI 将记录用户并创建仅在调用期间存在的会话。 此临时会话可以是现有共享会话,也可以是新会话。 如有必要,将显示登录对话框。

[in] ulUIParam

父窗口句柄或零。

如果 ulUIParam 参数的值为零并且显示对话框,则对话框为应用程序模式。 如果 ulUIParam 参数包含父窗口句柄,则其类型为 HWND (强制转换为 ULONG_PTR) 。 如果在调用期间未显示任何对话框,则忽略 ulUIParam

[in] lpMessage

指向包含要发送的邮件的 MAPISendMailW 结构的指针。

如果已注册的邮件提供程序要求邮件使用 ANSI 编码, MAPISendMailHelper 会将此邮件转换为 ANSI MapiMessage 结构,调用 MAPISendMail 来发送邮件。

调用函数时,请注意有关消息结构成员的以下信息:

成员 备注
lpFiles 当邮件没有文件附件时,将此成员设置为 NULL
lpszMessageType 由不处理人际消息的应用程序使用。 如果应用程序处理人际消息,请将 lpszMessageType 成员设置为 NULL ,或将其设置为指向空字符串。
lpszSubject NULL 值表示邮件的主题没有文本。
lpszNoteText NULL 值表示 消息正文中没有文本。
lpRecips NULL 值表示 没有收件人。 此外,如果此成员为 NULL则 nRecipCount 成员必须为零。
nRecipCount 如果值为零,则表示没有收件人。 此外,如果此成员为零, 则 lpRecips 成员必须为 NULL
 
提示 调用 函数且没有收件人时,必须设置 MAPI_DIALOG 标志或 MAPI_DIALOG_MODELESS 标志以提示用户输入收件人信息。
 
如果未设置 MAPI_DIALOGMAPI_DIALOG_MODELESS ,则结构的 nRecipCountlpRecips 成员必须有效才能成功传递消息。 客户端应用程序可以将 flFlags 成员设置为 MAPI_RECEIPT_REQUESTED 以请求读取报表。

有关函数如何处理收件人信息的更多详细信息,请参阅处理 MAPISendMailW 中的收件人信息

[in] flFlags

选项标志的位掩码。 可以设置以下标志。

含义
MAPI_DIALOG
0x00000008
应显示一个对话框,提示用户输入收件人和其他发送选项。

如果未设置 MAPI_DIALOGMAPI_DIALOG_MODELESS ,则必须至少指定一个收件人。

MAPI_DIALOG_MODELESS
0x00000004 |MAPI_DIALOG
适用于 Windows 7 或更低版本以及下一个 Office 版本: 应显示无模式对话框,提示用户输入收件人和其他发送选项。

如果设置了 MAPI_DIALOG_MODELESS ,则 lhSession 参数应设置为零。 否则,如果设置了此标志并且 lhSession 不为零,Outlook 将引发异常。

此外,如果设置了 MAPI_DIALOG_MODELESS ,系统会忽略 MAPI_NEW_SESSION 标志。

如果未设置 MAPI_DIALOGMAPI_DIALOG_MODELESS ,则必须至少指定一个收件人。

MAPI_LOGON_UI
0x00000001
应显示一个对话框,提示用户根据需要登录。

如果未设置 MAPI_LOGON_UI 标志,则客户端应用程序不会显示登录对话框,如果用户未登录,则返回错误值。

如果 lpszMessageID 参数为空,则 忽略MAPI_LOGON_UI 标志。

MAPI_NEW_SESSION
0x00000002
尝试创建新会话,而不是获取环境的共享会话。 如果未设置 MAPI_NEW_SESSION 标志,则函数将使用现有的共享会话。

如果设置 MAPI_NEW_SESSION 标志 (阻止使用共享会话) 并且配置文件需要密码,则还必须设置 MAPI_LOGON_UI 标志,否则函数将失败。 客户端应用程序可以通过使用没有密码的默认配置文件或不使用密码的显式配置文件来避免此故障。

MAPI_FORCE_UNICODE
0x00040000
如果提供程序不支持 Unicode,请不要将消息转换为 ANSI。

[in] ulReserved

保留;必须为零。

返回值

此函数返回以下值之一。

返回代码/值 说明
MAPI_E_AMBIGUOUS_RECIPIENT
21
收件人匹配多个收件人描述符结构,并且未设置MAPI_DIALOG。 未发送任何消息。
MAPI_E_ATTACHMENT_NOT_FOUND
11
找不到指定的附件。 未发送任何消息。
MAPI_E_ATTACHMENT_OPEN_FAILURE
12
无法打开指定的附件。 未发送任何消息。
MAPI_E_BAD_RECIPTYPE
15
收件人的类型不是MAPI_TO、MAPI_CC或MAPI_BCC。 未发送任何消息。
MAPI_E_FAILURE
2
发生了一个或多个未指定的错误。 未发送任何消息。
MAPI_E_INSUFFICIENT_MEMORY
5
内存不足,无法继续。 未发送任何消息。
MAPI_E_INVALID_RECIPS
25
一个或多个收件人无效或未解析为任何地址。
MAPI_E_LOGIN_FAILURE
3
没有默认登录,并且显示登录对话框时用户无法成功登录。 未发送任何消息。
MAPI_E_TEXT_TOO_LARGE
18
消息中的文本太大。 未发送任何消息。
MAPI_E_TOO_MANY_FILES
9
文件附件太多。 未发送任何消息。
MAPI_E_TOO_MANY_RECIPIENTS
10
接收者太多。 未发送任何消息。
MAPI_E_UNICODE_NOT_SUPPORTED
27
指定 了 MAPI_FORCE_UNICODE 标志,并且不支持 Unicode。
注意 仅当调用 MAPISendMailW 来发送邮件时,才能返回此值。
 
MAPI_E_UNKNOWN_RECIPIENT
14
收件人未显示在地址列表中。 未发送任何消息。
MAPI_E_USER_ABORT
1
用户取消了其中一个对话框。 未发送任何消息。
SUCCESS_SUCCESS
0
调用成功,消息已发送。

注解

有关 MAPI 发送邮件函数的详细信息,请参阅 MAPISendMailW

要求

要求
目标平台 Windows
标头 mapiunicodehelp.h
DLL Mapi32.dll

另请参阅

MAPISendMailW

适用于 Windows 8 的 Windows SDK