Как отправлять электронную почту без использования SQL Mail в SQL Server

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 312839

В ЭТОЙ ЗАДАЧЕ

Аннотация
Служба SQL Mail обеспечивает легко отправлять и читать сообщения электронной почты из Microsoft SQL Server. Тем не менее так как SQL Mail приложения MAPI, MAPI Подсистема должен находиться на сервере. Установка Microsoft Windows NT 4.0 Подсистему MAPI при установке службы сообщений Windows. Тем не менее Microsoft Windows 2000 предоставляет подсистему MAPI. Поэтому, если вы хотите использовать SQL Mail необходимо установить клиент MAPI, например Microsoft Outlook.

Можно использовать другие методы для отправки сообщения электронной почты протокола SMTP (простой) непосредственно из SQL Server. Например можно использовать объекты данных совместной работы для NT Server (CDONTS) или совместной работы для Windows 2000 CDOSYS (объекты) в сочетании с sp_OA SQL Server OLE-автоматизации хранимых процедур. В данной статье содержит примеры использования этих методов для отправки электронной почты в Интернете почтовый сервер. Методы можно изменить таким образом, чтобы они предоставят более надежная система рассылки. Например можно добавить код обработки ошибок. Методы в примерах не предоставляют средств для чтения или для обработка электронной почты.

Примечание CDOSYS доступен, начиная с Windows 2000, и мы рекомендуем Чтобы использовать вместо CDONTS CDOSYS. CDONTS не поддерживается в Windows Server 2003 и более поздних операционных системах.

Примечание Эти примеры программного кода показаны методы, которые можно использовать для вызова объектной модели CDO в Transact-SQL. Вы несете ответственность за любые программирования расширений в примерах или любой нагрузки, тестирование для выполнения кода в производство Среда.

Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации без гарантии или подразумеваемых. Это включает, но не ограничивается Чтобы подразумеваемые гарантии товарности или пригодности для определенной Цель. В данной статье предполагается, что вы знакомы с программированием язык, имеющего достаточный и со средствами, которые используются для создания и отладки. Сотрудники службы поддержки Майкрософт могут объяснить функциональные возможности конкретной процедуры, но они не изменит их Примеры для предоставления функций или для удовлетворения ваших особые требования.

Способы использования CDO для Microsoft Windows NT Server (CDONTS)

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

Дополнительные сведения о CDONTS следующий номер статьи базы знаний Майкрософт:
177850Какова разница между CDO 1.2 и CDONTS?
CDONTS отправки электронной почты по протоколу SMTP на локальный сервер. Если у вас сервер SMTP на локальном сервере, можно использовать Виртуальный сервер SMTP для маршрутизации электронной почты SMTP для установки служб IIS соответствующие SMTP-сервер. Использование CDONTS для отправки электронной почты с SQL Server выполните следующие действия.
  1. Установка служб IIS и установить его на компьютере под управлением SQL Server.
  2. Укажите почтовый сервер SMTP как «направляющий узел», чтобы Служба IIS SMTP автоматически маршрутизирует SMTP электронной почты, отправляемого на локального сервера на почтовый сервер SMTP для доставки.
  3. Создание хранимой процедуры в SQL Server, можно использовать для Отправьте сообщение электронной почты.
При использовании CDONTS вместо SQL Mail нет необходимости у почтового клиента, например Microsoft Outlook, установленных на компьютере под управлением SQL Server. Также необходимо иметь Microsoft Exchange server. Можно использовать любой почтовый сервер, поддерживающий электронной почты SMTP, как ваш «направляющий узел». Тем не менее, не может считывать и обрабатывать сообщения электронной почты, отправленные на компьютер, с помощью CDONTS запущен SQL Server. Также нельзя заменить функциональность почта агента SQL.

Следуйте инструкциям полагаться на Microsoft Windows 2000. Если на компьютере установлен IIS 4.0, вы можете Аналогичным образом настройте Microsoft Windows NT 4.0. Тем не менее шаги будут отличаться немного.

