次の方法で共有


単純なメール アイテムを作成する

適用対象: Outlook 2013 | Outlook 2016

MAPI を使用して、開封確認を要求するメッセージを作成して送信できます。 開封確認が要求されると、メッセージング システムはメッセージを生成し、受信者がメッセージを開いたときに送信者に読み取りレポートを返します。

このトピックで参照されている MFCMAPI アプリケーションと CreateOutlookItemsAddin プロジェクトからコードをダウンロード、表示、実行する方法については、「 このセクションで使用するサンプルをインストールする」を参照してください。

開封確認を要求するメッセージを作成して送信するには

  1. 送信メッセージを作成します。 送信メッセージを作成する方法については、「 送信メッセージの処理」を参照してください。

  2. PR_READ_RECEIPT_REQUESTED (PidTagReadReceiptRequested) プロパティを追加し、true に設定します

  3. PR_CONVERSATION_INDEX (PidTagConversationIndex) プロパティを追加します。

  4. PR_REPORT_TAG (PidTagReportTag) プロパティを追加します。

  5. IMessage::SubmitMessage メソッドを呼び出してメッセージを送信します。

AddMail CreateOutlookItemsAddin プロジェクトのMails.cpp ソース ファイル内の関数は、次の手順を示しています。 関数は AddMail 、MFCMAPI サンプル アプリケーションの [ アドイン] メニューの [ メールの追加 ] コマンドをクリックしたときに表示される [メールの 追加 ] ダイアログ ボックスからパラメーターを受け取ります。 Mails.cppの関数は DisplayAddMailDialog 、ダイアログ ボックスを表示し、ダイアログ ボックスから関数に値を AddMail 渡します。 この関数は DisplayAddMailDialog MAPI を使用したメール アイテムの作成とは直接関係しないため、ここには表示されません。 関数を AddMail 次に示します。

メソッドに渡される AddMaillpFolder パラメーターは、新しいメッセージが作成されるフォルダーを表す IMAPIFolder インターフェイスへのポインターであることに注意してください。 IMAPIFolder インターフェイスを表す lpFolder パラメーターを指定すると、このコードは IMAPIFolder::CreateMessage メソッドを呼び出します。 CreateMessage メソッドは、成功コードと IMessage : IMAPIProp インターフェイスへのポインターへのポインターを返します。

ほとんどの関数コードは、AddMailIMAPIProp::SetProps メソッドを呼び出す準備としてプロパティを設定する作業を処理します。 SetProps メソッドの呼び出しが成功すると、IMAPIProp::SaveChanges メソッドの呼び出しによってストアへの変更がコミットされ、新しいメール アイテムが作成されます。 その後、要求された場合は、メッセージを送信するために IMessage::SubmitMessage メソッドが呼び出されます。

関数はAddMail、2 つのヘルパー関数を使用して、PR_CONVERSATION_INDEX プロパティと PR_REPORT_TAG プロパティの値をBuildConversationIndexAddReportTag構築します。 CreateOutlookItemsAddin.cppにある関数は BuildConversationIndex 、親会話インデックスが渡されない場合に、組み込みの MAPI ScCreateConversationIndex 関数と同じ動作をします。 これらの関数によって生成される会話インデックス バッファーの形式については、 PidTagConversationIndex Canonical プロパティに関するページを参照してください。

Mails.cppにある関数は AddReportTag 、 関数を BuildReportTag 呼び出して 、PR_REPORT_TAG プロパティの構造体を構築します。 関数が構築する BuildReportTag 構造体の詳細については、「 PidTagReportTag 標準プロパティ」を参照してください。

関数の完全な一覧を次に AddMail 示します。

