Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Программирование в Microsoft Office для пользователей
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

13.8 Альтернатива при работе с электронной почтой — применение объектной библиотеки CDO

Объектная модель CDO, отправка и получение сообщений средствами CDO

Все-таки Outlook — это прежде всего программа для работы с электронной почтой, и, если вы обратились к его объектной модели, то очень может быть, что вы хотели автоматизировать именно операции с электронной почтой. Как мы уже выяснили, нормальной работе с электронной почтой сильно мешают ограничения безопасности, встроенные в объектную модель Outlook. С ними можно бороться (как описано в разделе 13.6), а можно просто обойти, используя для отправки электронной почты специальную объектную модель CDO, в которой этих ограничений нет. Эту объектную модель (как немой укор разработчикам из Microsoft) можно использовать в том числе и из Outlook.

CDO (Collaboration Data Objects) — это специальный набор библиотек для работы с электронной почтой, а также для администрирования сервера Exchange Server Существует множество версий и разновидностей библиотек, которые входят в набор CDO, но нас интересует только одна: Microsoft CDO for Exchange 2000 Library, которая устанавливается в том числе и с Microsoft Office. Первое, что нужно будет нам сделать — добавить на нее ссылку при помощи меню Tools -> References в редакторе VBA.

Самый простой вариант отправки почты средствами CDO выглядит так:

Dim oMyMail As New CDO.Message

oMyMail.To = "Administrator@nwtraders.msft"

oMyMail.From = "Administrator@nwtraders.msft"

oMyMail.Subject = "Hello from CDO"

oMyMail.TextBody = "Our letter"

oMyMail.AddAttachment "C:\1.txt"

oMyMail.Send

Однако этот вариант с параметрами по умолчанию будет работать только в том случае, если на вашем компьютере установлен Exchange Server 2000 или 2003 или установлен Internet Information Server с настроенной службой SMTP, поскольку физически сообщение просто будет помещено по умолчанию в каталог C:\Inetpub\mailroot\Pickup, откуда и должна забрать служба Exchange Server или IIS. Однако есть и более удобный способ отправки сообщения через любой почтовый сервер, который поддерживает протокол SMTP. Для этого перед вызовом метода Send() мы должны настроить параметры отправки:

oMyMail.Configuration.Fields.Item _

("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

(значение 1, которое используется по умолчанию, означает – использовать каталог Pickup).

Указать почтовый сервер можно так:

omyMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
"smtp.YourServer.com"

Настройка режима аутентификации производится при помощи того же объекта CDO.Configuration:

oMyMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

Значение 1 означает, что используется базовая аутентификация, значение 0 – без аутентификации (анонимно), значение 2 – аутентификация NTLM.

Имя пользователя и пароль можно передать точно так же:

oMyMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = _
"YourLogin@YourDomain.com"

oMyMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = _
"Password"

Иногда необходимо также определить использование специфического порта (отличного от 25), будет или нет использоваться SSL и время тайм-аута:

oMyMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

oMyMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False

oMyMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60

После любых изменений, вносимых в конфигурацию, изменения вначале надо сохранить:

oMyMail.Configuration.Fields.Update

и только после вызывать метод Send():

oMyMail.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 " — имя почтового профиля. Если этот параметр не передать, то возникнет

'диалоговое окно с предложением выбрать нужный профиль. Имя нужного профиля

'можно узнать как раз из этого диалогового окна

oSession.Logon ("Outlook")

Set oFolder = oSession.Inbox

For Each oMessage In oFolder.Messages

If oMessage.Unread = True Then Debug.Print oMessage

Next

Полную справку по этим объектным моделям можно прочитать в MSDN.

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 
© 2004-2016, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru