Win32 API 日本語リファレンス
ホーム › System.Mapi › LPMAPISENDMAILW

LPMAPISENDMAILW

コールバック

シグネチャ

DWORD LPMAPISENDMAILW(
    UINT_PTR lhSession,
    UINT_PTR ulUIParam,
    MapiMessageW* lpMessage,
    DWORD flFlags,
    DWORD ulReserved
);

パラメーター

フィールド型説明
lhSessionUINT_PTR

Simple MAPI セッションのハンドル、またはゼロ。

lhSession パラメーターの値がゼロの場合、MAPI はユーザーをログオンさせ、呼び出しの間だけ存在するセッションを作成します。この一時的なセッションは、既存の共有セッションである場合も、新しいセッションである場合もあります。必要に応じて、ログオン ダイアログ ボックスが表示されます。

ulUIParamUINT_PTR

親ウィンドウのハンドル、またはゼロ。

ulUIParam パラメーターに親ウィンドウのハンドルを指定する場合、そのハンドルの型は HWND(ULONG_PTR にキャストしたもの)です。

呼び出し中にダイアログ ボックスが表示されない場合、ulUIParam は無視されます。

lpMessageMapiMessageW*

送信するメッセージを格納した MAPISendMailW 構造体へのポインター。

メモ MAPISendMail 関数の場合、このパラメーターは MapiMessage 構造体を指します。
この関数を呼び出す際は、メッセージ構造体のメンバーについて次の点に注意してください。
メンバー メモ
lpFiles メッセージに添付ファイルがない場合は、このメンバーを NULL に設定します。
lpszMessageType 対人メッセージを扱わないアプリケーションで使用します。アプリケーションが対人メッセージを扱う場合は、lpszMessageType メンバーを NULL に設定するか、空の文字列を指すように設定します。
lpszSubject NULL は、メッセージの件名のテキストがないことを意味します。
lpszNoteText NULL は、メッセージ本文にテキストがないことを意味します。
lpRecips NULL は、受信者がいないことを意味します。また、このメンバーが NULL の場合、nRecipCount メンバーはゼロでなければなりません。
nRecipCount ゼロは、受信者がいないことを意味します。また、このメンバーがゼロの場合、lpRecips メンバーは NULL でなければなりません。
ヒント 受信者がいない状態でこの関数を呼び出す場合は、MAPI_DIALOG フラグまたは MAPI_DIALOG_MODELESS フラグを設定して、受信者の情報の入力をユーザーに求める必要があります。
MAPI_DIALOG と MAPI_DIALOG_MODELESS のいずれも設定されていない場合、メッセージを正常に配信するには、構造体の nRecipCount メンバーと lpRecips メンバーが有効である必要があります。クライアント アプリケーションは、開封確認を要求するために flFlags メンバーに MAPI_RECEIPT_REQUESTED を設定できます。

この関数が受信者の情報をどのように扱うかの詳細については、解説 の 受信者情報の扱い を参照してください。

flFlagsDWORD

オプション フラグのビットマスク。次のフラグを設定できます。

値 意味
MAPI_DIALOG
0x00000008
受信者やその他の送信オプションの入力をユーザーに求めるために、アプリケーション モーダルのダイアログ ボックスを表示します。

MAPI_DIALOG と MAPI_DIALOG_MODELESS のいずれも設定されていない場合は、少なくとも 1 つの受信者を指定する必要があります。

MAPI_DIALOG_MODELESS
0x00000004 | MAPI_DIALOG
次期バージョンの Office を搭載した Windows で利用可能:

受信者やその他の送信オプションの入力をユーザーに求めるために、モードレス ダイアログ ボックスを表示します。

MAPI_DIALOG_MODELESS を設定する場合、lhSession パラメーターはゼロに設定してください。このフラグが設定されていて lhSession がゼロ以外の場合、Outlook は例外を発生させます。

また、MAPI_DIALOG_MODELESS が設定されている場合、システムは MAPI_NEW_SESSION フラグを無視します。

MAPI_DIALOG と MAPI_DIALOG_MODELESS のいずれも設定されていない場合は、少なくとも 1 つの受信者を指定する必要があります。

ヒント Windows 7 以前でこのフラグを使用するには、Windows SDK for Windows 8 と次期バージョンの Office の両方がインストールされている必要があり、MAPISendMailW ではなく MAPISendMailHelper を呼び出す必要があります。
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 に変換しません。
メモ このフラグは MAPISendMailW でのみ使用できます。
ulReservedDWORD予約済み。ゼロにする必要があります。

