Об’єктна модель cdo, відправка і отримання повідомлень засобами cdo
Об'єктна модель CDO, відправка і отримання повідомлень засобами CDO
Все-таки Outlook - це перш за все програма для роботи з електронною поштою, і, якщо ви звернулися до його об'єктної моделі, то дуже може бути, що ви хотіли автоматизувати саме операції з електронною поштою. Як ми вже з'ясували, нормальній роботі з електронною поштою сильно заважають обмеження безпеки, вбудовані в об'єктну модель Outlook. З ними можна боротися (як описано в розділі 13.6), а можна просто обійти, використовуючи для відправки електронної пошти спеціальну об'єктну модель CDO, в якій цих обмежень немає. Цю об'єктну модель (як німий докір розробникам з Microsoft) можна використовувати в тому числі і з Outlook.
Найпростіший варіант відправки пошти засобами CDO виглядає так:
Dim oMyMail As New CDO.Message
oMyMail.Subject = "Hello from CDO"
oMyMail.TextBody = "Our letter"
(Значення 1, яке використовується за умовчанням, означає - використовувати каталог Pickup).
Вказати поштову сервер можна так:
Налаштування режиму аутентифікації проводиться за допомогою того ж об'єкта CDO.Configuration:
Значення 1 означає, що використовується базова автентифікація, значення 0 - без аутентифікації (анонімно), значення 2 - аутентифікація NTLM.
Ім'я користувача і пароль можна передати точно так же:
Іноді необхідно також визначити використання специфічного порту (відмінного від 25), буде чи ні використовуватися SSL і час тайм-ауту:
Після будь-яких змін, що вносяться до конфігурацію, зміни спочатку треба зберегти:
і тільки після викликати метод Send ():
Якщо виникає проблема з кодуваннями (зазвичай, якщо в системі уставнолен українську мову, не виникає, то можна ще перед відправкою додати рядок виду
oMyMail.TextBodyPart.Charset = "windows -1251"
На жаль, ця бібліотека працює тільки з протоколом SMTP і каталогом Pickup на диску. Вона не вміє працювати ні з протоколом POP3, ні з IMAP4, ні з MAPI, а, значить, підключитися до поштового сервера і перевірити на ньому появу нових повідомлень (як в нашому прикладі з Outlook) ми не зможемо. Доведеться використовувати іншу бібліотеку з набору CDO - Microsoft CDO 1.21 Library. Вона вміє працювати тільки з MAPI (читайте - Exchange Server), зате вона вміє виконувати різні операції в поштовій скриньці на Exchange Server без всяких попереджувальних повідомлень. Наприклад, відстежити появу нових листів можна так:
- Додаємо посилання на бібліотеку Microsoft CDO 1.21 Library
Пишемо наступний код.
Dim oSession As New MAPI.Session
Dim oFolder As MAPI.Folder
Dim oMessage As MAPI.Message
' "Outlook" - ім'я поштової профілю. Якщо цей параметр не передати, то виникне
'Діалогове вікно з пропозицією вибрати потрібний профіль. Ім'я потрібного профілю
'Можна дізнатися як раз з цього діалогового вікна
Set oFolder = oSession.Inbox
For Each oMessage In oFolder.Messages
If oMessage.Unread = True Then Debug.Print oMessage
Повну довідку за цими об'єктним моделям можна прочитати в MSDN.