Поделиться через


Создание отправляемого элемента для определенной учетной записи на основе текущей папки

Этот раздел содержит два примера кода, показывающих, как создавать отправляемый элемент электронной почты и приглашение на собрание и как потом отправить эти элементы, используя конкретную учетную запись, основанную на текущей папке.

Пример

При использовании метода CreateItem(OlItemType) объекта Application для создания элемента Outlook этот элемент создается для основной учетной записи данного сеанса. В сеансе, в профиле которого определено несколько учетных записей, можно создать элемент для конкретной учетной записи IMAP, POP или Exchange.

Если в текущем профиле есть несколько учетных записей и в интерфейсе пользователя создается отправляемый элемент, например с помощью кнопки Создать сообщение или Создать собрание, инспектор отображает новый почтовый элемент или приглашение на собрание в режиме создания, а затем можно выбрать учетную запись, от имени которой будет отправлен элемент.

В этом разделе показано, как программно создать отправляемый элемент и отправить его с помощью определенной учетной записи. Раздел содержит два примера кода, показывающих, как создать элементы MailItem и AppointmentItem для конкретной учетной записи, определенной текущей папкой в активном проводнике.

Если вы используете Visual Studio для тестирования этого примера кода, сначала добавьте ссылку на компонент Microsoft Outlook 15.0 Object Library и задайте переменную Outlook при импорте пространства имен Microsoft.Office.Interop.Outlook. Инструкция using не должна находиться непосредственно перед функциями в примере кода, но ее нужно добавить перед объявлением общедоступного класса. В следующей строке кода показано, как выполнить импорт и назначение в C#.

using Outlook = Microsoft.Office.Interop.Outlook;

В первом методе CreateMailItemFromAccount сначала определяет соответствующую учетную запись, сопоставляя хранилище текущей папки (полученное из свойства Store) с хранилищем доставки по умолчанию каждой учетной записи (полученной с помощью свойства DeliveryStore), определенной в коллекции Accounts для сеанса. Затем CreateMailItemFromAccount создает элемент MailItem.

Чтобы связать этот элемент с учетной записью, CreateMailItemFromAccount назначает пользователя учетной записи отправителем элемента, устанавливая свойство account.CurrentUser.AddressEntry равным свойству Sender элемента MailItem. Назначение свойства 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, только вместо MailItem создается элемент AppointmentItem. CreateMeetingRequestFromAccount сначала определяет соответствующую учетную запись, сопоставляя хранилище текущей папки (полученное из свойства Store) с хранилищем доставки по умолчанию каждой учетной записи (полученным из свойства DeliveryStore), определенной в коллекции Accounts для сеанса. Затем CreateMeetingRequestFromAccount создает элемент AppointmentItem.

Чтобы связать этот элемент с учетной записью, CreateMeetingRequestFromAccount назначает эту учетную запись в качестве учетной записи, отправляющей элемент, устанавливая объект Account в качестве значения свойству SendUsingAccount элемента AppointmentItem. Назначение свойства 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);
    }
}

См. также