Як надсилати сповіщення електронною поштою без сценарій виконання SQL пошти в SQL Server

Переклади статей Переклади статей
Номер статті: 312839 - Показ продуктів, яких стосується ця стаття.
Розгорнути все | Згорнути все

На цій сторінці

Підсумки

SQL пошти надає простий спосіб надсилання і читання електронна пошта з Microsoft SQL Server. Однак, оскільки SQL пошти MAPI застосунку, підсистемою MAPI повинні бути присутніми на сервері. Microsoft Windows NT 4.0 встановлює підсистемою MAPI, під Вільний час інсталяції Windows обміну повідомленнями. Однак, Microsoft Windows 2000 не надає підсистемою MAPI. Таким чином, якщо ви бажаєте використовувати SQL пошти, інсталюйте клієнт MAPI, як Microsoft Outlook.

За допомогою інших методів відправляти простий Поштовий переказ протоколу SMTP електронна пошта безпосередньо з SQL Server. Наприклад, можна співпраці об'єкти даних для NT Server (CDONTS) або співпраці даних об'єктів для Windows 2000 (CDOSYS) в поєднанні з sp_OA SQL сервер OLE автоматизації збережених процедур. Ця стаття містить приклади сценарій виконання цих методів для надсилання електронна пошта на сервер пошти Інтернету. Ви можете змінити методи, так, що вони забезпечать більш надійні поштової системи. Наприклад, може знадобитися додати код обробки помилок. Методи в прикладах не забезпечують засіб для читання або для обробки електронна пошта.

Примітка. CDOSYS доступна, починаючи з Windows 2000, і ми рекомендуємо використовувати CDOSYS замість CDONTS. CDONTS не підтримується у Windows Server 2003 та пізніших операційних системах.

Примітка. Ці приклади програмного коду проілюструвати методів, які можна використовувати для виклику об'єктної моделі CDO в оператори Transact-SQL. Ви несете відповідальність за будь-якого програмування розширень до зразків, або будь-який стрес приймальні випробування, яке вимагається для запуску коду у виробничому середовищі.

корпорація Майкрософт надає приклади програмного коду тільки для ілюстрації без гарантій, виражених або припущених. Це включає, але не обмежуючись, можливі гарантії товарної придатності або придатності для конкретних цілей. У цій статті передбачається, що ви знайомі з мови програмування, що були продемонстровані та інструменти, які використовуються для створення і налагодження процедур. Співробітники представник служби підтримки клієнтів Microsoft можуть допомогти пояснити функціональність зокрема процедура, але вони не змінить цих прикладів, щоб надавати додано функціональність або побудувати процедури, щоб відповідати вашим конкретним вимогам.

Як використовувати CDO для сервера Microsoft Windows NT (CDONTS)

CDONTS — простий Поштовий переказ протоколу SMTP конкретні OLE сервер яка спеціально призначена для забезпечення обміну повідомленнями функціональні можливості веб-додатків. Таким чином, CDONTS підтримує відправлення електронна пошта HTML. MAPI-додатків, як SQL Mail, не роблять. за промовчанням Microsoft Internet Information Server (IIS) 4.0 або пізнішої версії встановлює CDONTS. за промовчанням у Microsoft Windows 2000 встановлює Microsoft Internet Information Server (IIS) 5.0.

Щоб отримати додаткові відомості про CDONTS клацніть номер статті в базі знань Microsoft Knowledge Base:
177850 У чому полягає різниця між CDO 1.2 і CDONTS?
CDONTS відправляє електронну пошту через SMTP локального сервера. Якщо ви не маєте SMTP-сервера на локальний сервер, можна використовувати віртуальний сервер SMTP, який встановлює IIS для маршрутизації електронна пошта SMTP з відповідними поштовий SMTP-сервер. Використовувати CDONTS для відправки електронна пошта з SQL Server, виконайте такі дії:
  1. Інсталяція служб IIS і вона працює на комп'ютері, що isrunning SQL Server.
  2. Вкажіть ваш поштовий SMTP-сервер як "проміжного вузла", щоб служби IIS SMTP автоматично направляє будь-які SMTP електронна пошта, що надсилається до yourlocal сервер до поштового сервера SMTP для доставки.
  3. Створити збереженої процедури в SQL Server, що ви можете використовувати tosend електронна пошта.