HRESULT AddMail(LPMAPISESSION lpMAPISession,
            LPMAPIFOLDER lpFolder,
            LPWSTR szSubject, // PR_SUBJECT_W, PR_CONVERSATION_TOPIC
            LPWSTR szBody, // PR_BODY_W
            LPWSTR szRecipientName, // Recipient table
            BOOL bHighImportance, // PR_IMPORTANCE
            BOOL bReadReceipt, // PR_READ_RECEIPT_REQUESTED
            BOOL bSubmit,
            BOOL bDeleteAfterSubmit)
{
   if (!lpFolder) return MAPI_E_INVALID_PARAMETER;
   HRESULT hRes = S_OK;
   LPMESSAGE lpMessage = 0;
   // Create a message and set its properties
   hRes = lpFolder->CreateMessage(0,
      0,
      &lpMessage);
   if (SUCCEEDED(hRes))
   {
      // Because the properties to be set are known in advance, 
      // most of the structures involved can be statically declared 
      // to minimize expensive MAPIAllocateBuffer calls.
      SPropValue spvProps[NUM_PROPS] = {0};
      spvProps[p_PR_MESSAGE_CLASS_W].ulPropTag          = PR_MESSAGE_CLASS_W;
      spvProps[p_PR_ICON_INDEX].ulPropTag                 = PR_ICON_INDEX;
      spvProps[p_PR_SUBJECT_W].ulPropTag                = PR_SUBJECT_W;
      spvProps[p_PR_CONVERSATION_TOPIC_W].ulPropTag     = PR_CONVERSATION_TOPIC_W;
      spvProps[p_PR_BODY_W].ulPropTag                   = PR_BODY_W;
      spvProps[p_PR_IMPORTANCE].ulPropTag               = PR_IMPORTANCE;
      spvProps[p_PR_READ_RECEIPT_REQUESTED].ulPropTag   = PR_READ_RECEIPT_REQUESTED;
      spvProps[p_PR_MESSAGE_FLAGS].ulPropTag             = PR_MESSAGE_FLAGS;
      spvProps[p_PR_MSG_EDITOR_FORMAT].ulPropTag         = PR_MSG_EDITOR_FORMAT;
      spvProps[p_PR_MESSAGE_LOCALE_ID].ulPropTag         = PR_MESSAGE_LOCALE_ID;
      spvProps[p_PR_INETMAIL_OVERRIDE_FORMAT].ulPropTag = PR_INETMAIL_OVERRIDE_FORMAT;
      spvProps[p_PR_DELETE_AFTER_SUBMIT].ulPropTag      = PR_DELETE_AFTER_SUBMIT;
      spvProps[p_PR_INTERNET_CPID].ulPropTag            = PR_INTERNET_CPID;
      spvProps[p_PR_CONVERSATION_INDEX].ulPropTag         = PR_CONVERSATION_INDEX;
      spvProps[p_PR_MESSAGE_CLASS_W].Value.lpszW = L"IPM.Note";
      spvProps[p_PR_ICON_INDEX].Value.l = 0x103; // Unsent Mail
      spvProps[p_PR_SUBJECT_W].Value.lpszW = szSubject;
      spvProps[p_PR_CONVERSATION_TOPIC_W].Value.lpszW = szSubject;
      spvProps[p_PR_BODY_W].Value.lpszW = szBody;
      spvProps[p_PR_IMPORTANCE].Value.l = bHighImportance?IMPORTANCE_HIGH:IMPORTANCE_NORMAL;
      spvProps[p_PR_READ_RECEIPT_REQUESTED].Value.b = bReadReceipt?true:false;
      spvProps[p_PR_MESSAGE_FLAGS].Value.l = MSGFLAG_UNSENT;
      spvProps[p_PR_MSG_EDITOR_FORMAT].Value.l = EDITOR_FORMAT_PLAINTEXT;
      spvProps[p_PR_MESSAGE_LOCALE_ID].Value.l = 1033; // (en-us)
      spvProps[p_PR_INETMAIL_OVERRIDE_FORMAT].Value.l = NULL; // Mail system chooses default encoding scheme
      spvProps[p_PR_DELETE_AFTER_SUBMIT].Value.b = bDeleteAfterSubmit?true:false;
      spvProps[p_PR_INTERNET_CPID].Value.l = cpidASCII;
      hRes = BuildConversationIndex(
         &spvProps[p_PR_CONVERSATION_INDEX].Value.bin.cb,
         &spvProps[p_PR_CONVERSATION_INDEX].Value.bin.lpb);
      if (SUCCEEDED(hRes))
      {
         hRes = lpMessage->SetProps(NUM_PROPS, spvProps, NULL);
         if (SUCCEEDED(hRes))
         {
            hRes = AddRecipient(lpMAPISession,
               lpMessage,
               MAPI_TO,
               szRecipientName);
            AddInLog(true,L"CallMenu: AddRecipient - returned hRes = 0x%08X\n",hRes);
            if (SUCCEEDED(hRes))
            {
               if (bReadReceipt)
               {
                  hRes = AddReportTag(lpMessage);
               }
               if (SUCCEEDED(hRes))
               {
                  hRes = lpMessage->SaveChanges(KEEP_OPEN_READWRITE);
                  if (SUCCEEDED(hRes) && bSubmit)
                  {
                     hRes = lpMessage->SubmitMessage(NULL);
                  }
               }
            }
         }
      }
      if (spvProps[p_PR_CONVERSATION_INDEX].Value.bin.lpb)
         delete[] spvProps[p_PR_CONVERSATION_INDEX].Value.bin.lpb;
   }
   if (lpMessage) lpMessage->Release();
   return hRes;
}

関連項目