Дополнительные сведения о том, как Настройка «направляющий узел» в Microsoft Windows NT 4.0, щелкните ниже номер статьи базы знаний Майкрософт:
230235Инструкции по настройке службы IIS SMTP на ретрансляцию SMTP электронной почты

Настройка направляющего узла

  1. Нажмите кнопку Пуск, выберите программы, Администрирование, а затем
    Выберите Диспетчер служб Интернета , чтобы открыть диспетчер служб IIS.
  2. Откройте дерево сервера. Щелкните правой кнопкой мыши Виртуальный сервер SMTP по умолчаниюи выберите команду Свойства.
  3. Выберите вкладку Доставка и нажмите кнопку Дополнительно.
  4. Введите имя почтового сервера SMTP в поле Промежуточный узел . Если вы не знаете имя почтового сервера SMTP Обратитесь к администратору электронной почты.
  5. Убедитесь, что почтовый протокол SMTP (простой) служба запущена. Служба SMTP является частью службы администрирования IIS. Таким образом должна быть запущена служба администрирования IIS.

Создание хранимой процедуры для отправки электронной почты 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) = nullASDeclare @MailID intDeclare @hr intEXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUTEXEC @hr = sp_OASetProperty @MailID, 'From',@FromEXEC @hr = sp_OASetProperty @MailID, 'Body', @BodyEXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCCEXEC @hr = sp_OASetProperty @MailID, 'CC', @CCEXEC @hr = sp_OASetProperty @MailID, 'Subject', @SubjectEXEC @hr = sp_OASetProperty @MailID, 'To', @ToEXEC @hr = sp_OAMethod @MailID, 'Send', NULLEXEC @hr = sp_OADestroy @MailID

Затем использовать хранимую процедуру, созданную и предоставления правильные параметры:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Примечание Только члены фиксированной серверной роли sysadmin могут запустить OLE-автоматизации хранимых процедур. Если пользователь SQL Server не является членом фиксированной серверной роли sysadmin , нельзя использовать хранимую процедуру, которая является упомянутые в примере для отправки электронной почты. В такой ситуации может потребоваться Разработка клиентского приложения для отправки электронной почты с CDONTS. Например вы можете Используйте приложение Microsoft Visual Basic.

CDONTS отправляет сообщение электронной почты локальный виртуальный сервер SMTP. Затем сервер направляет сообщения электронной почты SMTP почтовый сервер, указанный в поле Промежуточный узел . Почтовый SMTP-сервер отправляет сообщение электронной почты адрес, указанный в в: аргумент ("someone2@example.com" в примере). Имя, указывается в от: аргумент
отправителем сообщения электронной почты ("someone@example.com" в данном примере) с темой «Тест CDONTS» и сообщение «он работает» в теле сообщения электронной почты. Никто не копируется в по электронной почте, так как аргумент не предоставлен для "Копия" или поле "СК" .

Можно изменить пример, он будет отправлен Или вложения электронной почты в формате HTML. Документацию по CDONTS, посетите следующий веб-узел корпорации Майкрософт: В левой области разверните узел совместной работы и обмена сообщениями, разверните Объекты данных совместной работыи раскройте пакет CDO 1.2.1.

Для поиска документации по SQL Server OLE Автоматизация хранимых процедур в электронной документации по SQL Server 2000.

back to the top

Способы использования CDO для Windows 2000 (CDOSYS)

CDOSYS предоставляет объектную модель для разработки системы обмена сообщениями приложения в Microsoft Windows 2000. Он также предоставляет расширенные функциональные возможности поверх существующей библиотеки службы удаленной проверки пользователей (CDONTS-CDO для Windows NT Server). Требует CDOSYS Windows 2000 и локальный или удаленный SMTP-сервер.

Можно настроить CDOSYS, чтобы указывать на серверы SMTP программными средствами, чтобы предоставить разработчикам гибкость При настройке серверов SMTP.