Під Вільний час сценарій виконання CDONTS замість SQL Mail, ви не повинні мати поштовий клієнт як Microsoft Outlook, інстальованих на комп'ютері, на якому запущено SQL Server. Ви також не повинні мати Microsoft Exchange server. Ви можете використовувати будь-якого поштового сервера, який підтримує сповіщення електронною поштою SMTP як ваш "проміжного вузла". Однак, ви не можете прочитати і обробки електронна пошта, що надсилається до комп ' ютера, на якому запущено SQL Server, використовуючи CDONTS. Не вдається замінити функціональність поштовий агент SQL.

Інструкції, які слідують спираються на Microsoft Windows 2000. Якщо на комп'ютері інстальовано IIS 4.0, можна настроїти Microsoft Windows NT 4.0 аналогічним чином. Однак кроки дещо відрізняються.

Щоб отримати додаткові відомості про настроювання "проміжного вузла" Microsoft Windows NT 4.0 клацніть номер статті для перегляду статті в базі знань Microsoft Knowledge Base:
230235 Настроювання служби IIS SMTP SMTP ретрансльована пошта

Настройте маршрутизацію вузла

  1. Натисніть кнопку Пуск, виберіть пункт програми, пункт Адмініструванняа потім
    виберіть Диспетчера служб Інтернету , відкрити диспетчер IIS.
  2. Відкрити дерево для вашого сервера. Клацніть правою кнопкою миші За промовчанням віртуального сервера SMTPі виберіть пункт Властивості.
  3. Знайдіть доставка на вкладці і натисніть кнопку Додатково.
  4. Введіть ім'я поштовий SMTP-сервер у полі Проміжного вузла . Якщо ви не знаєте назву вашого servercontact пошти SMTP адміністратор пошти.
  5. Переконайтеся, що запущено службу простий Поштовий переказ протоколу SMTP. SMTP-служба є частиною IIS Admin Service.Therefore, служби IIS Admin має бути запущено.

Створити збереженої процедури відправити CDONTS сповіщення електронною поштою

Примітка. Приклад компаній, організацій, продуктів, доменних імен, адреси електронна пошта, логотипи, люди, місця і події, наведені в цій статті, є вигаданими. Можливу схожість із реальними підприємствами, організації, продукт, ім'я домену, адресу електронна пошта, логотип, особи, місця або події має бути як випадкову.

Ви можете використовувати код, подібне до нижченаведеного створити збереженої процедури у вашій базі даних, який надсилає сповіщення електронною поштою за допомогою SQL Server автоматизацію OLE збережена процедура для виклику об'єктної моделі CDONTS.

CREATE PROCEDURE [dbo].[sp_send_cdontsmail] 
@From varchar(100),
@To varchar(100),
@Subject varchar(100),
@Body varchar(4000),
@CC varchar(100) = null,
@BCC varchar(100) = null
AS
Declare @MailID int
Declare @hr int
EXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUT
EXEC @hr = sp_OASetProperty @MailID, 'From',@From
EXEC @hr = sp_OASetProperty @MailID, 'Body', @Body
EXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCC
EXEC @hr = sp_OASetProperty @MailID, 'CC', @CC
EXEC @hr = sp_OASetProperty @MailID, 'Subject', @Subject
EXEC @hr = sp_OASetProperty @MailID, 'To', @To
EXEC @hr = sp_OAMethod @MailID, 'Send', NULL
EXEC @hr = sp_OADestroy @MailID

Далі за допомогою збереженої процедури, які створено та забезпечити правильний параметрів:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Примітка. Тільки члени фіксованого серверної ролі системний адміністратор може працювати автоматизацію OLE збережених процедур. Якщо користувач SQL Server не є членом системний адміністратор фіксованого серверної ролі, не можна використовувати збережених процедур, які згадуються в прикладі надсилати сповіщення електронною поштою. В такій ситуації ви, можливо, розробити клієнтського застосунку надсилати сповіщення електронною поштою з CDONTS. Наприклад, можна використовувати застосунок Microsoft Visual Basic.

