Como enviar correio electrónico sem utilizar o correio de SQL no SQL Server

Traduções de Artigos Traduções de Artigos
Artigo: 312839 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

SQL Mail fornece uma forma fácil de enviar e ler correio electrónico do Microsoft SQL Server. No entanto, uma vez que o SQL Mail é uma aplicação de MAPI, um subsistema MAPI tem de estar presente no servidor. Microsoft Windows NT 4.0 instala um subsistema MAPI quando instalar o Windows Messaging. No entanto, o Microsoft Windows 2000 não fornece um subsistema MAPI. Por conseguinte, se pretender utilizar o correio de SQL, tem de instalar um cliente MAPI como o Microsoft Outlook.

Pode utilizar outros métodos para enviar correio electrónico de Simple Mail Transfer Protocol (SMTP) directamente a partir do SQL Server. Por exemplo, pode utilizar Collaboration Data Objects para NT Server (CDONTS) ou de colaboração dados objectos para o Windows 2000 (CDOSYS) juntamente com os procedimentos de SQL Server automatização OLE armazenado sp_OA . Este artigo contém exemplos de como utilizar estas técnicas para enviar correio electrónico para um servidor de correio da Internet. Pode modificar as técnicas de modo a que será fornecem um sistema de correio mais robusto. Por exemplo, poderá adicionar código de processamento de erros. Os métodos nos exemplos não fornecem um meio para leitura ou para o processamento de correio electrónico.

Nota CDOSYS está disponível a partir do Windows 2000 e recomendamos que utilize CDOSYS em vez de CDONTS. CDONTS não é suportada com o Windows Server 2003 e sistemas operativos posteriores.

Nota Estes exemplos de programação ilustram técnicas que pode utilizar para invocar o modelo de objectos CDO no Transact-SQL. É responsável por quaisquer extensões de programação aos exemplos ou para qualquer tensão de testes que são necessária para executar o código num ambiente de produção.

A Microsoft fornece exemplos de programação apenas, a título sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e com as ferramentas que são utilizadas para criar e depurar procedimentos. Engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador.

Como utilizar CDO para Microsoft Windows NT Server (CDONTS)

CDONTS é um protocolo simples de transferência de correio (SMTP) específico OLE servidor especificamente concebido para fornecer funcionalidades de mensagens para aplicações baseadas na Web. Como tal, CDONTS suporta enviar correio electrónico em HTML. Aplicações baseadas em MAPI, tal como o SQL Mail, não o fizer. Por predefinição, o Microsoft Internet Information Server (IIS) 4.0 ou posterior, instala CDONTS. Por predefinição, Microsoft Windows 2000 instala o Microsoft Internet Information Server (IIS) 5.0.

Para mais informações sobre CDONTS, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
177850 O que é a diferença entre CDO 1.2 e CDONTS?
CDONTS envia correio electrónico através de SMTP para o servidor local. Se não tiver um servidor de SMTP no servidor local, pode utilizar o servidor virtual de SMTP que o IIS instala para encaminhar o correio electrónico SMTP para o servidor de correio SMTP apropriado. Para utilizar CDONTS para enviar correio electrónico a partir do SQL Server, siga estes passos:
  1. Instalar o IIS e que seja executado no computador que isrunning SQL Server.
  2. Especificar o servidor de correio SMTP como o anfitrião"inteligente" para que o serviço SMTP do IIS encaminha automaticamente qualquer mensagem de correio de SMTP que é enviada ao servidor de yourlocal para o servidor de correio SMTP para entrega.
  3. Crie um procedimento armazenado no SQL Server que pode utilizar correio electrónico de tosend.
Quando utiliza o CDONTS em vez do SQL Mail, não é necessário para que um cliente de correio como o Microsoft Outlook instalado no computador que esteja a executar o SQL Server. Também não tem um servidor do Microsoft Exchange. Pode utilizar qualquer servidor de correio que suporte o correio electrónico SMTP como o "anfitrião inteligente". No entanto, não consegue ler e processar mensagens de correio electrónico é enviada para o computador que esteja a executar o SQL Server utilizando o CDONTS. Também não é possível substituir a funcionalidade de correio do agente de SQL.

As instruções que se seguem dependem do Microsoft Windows 2000. Se o IIS 4.0 estiver instalado no computador, pode configurar o Microsoft Windows NT 4.0 do mesmo modo. No entanto, os passos variam ligeiramente.

