Создание отправляемого элемента для определенной учетной записи на основе текущей папки (Outlook)
При использовании метода CreateItem объекта Application для создания элемента Microsoft Outlook элемент создается для основной учетной записи этого сеанса. В сеансе, в профиле которого определено несколько учетных записей, можно создать элемент для конкретной учетной записи IMAP, POP или Microsoft Exchange. Если в текущем профиле есть несколько учетных записей и в интерфейсе пользователя создается отправляемый элемент, например с помощью кнопки Создать сообщение или Создать собрание, инспектор отображает новый почтовый элемент или приглашение на собрание в режиме создания, а затем можно выбрать учетную запись, от имени которой будет отправлен элемент. В этом разделе показано, как программно создать отправляемый элемент и отправить его с помощью определенной учетной записи. В этом разделе содержатся два примера кода, в которые показано, как создать MailItem и AppointmentItem для определенной учетной записи, которая определяется текущей папкой в активном обозревателе.
Следующий пример управляемого кода написан на C#. Для запуска примера управляемого кода для .NET Framework, который вызывает модель COM, необходимо использовать сборку взаимодействия, которая определяет и сопоставляет управляемые интерфейсы с объектами COM в библиотеке типов объектной модели. Для Outlook можно использовать Visual Studio и первичную сборку взаимодействия Outlook (PIA). Перед запуском примеров управляемого кода для Outlook 2013 убедитесь, что вы установили Outlook 2013 PIA и добавили ссылку на компонент Microsoft Outlook 15.0 Object Library в Visual Studio. В классе надстройки ThisAddIn
Outlook следует использовать следующий код (с помощью средств разработчика Office для Visual Studio). Объект Application в коде должен быть доверенным объектом Application Outlook, предоставленным объектом ThisAddIn.Globals
. Дополнительные сведения об использовании Outlook PIA для разработки управляемых решений Outlook см. в статье Справочник по основной сборке взаимодействия Outlook на веб-сайте MSDN.
Первый приведенный ниже CreateMailItemFromAccount
метод создает элемент MailItem для определенной учетной записи и отображает его в режиме создания. Хранилище доставки по умолчанию для конкретной учетной записи совпадает с хранилищем папки, отображаемой в активном обозревателе. Текущий пользователь учетной записи задается в качестве отправителя. CreateMailItemFromAccount
Сначала определяет соответствующую учетную запись, сопоставляя хранилище текущей папки (полученной из свойства Folder.Store ) с хранилищем доставки по умолчанию для каждой учетной записи (полученной с помощью свойства Account.DeliveryStore ), определенной в коллекции Accounts для сеанса. CreateMailItemFromAccount
затем создает MailItem. Чтобы связать элемент с учетной записью, CreateMailItemFromAccount
назначает пользователя учетной записи в качестве отправителя элемента, задав для объекта AddressEntry для пользователя учетной записи свойство Senderэлемента MailItem. Назначение свойства Sender является важным шагом, так как в противном случае mailItem создается для основной учетной записи. В конце метода CreateMailItemFromAccount
отображается элемент MailItem. Обратите внимание, что если текущая папка не находится в хранилище доставки, CreateMailItemFromAccount
просто создает MailItem для основной учетной записи сеанса.
private void CreateMailItemFromAccount()
{
Outlook.AddressEntry addrEntry = null;
// Get the store for the current folder.
Outlook.Folder folder =
Application.ActiveExplorer().CurrentFolder
as Outlook.Folder;
Outlook.Store store = folder.Store;
Outlook.Accounts accounts =
Application.Session.Accounts;
// Match the delivery store of each account with the
// store for the current folder.
foreach (Outlook.Account account in accounts)
{
if (account.DeliveryStore.StoreID ==
store.StoreID)
{
addrEntry =
account.CurrentUser.AddressEntry;
break;
}
}
// Create MailItem. Account is either the primary
// account or the account with a delivery store
// that matches the store for the current folder.
Outlook.MailItem mail =
Application.CreateItem(
Outlook.OlItemType.olMailItem)
as Outlook.MailItem;
if (addrEntry != null)
{
//Set Sender property.
mail.Sender = addrEntry;
mail.Display(false);
}
}
Следующий метод, , похож на CreateMailItemFromAccount
, за исключением того, CreateMeetingRequestFromAccount
что он создает AppointmentItem вместо MailItem и связывает AppointmentItem с учетной записью с помощью его свойства SendUsingAccount. CreateMeetingRequestFromAccount
создает AppointmentItem в папке Calendar учетной записи, хранилище доставки которой по умолчанию совпадает с хранилищем для папки, отображаемой в активном проводнике. CreateMeetingRequestFromAccount
Сначала определяет соответствующую учетную запись, сопоставляя хранилище текущей папки (полученной из свойства Folder.Store ) с хранилищем доставки по умолчанию для каждой учетной записи (полученной с помощью свойства Account.DeliveryStore ), определенной в коллекции Accounts для сеанса. CreateMeetingRequestFromAccount
затем создает AppointmentItem. Чтобы связать элемент с учетной записью, CreateMeetingRequestFromAccount
назначает эту учетную запись в качестве учетной записи отправки элемента, задав для объекта Account значение свойства SendUsingAccountобъекта AppointmentItem. Назначение свойства SendUsingAccount является важным шагом, так как в противном случае элемент AppointmentItem создается для основной учетной записи. В конце метода CreateMeetingRequestFromAccount
отображается элемент AppointmentItem. Обратите внимание, что если текущая папка не находится в хранилище доставки, CreateMeetingRequestFromAccount
просто создает AppointmentItem для основной учетной записи сеанса.
private void CreateMeetingRequestFromAccount()
{
Outlook.Account acct = null;
// Get the store for the current folder.
Outlook.Folder folder =
Application.ActiveExplorer().CurrentFolder
as Outlook.Folder;
Outlook.Store store = folder.Store;
Outlook.Accounts accounts =
Application.Session.Accounts;
// Match the delivery store of each account with the
// store for the current folder.
foreach (Outlook.Account account in accounts)
{
if (account.DeliveryStore.StoreID ==
store.StoreID)
{
acct = account;
break;
}
}
// Create AppointmentItem. Account is either the primary
// account or the account with a delivery store
// that matches the store for the current folder.
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);
}
}
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.