Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL2008_Administration.doc
Скачиваний:
91
Добавлен:
08.11.2018
Размер:
3.38 Mб
Скачать

6.6.8 Хранимые процедуры для работы с sqlMail

Для работы с SQLMail используются те же хранимые процедуры, что и в SQL Server 2000:

  • xp_sendmail — предназначена для отправки сообщений электронной почты, например: EXEC master.dbo.xp_sendmail @recipients='administrator@nwtraders.msft', @subject='Заголовок сообщения', @message='Текст сообщения'; EXEC master.dbo.xp_sendmail @recipients='administrator@nwtraders.msft', @query = 'select * from Table1' ;

  • xp_findnextmsg — возвращает уникальный идентификатор сообщения, которое пришло по времени последним;

  • xp_readmail — возможность считать сообщение из почтового ящика на Exchange Server. Принимает номер сообщения, который обычно возвращает хранимая процедура xp_findnextmsg;

  • xp_deletemail — соответственно, удаляет сообщение по его номеру;

  • sp_proccessmail — возможность автоматизировать работу с электронной почтой. Эта хранимая процедура обращается к почтовому ящику на Exchange Server и пытается выполнить текст для каждого непрочитанного сообщения как запрос к SQL Server. Результаты выполнения запроса отправляются в качестве ответа на сообщение (в виде вложенного текстового файла).

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

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

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

  • библиотека CDO есть на любом компьютере под управлением Windows 2000\ XP\ 2003;

  • не нужно производить никаких настроек для подсистем электронной почты на SQL Server;

  • при помощи этого объекта можно подключаться к любому SMTP-совместимому почтовому серверу.

Пример кода для использования этого объекта на языке 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]