根据当前文件夹为特定帐户创建可发送项

此主题包含两个代码示例,用来演示如何创建可发送的电子邮件项和会议请求,然后演示如何使用基于当前文件夹的特定帐户发送它们。

示例

当使用 Application 对象的 CreateItem(OlItemType) 方法创建 Outlook 项时,系统会为该会话的主帐户创建该项目。 在个人资料定义了多个帐户的会话中,可以为特定 IMAP、POP 或 Exchange 帐户创建项目。

如果当前配置文件中存在多个帐户且你在用户界面中创建了可发送项目,例如,通过单击“新建电子邮件”或“新建会议”,检查器会显示撰写模式的新邮件项目或会议请求,那么你便可以选择要用于发送该项目的帐户。

本主题介绍如何以编程方式创建可发送项目和使用特定发送帐户发送该项目。 该主题有两个代码示例,用来演示如何为由活跃资源管理器中的当前文件夹确定的特定帐户创建 MailItemAppointmentItem

如果使用 Visual Studio 测试此代码示例,必须先添加对 Microsoft Outlook 15.0 对象库组件的引用,并在导入 Microsoft.Office.Interop.Outlook 命名空间时指定 Outlook 变量。 不得将 using 语句直接添加到此代码示例中的函数前面,这个语句必须后跟公共类声明。 下面的代码行演示了如何在 C# 中执行导入和分配。

using Outlook = Microsoft.Office.Interop.Outlook;

在第一个方法中,CreateMailItemFromAccount 首先通过将当前文件夹的存储位置(从 Store 属性获得)与会话的 Accounts 集合中定义的各个帐户的默认送达存储位置(通过 DeliveryStore 属性获得)进行匹配来确定适当的帐户。 然后,CreateMailItemFromAccount 会创建 MailItem

为了将项目与该帐户关联,CreateMailItemFromAccount 通过将 account.CurrentUser.AddressEntry 属性设置为 MailItemSender 属性,来将该帐户的用户分配为项目的发送者。 分配 Sender 属性是重要的一步;如果不指定发送者,那么默认情况下将为主帐户创建 MailItem。 在该方法结束时,CreateMailItemFromAccount 会显示 MailItem。 请注意,如果当前文件夹不在送达存储位置,CreateMailItemFromAccount 将为会话的主帐户创建 MailItem

private void CreateMailItemFromAccount()
{
    Outlook.AddressEntry addrEntry = null;
    // Get the Store for CurrentFolder.
    Outlook.Folder folder =
        Application.ActiveExplorer().CurrentFolder 
        as Outlook.Folder;
    Outlook.Store store = folder.Store;
    Outlook.Accounts accounts =
        Application.Session.Accounts;
    // Enumerate accounts to find
    // account.DeliveryStore for store.
    foreach (Outlook.Account account in accounts)
    {
        if (account.DeliveryStore.StoreID == 
            store.StoreID)
        {
            addrEntry =
                account.CurrentUser.AddressEntry;
            break;
        }
    }
    // Create MailItem.
    Outlook.MailItem mail =
        Application.CreateItem(
        Outlook.OlItemType.olMailItem)
        as Outlook.MailItem;
    if (addrEntry != null)
    {
        // Set Sender property.
        mail.Sender = addrEntry;
        mail.Display(false);
    }
}

下一个方法 (CreateMeetingRequestFromAccount) 与 CreateMailItemFromAccount 类似,只是它将创建 AppointmentItem 而不是 MailItem。 CreateMeetingRequestFromAccount 首先通过将当前文件夹的存储位置(从 Store 属性获得)与会话的 Accounts 集合中定义的各个帐户的默认送达存储位置(通过 DeliveryStore 属性获得)进行匹配来确定适当的帐户。 然后,CreateMeetingRequestFromAccount 会创建 AppointmentItem。

为了将项目与该帐户关联,CreateMeetingRequestFromAccount 通过将 Account 对象设置为 AppointmentItem 的 SendUsingAccount 属性,来将该帐户分配为项目的发送帐户。 分配 SendUsingAccount 属性是重要的一步;如果不指定帐户,那么默认情况下将为主帐户创建 AppointmentItem。 在该方法结束时,CreateMeetingRequestFromAccount 会显示 AppointmentItem。 请注意,如果当前文件夹不在送达存储位置,CreateMeetingRequestFromAccount 将为会话的主帐户创建 AppointmentItem。

private void CreateMeetingRequestFromAccount()
{
    Outlook.Account acct = null;
    Outlook.Folder folder =
        Application.ActiveExplorer().CurrentFolder
        as Outlook.Folder;
    Outlook.Store store = folder.Store;
    Outlook.Accounts accounts =
        Application.Session.Accounts;
    foreach (Outlook.Account account in accounts)
    {
        if (account.DeliveryStore.StoreID ==
            store.StoreID)
        {
            acct = account;
            break;
        }
    }
    Outlook.AppointmentItem appt =
        Application.CreateItem(
        Outlook.OlItemType.olAppointmentItem)
        as Outlook.AppointmentItem;
    appt.MeetingStatus = 
        Outlook.OlMeetingStatus.olMeeting;
    if (acct != null)
    {
        // Set SendUsingAccount property.
        appt.SendUsingAccount=acct;
        appt.Display(false);
    }
}

另请参阅