Para mais informações sobre como configurar o "anfitrião avançado" no Microsoft Windows NT 4.0, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
230235 Como configurar o serviço SMTP do IIS para enviar correio de reencaminhamento SMTP

Configurar o anfitrião avançado

  1. Clique em Iniciar, aponte para programas, aponte para Ferramentas administrativase, em seguida
    Clique em Gestor de serviços Internet para abrir o Gestor de IIS.
  2. Abra a árvore para o servidor. Com o botão direito Default SMTP Virtual Servere, em seguida, clique em Propriedades.
  3. Localize o separador entrega e, em seguida, clique em Avançadas.
  4. Escreva o nome do seu servidor de correio de SMTP na caixa de texto de Anfitrião avançado . Se não souber o nome do seu servercontact de correio SMTP o administrador de correio.
  5. Certifique-se de que o serviço Simple Mail Transfer Protocol (SMTP) está em execução. O serviço SMTP faz parte do Service.Therefore de Admin do IIS, o IIS Admin Service também deve estar em execução.

Criar um procedimento armazenado para enviar correio electrónico do CDONTS

Nota Os exemplos de empresas, organizações, produtos, nomes de domínio, endereços de correio electrónico, logótipos, pessoas, locais e eventos mencionados neste artigo são fictícios. Destina-se nem deve ser inferida nenhuma associação com qualquer empresa, organização, produto, nome de domínio, endereço de correio electrónico, logótipo, pessoa, locais ou eventos.

Pode utilizar código semelhante ao seguinte para criar um procedimento armazenado na base de dados que envia correio electrónico utilizando os procedimentos de SQL Server automatização OLE armazenados para invocar o modelo de objecto 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

Em seguida, utilize o procedimento armazenado que criou e fornecer os parâmetros correctos:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Nota Apenas os membros da função de servidor fixa sysadmin podem executar os procedimentos de automatização OLE armazenados. Se o utilizador do SQL Server não é um membro da função de servidor fixa sysadmin , não é possível utilizar o procedimento armazenado mencionado no exemplo para enviar correio electrónico. Nessa situação, poderá ter de desenvolver uma aplicação de cliente para enviar correio electrónico com CDONTS. Por exemplo, pode utilizar uma aplicação Microsoft Visual Basic.

CDONTS envia a mensagem de correio electrónico para o servidor virtual de SMTP local. Em seguida, o servidor encaminha o correio electrónico para o servidor de correio de SMTP que é especificado na caixa de texto de Anfitrião avançado . O servidor de correio SMTP envia correio para o endereço de e-mail especificado no para: argumento ("someone2@example.com" no exemplo). O nome especificado no de: argumento
aparece como remetente do correio electrónico ("someone@example.com" neste exemplo) com o assunto "Teste de CDONTS" e a mensagem "funciona" como corpo da mensagem de correio electrónico. Ninguém é copiado a mensagem de correio electrónico porque não fornecido um argumento para o CC ou para o campo BCC .

Pode modificar o exemplo para que irá enviar correio electrónico em HTML ou anexos. Para obter documentação sobre CDONTS, visite o seguinte Web site da Microsoft:
http://msdn.microsoft.com/library
No painel da esquerda, expanda o serviço de mensagens e colaboração, expanda Collaboration Data Objectse, em seguida, expanda o CDO 1.2.1.

Pode encontrar documentação para obter os procedimentos de SQL Server automatização OLE armazenados no SQL Server 2000 Books Online.

Como utilizar CDO para Microsoft Windows 2000 (CDOSYS)

CDOSYS fornece um modelo de objecto para desenvolver aplicações de mensagens no Microsoft Windows 2000. Também fornece funcionalidades melhoradas através da biblioteca de CDO para Windows NT Server (CDONTS) existente. CDOSYS requer o Windows 2000 e um local ou um servidor SMTP remoto.

Pode configurar CDOSYS para apontar para servidores de SMTP através de programação a fornecer aos programadores flexibilidade na configuração de servidores de SMTP.

Para mais informações sobre CDOSYS, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
195683 Relação entre bibliotecas CDO 1. x e CDOSYS.DLL
Porque CDOSYS pode enviar correio electrónico a um servidor SMTP remoto, CDOSYS não requer que tem o Internet Information Server instalado e em execução no computador que esteja a executar o SQL Server. Não terá também de configurar o servidor virtual de SMTP. Tudo o que tem a fazer é criar um procedimento armazenado no SQL Server que pode utilizar para enviar correio electrónico.