公式ドキュメント

Unicode メッセージを送信します。この関数は ANSI 関数 MAPISendMail を置き換えます。

Windows 7 以前の場合: Microsoft Windows Software Development Kit (SDK) for Windows 8 をインストールし、MAPISendMailHelper を使用してメッセージを送信してください。

特に明記しない限り、すべての情報は MAPISendMailW と MAPISendMail の両方に適用されます。

戻り値

型: ULONG

この関数は、次のいずれかの値を返します。

リターン コード/値 説明
MAPI_E_AMBIGUOUS_RECIPIENT
21
受信者が複数の受信者記述子構造体に一致し、かつ MAPI_DIALOG が設定されていませんでした。メッセージは送信されませんでした。
MAPI_E_ATTACHMENT_NOT_FOUND
11
指定された添付ファイルが見つかりませんでした。メッセージは送信されませんでした。
MAPI_E_ATTACHMENT_OPEN_FAILURE
12
指定された添付ファイルを開けませんでした。メッセージは送信されませんでした。
MAPI_E_ATTACHMENT_TOO_LARGE
28
指定された添付ファイルが大きすぎました。メッセージは送信されませんでした。
MAPI_E_BAD_RECIPTYPE
15
受信者の種類が MAPI_TO、MAPI_CC、MAPI_BCC のいずれでもありませんでした。メッセージは送信されませんでした。
MAPI_E_FAILURE
2
1 つ以上の不特定のエラーが発生しました。メッセージは送信されませんでした。
MAPI_E_INSUFFICIENT_MEMORY
5
処理を続行するためのメモリが不足していました。メッセージは送信されませんでした。
MAPI_E_INVALID_RECIPS
25
1 人以上の受信者が無効であるか、どのアドレスにも解決できませんでした。
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
呼び出しは成功し、メッセージが送信されました。

解説(Remarks)

MAPISendMailW(Unicode)関数と MAPISendMail(ANSI)関数は、どちらもユーザーの操作の有無にかかわらず標準的なメッセージを送信します。いずれの関数もユーザーの操作なしに既定のサービス プロバイダーを開けるように、プロファイルが構成されている必要があります。

MAPISendMailW と MAPISendMail は、いずれもメッセージの送信に発信者(originator)型の受信者を必要としません。

クライアント アプリケーションは、受信者名の完全な一覧または部分的な一覧、件名のテキスト、添付ファイル、メッセージ本文を指定できます。情報が不足している場合、呼び出した関数(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 値を返します。

クライアント アプリケーションが 1 人以上のカスタム受信者にメッセージを送信し、それらの受信者名の解決を避けたい場合は、カスタム受信者のアドレスを指定する必要があります。

MAPISendMailW の呼び出しで受信者のアドレスを指定するには、その受信者の情報を格納している MapiRecipDescW 構造体の lpszAddress メンバーに、カスタム アドレスを設定します。この MapiRecipDescW 構造体は、lpMessage パラメーターによって関数に渡される MapiMessageW 構造体の lpRecips メンバーに格納された受信者の配列に含まれています。

メモ MAPISendMail の呼び出しで受信者のアドレスを指定するには、上記の MAPISendMailW の手順に従い、MapiRecipDesc 構造体と MapiMessage 構造体に読み替えてください。

関数が成功して戻ったとしても、必ずしも受信者の検証が行われたことを意味するわけではありません。すべての受信者にメッセージが送信されたとは限りません。トランスポート プロバイダーによっては、受信者の検証に長い時間がかかることがあります。

受信者情報の扱い

MapiMessageW 構造体または MapiMessage 構造体の lpRecips メンバーには、エントリ識別子、受信者名、アドレス、または名前とアドレスの組のいずれかを含めることができます。次の表は、関数がそれぞれの場合をどのように扱うかを示しています。
受信者の情報 動作
エントリ識別子 名前解決は行われません。名前とアドレスは無視されます。
名前 Simple MAPI の解決規則を使用して名前が解決されます。
アドレス 名前解決は行われません。アドレスは、メッセージの配信と受信者名の表示の両方に使用されます。
名前とアドレス 名前解決は行われません。名前は受信者名の表示にのみ使用されます。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)