logo
SQL2008_Administration

6.6.9. Применение объекта cdo.Message для работы с электронной почтой sql Server и sql Server Agent

Помимо Database Mail и SQLMail, на предприятиях очень часто используются альтернативные средства для работы с электронной почтой служб SQL Server (из кода Transact-SQL) и SQL Server Agent (в этапах заданий).

Применение объекта CDO.Message очень удобно по следующим причинам:

Пример кода для использования этого объекта на языке VBScript:

'Объявляем переменную для нашего сообщения

Dim oMessage

'Создаем объект CDO.Message

Set oMessage = CreateObject("CDO.Message")

'Настраиваем параметры сообщения

'Кому

oMessage.To = "Administrator@nwtraders.msft"

'От кого

oMessage.From = "Administrator@nwtraders.msft"

'Заголовок сообщения

oMessage.Subject = "Проверка"

'Текст сообщения (может быть текстовым или в формате HTML)

oMessage.TextBody = "Текст письма"

'Добавляем вложение

oMessage.AddAttachment "C:\1.txt"

'Отправляем сообщение

oMessage.Send

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

Настройка возможности отправки сообщений через любой почтовый сервер

Для возможности отправки сообщений через любой почтовый сервер, который поддерживает протокол SMTP, необходимо настроить параметры отправки:

oMessage.Configuration.Fields.Item _

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

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

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

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

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

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

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

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

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

Определение использования специфического порта

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

oMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 oMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False oMessage.Configuration.Fields.Item _ ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60

Сохранение изменений, вносимых в конфигурацию:

oMessage.Configuration.Fields.Update

Вызов метода Send():

oMessage.Send

Для устранения проблем с кодировками перед отправкой необходимо добавить строку вида:

oMessage.TextBodyPart.Charset="windows-1251"

Включение использования хранимых процедур автоматизации

Этот код можно напрямую использовать в этапах типа ActiveX Script для заданий SQL Server Agent. При помощи хранимых процедур автоматизации SP_OACreate, SP_OASetProperty, SP_OAMethod его можно использовать и для отправки электронной почты из кода Transact-SQL. Отметим только, что использование хранимых процедур автоматизации в SQL Server 2008 по умолчанию отключено из соображений безопасности. Перед их использованием вам потребуется их включить. Проще всего это сделать при помощи утилиты Surface Area Configuration.