Quando utiliza o CDOSYS em vez do SQL Mail, não é necessário para que um cliente de correio como o Microsoft Outlook instalado no computador que esteja a executar o SQL Server. Não terá também de ter um servidor do Exchange. Pode utilizar qualquer servidor de correio que suporte o correio de SMTP como o servidor de correio SMTP remoto. No entanto, não é possível ler ou processar o correio electrónico enviado para o SQL Server se utilizar CDOSYS. Também não é possível substituir a funcionalidade de correio do agente de SQL.

Utilização de CDOSYS com o objecto SQL Server automatização OLE baseia-se no SQL Server automatização OLE para invocar o modelo de objecto CDOSYS. Isto foi testado com o SQL Server 2000 Service Pack 1 (SP1) e SQL Server 2000 Service Pack 2 (SP2). A Microsoft não garante que CDOSYS podem ser chamados a partir dos procedimentos de automatização OLE armazenados em versões do SQL Server que foram lançadas antes do SQL Server 2000 SP1.

Criar um procedimento armazenado para enviar correio CDOSYS

Pode utilizar código semelhante ao seguinte para criar um procedimento armazenado na base de dados que envia correio electrónico utilizando os procedimentos de SQL Server automatização OLE armazenados para invocar o modelo de objecto CDOSYS.

Neste exemplo, fornecemos um grau opcional de erro de processamento para verificar o hresult de cada instrução EXEC sp_OA * . Se o hresult (@hr) for zero, a instrução do sp_OA * anterior foi efectuada com êxito. No entanto, se esse hresult for diferente de zero, a declaração do sp_OA * anterior falhou.

Para cada falha hresult diferente de zero, é inserida uma linha na tabela [dbo].[cdosysmail_failures] que anota o local e a hora da falha. Além disso, o último erro é interpretado utilizando o procedimento armazenado sp_OAGetErrorInfo para indicar a origem e a descrição do erro. Essa descrição de erro é impressa a ligação do cliente. Também essa descrição de erro, hora e local de falha são inseridas na tabela [dbo].[cdosysmail_failures] na base de dados para que possa identificar e diagnosticar falhas depois do facto.

Se o procedimento armazenado sp_OAGetErrorInfo próprio falhar, o exemplo que se imprime a seguinte mensagem de erro para a ligação do cliente:

sp_OAGetErrorInfo falhou
-- 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

Em seguida, utilize o procedimento armazenado que criou e fornecer os parâmetros correctos.
   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
Nota Apenas os membros da função de servidor fixa sysadmin podem executar os procedimentos de automatização OLE armazenados. Se o utilizador do SQL Server não for um membro da função de servidor fixa sysadmin , é possível utilizar o procedimento armazenado mencionado no exemplo para enviar correio electrónico. Nessa situação, poderá ter de desenvolver uma aplicação de cliente para enviar correio com CDOSYS. Por exemplo, pode utilizar uma aplicação Microsoft Visual Basic.

CDOSYS envia a mensagem de correio electrónico para o servidor de correio SMTP remoto especificada como cdoSMTPServerName.

O servidor de correio SMTP envia correio para o endereço de e-mail especificado no para: argumento ("someone2@example.com" neste exemplo). O nome especificado no de: argumento aparece como remetente do correio electrónico ("someone@example.com" neste exemplo).

Pode modificar este exemplo para que enviar correio electrónico baseado em texto ou anexos. Para obter documentação sobre CDOSYS, visite o seguinte Web site da Microsoft:
http://msdn.microsoft.com/library
No painel da esquerda, expanda o serviço de mensagens e colaboração, expanda Collaboration Data Objectse, em seguida, expanda o CDO para o Windows 2000.

Mais Informação

Recomendamos vivamente que envia correio electrónico utilizando o directório de recolha de SMTP local em vez de utilizar o nome de correio SMTP remoto. A amostra de sp_send_cdosysmail armazenados procedimento executa no processo com o SQL Server e falhará se o servidor de SMTP está offline ou interrompida. Apenas enviar correio electrónico através do directório de recolha local requer que o procedimento armazenado tem permissão para o directório de recolha. O servidor de SMTP independentemente processará o correio.

Para mais informações sobre como enviar correio utilizando o directório de recolha local, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
286430 Como enviar HTML formatado correio utilizando o CDO para o Windows 2000 e o directório de recolha local

Propriedades

Artigo: 312839 - Última revisão: 24 de junho de 2014 - Revisão: 2.0
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Palavras-chave: 
kbsqlsetup kbhowtomaster kbmt KB312839 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 312839

Submeter comentários

 

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