Об’єктна модель 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.