CDONTS надсилає сповіщення електронною поштою до місцевих віртуальним сервером SMTP. Сервер потім переспрямовує електронну пошту на поштовий SMTP-сервер, указаний у полі Проміжного вузла . Поштовий SMTP-сервер надсилає пошта адреса електронна пошта, який вказано у на до: аргументу ("someone2@example.com" в прикладі). Ім'я, яке обумовлено в на з: аргументу
з'являється, як відправник повідомлень електронна пошта ("someone@example.com» в цьому прикладі) з цього питання"Випробування CDONTS"і повідомлення"це працює"в тексті сповіщення електронною поштою. Ніхто копіюється на сповіщення електронною поштою, тому що ви не надав аргумент для CC або для ВСР області.

Ви можете змінити приклад, так що він буде відправляти електронна пошта HTML або вкладення. Документації про CDONTS відвідайте веб-сайт корпорації Майкрософт:
http://MSDN.Microsoft.com/Library
В області ліворуч послідовно розгорніть вузли обміну повідомленнями та спільної роботи, розширити Співпрацю об'єкти данихта CDO 1.2.1.

Ви можете знайти документацію для SQL Server автоматизацію OLE збережена процедура в SQL Server 2000 Books Online.

Як використовувати CDO, за Microsoft Windows 2000 (CDOSYS)

CDOSYS надає об'єктної моделі для розробки застосунків обміну повідомленнями Microsoft Windows 2000. Вона також забезпечує розширеною функціональністю існуючих бібліотечних CDO для Windows NT Server (CDONTS). CDOSYS вимагає Windows 2000 і місцеві або віддалений сервер SMTP.

Ви можете налаштувати CDOSYS вказують серверів SMTP програмним шляхом дарувати розробників гнучкість конфігурування серверів SMTP.

Щоб отримати додаткові відомості про CDOSYS клацніть номер статті в базі знань Microsoft Knowledge Base:
195683 Зв'язок між 1. x CDO бібліотек і CDOSYS.DLL
Оскільки CDOSYS можете надсилати сповіщення електронною поштою з віддаленим сервером SMTP, CDOSYS не вимагає наявності інтернет інформації сервер встановлений і працює на комп'ютері, на якому запущено SQL Server. Ви також не повинні налаштувати SMTP віртуальний сервер. Все, що вам потрібно зробити полягає в створенні збереженої процедури в SQL Server, який дає змогу надсилати сповіщення електронною поштою.

Під Вільний час сценарій виконання CDOSYS замість SQL Mail, ви не повинні мати поштовий клієнт як Microsoft Outlook, інстальованих на комп'ютері, на якому запущено SQL Server. Ви також не повинні мати Exchange server. Ви можете використовувати будь-якого поштового сервера, який підтримує протокол IMAP за протоколом SMTP як ваш віддалений поштовий SMTP-сервер. Тим не менш, неможливо прочитати або обробки електронна пошта, що надсилається до SQL Server, при використанні CDOSYS. Не вдається замінити функціональність поштовий агент SQL.

сценарій виконання CDOSYS з SQL Server автоматизацію OLE-об'єкт спирається на SQL Server автоматизацію OLE для виклику об'єктної моделі CDOSYS. Це була протестована з SQL Server 2000 з пакетом оновлень 1 (SP1) і SQL Server 2000 з пакетом оновлень 2 (SP2). Microsoft не гарантує, що CDOSYS може бути викликаний з програмуванням OLE збережених процедур на версії SQL Server, які були випущені раніше SQL Server 2000 SP1.

Створити збереженої процедури відправити пошту CDOSYS

Ви можете використовувати код, подібне до нижченаведеного створити збереженої процедури у вашій базі даних, який надсилає повідомлення електронної пошти за допомогою SQL Server автоматизацію OLE збережені процедури для виклику об'єктної моделі CDOSYS.

У цьому прикладі ми надаємо додатковий ступінь обробку помилок до перевірте, hresult декларації про кожного EXEC sp_OA * . Якщо hresult (@hr) дорівнює нулю, попередній sp_OA * заява була успішною. Однак, якщо це hresult є ненульовим, попередній sp_OA * оператор не вдалося.

Для кожного ненульових hresult недостатності рядок вставляється в таблиці [dbo].[cdosysmail_failures] що відзначає, місце і час провал. Крім того, остання помилка інтерпретується за допомогою sp_OAGetErrorInfo Збережена процедура повідомити про джерело та опис помилки. Що опис помилки друкується на підключення до клієнта. Також Цей опис помилки, час і місце відмови вставляються до таблиці [dbo].[cdosysmail_failures] в базі даних, щоб визначити і діагностувати невдачі після доконаного факту.

