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

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


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

8.2.4. Альтернативные способы работы с электронной почтой SQL Server и SQL Server Agent

Применение объектной модели CDO для отправки электронной почты из SQL Server 2005, CDO.Message, MAPI.Session, отправка почты из командной строки, bmail

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

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

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

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

q      при помощи этого объекта можно подключиться к любому 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 или установлен Internet Information Server с настроенной службой SMTP. Причина проста: по умолчанию сообщение просто будет физически помещено в каталог C:\Inetpub\mailroot\Pickup, откуда его и должна забрать служба Exchange Server или IIS. Однако есть более удобный способ отправки сообщения через любой почтовый сервер, который поддерживает протокол SMTP. Для этого перед вызовом метода Send() нужно настроить параметры отправки:

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 2005 по умолчанию отключено из соображений безопасности. Перед их использованием вам нужно их включить. Проще всего это сделать при помощи утилиты Surface Area Configuration.

Для отправки почтовых сообщений службами SQL Server и SQL Server Agent можно также использовать возможности объектной модели MAPI (основанной на объекте MAPI.Session). Она также есть на любом компьютере под управлением Windows 2000, XP и 2003. Эта библиотека позволяет не только отправлять сообщения, по и получать их с сервера, а также выполнять различные операции с сообщениями, которые находятся в почтовом ящике. Однако у этой библиотеки есть серьезное ограничение — как понятно из названия, она может использовать только протокол MAPI. Подробную информацию об использовании этого объекта можно найти в MSDN (www.microsoft.com/msdn).

Другой альтернативный способ работы с электронной почтой связан с использованием утилит для отправки сообщений из командной строки. В Интернете можно найти множество бесплатных утилит для этой цели. Автор обычно использует утилиту BMAIL. Команда на отправку электронной почты с использованием этой утилиты может выглядеть, например, так:

bmail -s smtp.YourServer.com -t komu@nwtraders.msft -f otKogo@nwtraders.msft -h -a "Заголовок письма" -b "Текст письма"

Чтобы использовать эту утилиту, ее файл нужно поместить в любой каталог, указанный в переменной окружения PATH. После этого соответствующую команду можно использовать в этапе типа CmdExec для задания SQL Server Agent или в коде Transact-SQL при помощи хранимой процедуры xp_cmdshell. Отметим, что эта хранимая процедура также по умолчанию отключена в SQL Server 2005 из соображений безопасности. Включать ее рекомендуется при помощи утилиты Surface Area Configuration.

 

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

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


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

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