Войти

Показать полную графическую версию : [решено] Динамическое создание и изменение групп рассылки в Outlook (DistList)


dosperados
03-04-2012, 05:55
Стоит задача создавать в Outlook группы рассылок (или она же "группа контактов") (Distanation List). Путем проб и ошибок я нашел как создать объект "группа рассылок"

$VerbosePreference = "Continue"
Write-Verbose "Подключаемся к Outlook"
$oOutlook = New-Object -ComObject Outlook.Application

Write-Verbose "Получаем MAPI"
$oNameSpace = $oOutlook.GetNamespace("MAPI")
Write-Verbose "Получаем папку Контакты"
$oMAPIFolder = $oNameSpace.GetDefaultFolder(10)
Write-Verbose "Создаем папку"
$oMyMAPIFolder = $oMAPIFolder.Folders.Add("Контакты организации")
Write-Verbose "Устанавливаем на эту папку галочку ""Показывать как адресную книгу"""
$oMyMAPIFolder.ShowAsOutlookAB = "True"
Write-Verbose "Получаем содержимое папки контактов"
$cContacts = $oMyMAPIFolder.Items

$a2 = $cContacts | select -Index 2
$a5 = $cContacts | select -First 5

Write-Verbose "Создание объекта ""DistList"""

$oContact = $oMyMAPIFolder.Items.Add(7)
$oContact.DLname = "distlist"
$oContact.body = "Описание группы рассылки"
$oContact.AddMember($a2)
#$oContact.AddMembers($a5)
#Сохраняем контакт
$oContact.Save()


Я не могу понять как добавить в созданную группу рассылки адресы на которые будет рассылка.
пробовал добавлять массив с адресами контактов, вручную адреса почты.
Самое главное это научится добавлять и удалять из этого объекта адреса контактов.
Заранее благодарен за помощь!!!!!

Созданные объект имеет вот такие поля:

Application : Microsoft.Office.Interop.Outlook.ApplicationClass
Class : 69
Session : Microsoft.Office.Interop.Outlook.NameSpaceClass
Parent : System.__ComObject
Actions : System.__ComObject
Attachments : System.__ComObject
BillingInformation :
Body : Тело группы рассылки
Categories :
Companies :
ConversationIndex : 01CD1140C64F7274E4C9F6ED4906A40075EC151ABE8D
ConversationTopic : distlist
CreationTime : 03.04.2012 9:23:36
EntryID : 0000000059AD1D58D7D0254DA4C3F892D929361C84A92500
FormDescription : System.__ComObject
GetInspector : System.__ComObject
Importance : 1
LastModificationTime : 03.04.2012 9:23:36
MAPIOBJECT : System.__ComObject
MessageClass : IPM.DistList
Mileage :
NoAging : False
OutlookInternalVersion : 146109
OutlookVersion : 14.0
Saved : True
Sensitivity : 0
Size : 1620
Subject : distlist
UnRead : False
UserProperties : System.__ComObject
DLName : distlist
MemberCount : 0
CheckSum : 0
Members : {}
OneOffMembers : {}
Links : System.__ComObject
DownloadState : 1
ItemProperties : System.__ComObject
MarkForDownload : 0
IsConflict : False
AutoResolvedWinner : False
Conflicts : System.__ComObject
PropertyAccessor : System.__ComObject
TaskSubject : distlist
TaskDueDate : 01.01.4501 0:00:00
TaskStartDate : 01.01.4501 0:00:00
TaskCompletedDate : 01.01.4501 0:00:00
ToDoTaskOrdinal : 01.01.4501 0:00:00
ReminderOverrideDefault : False
ReminderPlaySound : False
ReminderSet : False
ReminderSoundFile :
ReminderTime : 01.01.4501 0:00:00
IsMarkedAsTask : False
ConversationID :
RTFBody : {123, 92, 114, 116...}

Kazun
03-04-2012, 18:20
$res=$oOutlook.Session.CreateRecipient($a2.Email1Address)
$res.Resolve()
$oContact.AddMember($res)

dosperados
04-04-2012, 08:14
Kazun, Спасибо, но это какое то корявое решение...
Хочется чтобы все было как положенно.

Может быть, можно как то использовать.
$oOutlook.Session.GetRecipientFromID
или если можно было бы сделать вот так$res=$oOutlook.Session.CreateRecipient($a2)

Как я понимаю в этом методе $res=$oOutlook.Session.CreateRecipient($a2)
Posh не может сопоставить свойства объекта $a2 к свойствам вновь созданного $res.
возможно ли ему явно указать что куда ставить.
что-то на подобие вот этого (http://www.jpsoftwaretech.com/automatically-update-outlook-distribution-lists-from-excel/) Set objRcpnt = outlook.Session.CreateRecipient(arrData(i, 2))

Kazun
04-04-2012, 11:27
А что в нем кривого?

$res=$oOutlook.Session.CreateRecipient($a2.Email1Address)
$oOutlook.Session.GetRecipientFromID($res.EntryID)

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

dosperados
04-04-2012, 14:48
А что в нем кривого? »
Некрасиво что он имя и адрес ставит одно и тоже...
http://forum.oszone.net/attachment.php?attachmentid=80579&stc=1&d=1333535825

Как это не может сопоставит? »
Я имею введу что вот этот код не может на автомате сопаставить свойства объекта $a2 к свойствам вновь созданного $res.
$res=$oOutlook.Session.CreateRecipient($a2)

но смысл непонятен,когда уже есть массив с требуемыми свойствами. »
Может быть и нет необходимости создавать массив, но как я понял
$oOutlook.Session.CreateRecipient(string Recipientname) имеет только 1 параметр и написать вот так
$res=$oOutlook.Session.CreateRecipient($a2.Email1Address, $a2.Email1DisplayName) уже не получится написать.




© OSzone.net 2001-2012