Для Дополнительные сведения о CDOSYS, щелкните следующий номер статьи для просмотра статьи базы знаний Майкрософт:
195683Связь между библиотеками CDO 1.x и CDOSYS.БИБЛИОТЕКИ DLL
Поскольку CDOSYS можно отправлять по электронной почте удаленного SMTP-сервера сервер, CDOSYS не требует наличия сервера IIS установлен и запущен на компьютере, на котором выполняется SQL Server. Вы также сделать не нужно настраивать виртуальный SMTP-сервер. Все, что нужно сделать — создать Хранимая процедура в SQL Server, который можно использовать для отправки электронной почты.

При использовании CDOSYS вместо SQL Mail не требуется иметь почтовый клиент как Microsoft Outlook, установленных на компьютере, на котором выполняется SQL Server. Также необходимо иметь сервер Exchange. Можно использовать любой почтовый сервер как удаленный почтовый сервер SMTP, который поддерживает почту SMTP. Тем не менее нельзя прочитать и обработать сообщение, отправленное в SQL Server при использовании CDOSYS. Можно также не удается заменить функциональность почта агента SQL.

Использование CDOSYS с SQL Server OLE-автоматизации объектов зависит от SQL Server OLE-автоматизации для вызова объектной модели CDOSYS. Это была протестирована служба SQL Server 2000 С пакетом обновления 1 (SP1) и SQL Server 2000 Пакет обновления 2 (SP2). Корпорация Майкрософт не поддерживает гарантирует, что CDOSYS могут вызываться из процедур OLE-автоматизации хранения в версиях SQL Server, выпущенных до SQL Server 2000 с пакетом обновления 1.

Создание хранимой процедуры для отправки сообщений 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 existsIF (EXISTS (SELECT * FROM dbo.sysobjects WHERE name = N'cdosysmail_failures' AND type='U')) DROP TABLE [dbo].[cdosysmail_failures]GO-- Create new cdosysmail_failures tableCREATE 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)GOIF (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
Примечание Только члены фиксированной серверной роли sysadmin могут запустить OLE-автоматизации хранимых процедур. Если пользователь SQL Server не является членом фиксированной серверной роли sysadmin , нельзя использовать хранимую процедуру, которая является упомянутые в примере для отправки электронной почты. В такой ситуации может потребоваться Разработка клиентского приложения для отправки почты с CDOSYS. Например можно использовать приложение Microsoft Visual Basic.

CDOSYS отправляет сообщение электронной почты удаленный SMTP почтовый сервер, указанный как cdoSMTPServerName.

Почтовый SMTP-сервер отправляет сообщение электронной почты адрес, указанный в в: аргумент ("someone2@example.com" в этом примере). Имя, указывается в от: аргумент выглядит как отправителя сообщения электронной почты ("someone@example.com" в данном примере).

В этом примере для отправки электронной почты на основе текста можно изменить или вложения. Для получения сведений о CDOSYS посетите следующие веб узел: В левой области разверните узел совместной работы и обмена сообщениями, разверните Объекты данных совместной работыи раскройте CDO для Windows 2000.

back to the top
Дополнительная информация
Настоятельно рекомендуется отправлять по электронной почте с помощью локального Каталог раскладки SMTP вместо использования имени удаленного почтового SMTP. Образец sp_send_cdosysmail выполняется хранимая процедура в процессе с SQL Server и будет Если SMTP-сервер отключен или неработающие ошибкой. Отправка сообщений электронной почты через локальный каталог раскладки требует только наличия разрешения на хранимую процедуру каталог раскладки. SMTP-сервер будет обрабатывать независимо друг от друга почта.

Для получения дополнительных сведений сведения о том, как отправить почту с помощью локального каталога считывания следующий номер статьи базы знаний Майкрософт Base:
286430Как отправить HTML формате с помощью CDO для Windows 2000 и локальный каталог раскладки почты
POP3 Интернет lotus notes novell groupwise

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 312839 — последний просмотр: 07/20/2013 13:56:00 — редакция: 5.0

Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition

  • kbsqlsetup kbhowtomaster kbmt KB312839 KbMtru
Отзывы и предложения