Якщо не вдається sp_OAGetErrorInfo Збережена процедура, приклад друкує таке повідомлення про помилку, для підключення до клієнта:

sp_OAGetErrorInfo не вдалося
-- drop old cdosysmail_failures table if exists
IF (EXISTS (SELECT * FROM dbo.sysobjects WHERE name = N'cdosysmail_failures' AND type='U')) DROP TABLE [dbo].[cdosysmail_failures]
GO
-- Create new cdosysmail_failures table
CREATE TABLE [dbo].[cdosysmail_failures]
		([Date of Failure] datetime, 
		[Spid] int NULL,
		[From] varchar(100) NULL,
		[To] varchar(100) NULL,
		[Subject] varchar(100) NULL,
		[Body] varchar(4000) NULL,
		[iMsg] int NULL,
		[Hr] int NULL,
		[Source of Failure] varchar(255) NULL,
		[Description of Failure] varchar(500) NULL,
		[Output from Failure] varchar(1000) NULL,
		[Comment about Failure] varchar(50) NULL)
GO

IF (EXISTS (SELECT * FROM dbo.sysobjects WHERE name = N'sp_send_cdosysmail' AND type='P')) DROP PROCEDURE [dbo].[sp_send_cdosysmail]
GO

	CREATE PROCEDURE [dbo].[sp_send_cdosysmail] 
	   @From varchar(100) ,
	   @To varchar(100) ,
	   @Subject varchar(100)=" ",
	   @Body varchar(4000) =" "
	/*********************************************************************
	
	This stored procedure takes the parameters and sends an e-mail. 
	All the mail configurations are hard-coded in the stored procedure. 
	Comments are added to the stored procedure where necessary.
	References to the CDOSYS objects are at the following MSDN Web site:
	http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_messaging.asp
	
	***********************************************************************/ 
	   AS
	   Declare @iMsg int
	   Declare @hr int
	   Declare @source varchar(255)
	   Declare @description varchar(500)
	   Declare @output varchar(1000)
	
	--************* Create the CDO.Message Object ************************
	   EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OACreate')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
                   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OACreate')
                   RETURN
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           RETURN
	         END
	     END
	
	--***************Configuring the Message Object ******************
	-- This is to configure a remote SMTP server.
	-- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp
	   EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty sendusing')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
                   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty sendusing')
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END
	-- This is to configure the Server Name or IP address. 
	-- Replace MailServerName by the name or IP of your SMTP Server.
	   EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', cdoSMTPServerName 
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty smtpserver')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty smtpserver')
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END
	
	-- Save the configurations to the message object.
	   EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty Update')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty Update')                 
		   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END
	
	-- Set the e-mail parameters.
	   EXEC @hr = sp_OASetProperty @iMsg, 'To', @To
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty To')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty To')                 
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END

	   EXEC @hr = sp_OASetProperty @iMsg, 'From', @From
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty From')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty From')                 
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END

	   EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty Subject')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty Subject')
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END
	
	-- If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.
	   EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OASetProperty TextBody')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OASetProperty TextBody')
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END

	   EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL
	   IF @hr <>0 
	     BEGIN
	       SELECT @hr
	       INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OAMethod Send')
	       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	       IF @hr = 0
	         BEGIN
	           SELECT @output = '  Source: ' + @source
	           PRINT  @output
	           SELECT @output = '  Description: ' + @description
	           PRINT  @output
  	  	   INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OAMethod Send')
                   GOTO send_cdosysmail_cleanup
	         END
	       ELSE
	         BEGIN
	           PRINT '  sp_OAGetErrorInfo failed.'
	           GOTO send_cdosysmail_cleanup
	         END
	     END
	

	-- Do some error handling after each step if you have to.
	-- Clean up the objects created.
        send_cdosysmail_cleanup:
	If (@iMsg IS NOT NULL) -- if @iMsg is NOT NULL then destroy it
	BEGIN
		EXEC @hr=sp_OADestroy @iMsg
	
		-- handle the failure of the destroy if needed
		IF @hr <>0 
	     	BEGIN
			select @hr
        	        INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'Failed at sp_OADestroy')
	       		EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT
	
			-- if sp_OAGetErrorInfo was successful, print errors
			IF @hr = 0
			BEGIN
				SELECT @output = '  Source: ' + @source
			        PRINT  @output
			        SELECT @output = '  Description: ' + @description
			        PRINT  @output
				INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, 'sp_OAGetErrorInfo for sp_OADestroy')
			END
			
			-- else sp_OAGetErrorInfo failed
			ELSE
			BEGIN
				PRINT '  sp_OAGetErrorInfo failed.'
			        RETURN
			END
		END
	END
	ELSE 
	BEGIN
		PRINT ' sp_OADestroy skipped because @iMsg is NULL.'
		INSERT INTO [dbo].[cdosysmail_failures] VALUES (getdate(), @@spid, @From, @To, @Subject, @Body, @iMsg, @hr, @source, @description, @output, '@iMsg is NULL, sp_OADestroy skipped')
	        RETURN
	END

Далі за допомогою збереженої процедури, які створено та забезпечити правильні параметри.
   declare @Body varchar(4000)
   select @Body = 'This is a Test Message'
   exec sp_send_cdosysmail 'someone@example.com','someone2@example.com','Test of CDOSYS',@Body
Примітка. Тільки члени фіксованого серверної ролі Системний адміністратор може працювати автоматизацію OLE збережених процедур. Якщо SQL Server користувач не є членом Системний адміністратор фіксованого серверної ролі, не можна використовувати збережених процедур, які згадуються в прикладі надсилати повідомлення електронної пошти. В такій ситуації ви, можливо, для розробки клієнтських застосунків для надсилання повідомлень з CDOSYS. Наприклад, можна використовувати застосунок Microsoft Visual Basic.

CDOSYS надсилає повідомлення електронної пошти на віддаленому поштовий SMTP-сервер, указаний як cdoSMTPServerName.

Поштовий SMTP-сервер надсилає пошта адреса електронної пошти, який вказано у на до: аргументу ("someone2@example.com" в цьому прикладі). Ім'я, яке обумовлено в на з: аргументу відображається як відправник повідомлень електронної пошти ("someone@example.com» в цьому прикладі).

Ви можете змінити цей приклад його надсилання електронної пошти тексту або вкладення. Документації про CDOSYS відвідайте веб-сайт корпорації Майкрософт:
http://MSDN.Microsoft.com/Library
В області ліворуч послідовно розгорніть вузли обміну повідомленнями та спільної роботи, розширити Співпрацю об'єкти данихта CDO для Windows 2000.

Додаткові відомості

Ми настійно рекомендуємо, що ви відправите повідомлення електронної пошти за допомогою місцевих SMTP розкладки замість того щоб використовувати віддалене ім'я SMTP-пошти. Зразок sp_send_cdosysmail Збережена процедура працює в процесі з SQL Server і буде провал, якщо сервер SMTP в автономному режимі або зламані. Надсилання повідомлень електронної пошти через місцеві розкладки вимагає тільки що збережену процедуру має дозвіл на пікап каталогів. SMTP-сервер буде самостійно обробити пошту.

Щоб отримати додаткові відомості про те, як надсилати пошту за допомогою місцевих розкладки, клацніть номер статті в базі знань Microsoft Knowledge Base:
286430 Як надіслати HTML форматі пошти за допомогою CDO для Windows 2000 і місцевих розкладки

Властивості

Номер статті: 312839 - Востаннє переглянуто: 22 червня 2014 р. - Редакція: 2.0
Застосовується до:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Ключові слова: 
kbsqlsetup kbhowtomaster kbmt KB312839 KbMtuk
Машинний переклад
ВАЖЛИВО! Ця стаття перекладена засобами машинного перекладу Microsoft. Статтю можна редагувати в середовищі Community Translation Framework (CTF). Щоб якомога швидше перекласти всі статті у своїй базі знань різними мовами, компанія Microsoft не лише звертається до професійних перекладачів, але й вдається до машинного перекладу, який потім редагується спільнотою. Такі статті можуть містити лексичні, синтаксичні та граматичні помилки. Microsoft не несе відповідальності за будь-які неточності, помилки або збитки, до яких може призвести неправильний переклад статей або їх використання. Докладніше про CTF див. на веб-сторінці http://support.microsoft.com/gp/machine-translation-corrections/uk-ua.
Клацніть тут, щоб переглянути цю статтю англійською мовою: 312839

Надіслати відгук

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com