Como enviar email sem usar o SQL Mail no SQL Server

Traduções deste artigo Traduções deste artigo
ID do artigo: 312839 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

SQL Mail oferece uma maneira fácil de enviar e ler emails do Microsoft SQL Server. No entanto, como o SQL Mail é um aplicativo MAPI, um subsistema MAPI deve estar presente no servidor. Microsoft Windows NT 4.0 é instalado um subsistema MAPI quando você instala o Windows Messaging. No entanto, o Microsoft Windows 2000 não fornece um subsistema MAPI. Portanto, se você quiser usar o SQL Mail, você deve instalar um cliente MAPI como o Microsoft Outlook.

Você pode usar outros métodos para enviar emails de protocolo de transferência de correio simples (SMTP) diretamente do SQL Server. Por exemplo, você pode usar o Collaboration Data Objects para NT Server (CDONTS) ou colaboração dados objetos para Windows 2000 (CDOSYS) em combinação com os procedimentos de SQL Server automação OLE armazenados sp_OA . Este artigo contém exemplos de como usar essas técnicas para enviar um email para um servidor de email da Internet. Você pode modificar as técnicas para que eles fornecem um sistema de endereçamento mais robusto. Por exemplo, convém adicionar código de tratamento de erros. Os métodos nos exemplos não fornecem um meio para leitura ou para o processamento de e-mail.

Observação CDOSYS está disponível a partir do Windows 2000 e recomendamos que você use o CDOSYS em vez de CDONTS. CDONTS não é compatível com Windows Server 2003 e sistemas operacionais posteriores.

Observação Esses exemplos de programação ilustram técnicas que você pode usar para invocar o modelo de objeto CDO no Transact-SQL. Você é responsável por quaisquer extensões de programação aos exemplos ou para qualquer tensão de teste que é necessário para executar o código em um ambiente de produção.

A Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação a um propósito específico. Este artigo presume que você esteja familiarizado com a linguagem de programação que está sendo demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades específicas.

Como usar o CDO para o Microsoft Windows NT Server (CDONTS)

CDONTS é um servidor OLE protocolo de transferência de correio simples (SMTP) específico que é projetado para fornecer a funcionalidade de mensagens para aplicativos baseados na Web. Como tal, CDONTS oferece suporte ao envio de email em HTML. Aplicativos com base em MAPI, como o SQL Mail, não. Por padrão, o Microsoft Internet informações Server (IIS) 4.0 ou posterior, instala CDONTS. Por padrão, o Windows 2000 instala o Microsoft Internet Information Server (IIS) 5.0.

Para obter mais informações sobre CDONTS, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
177850 Qual é a diferença entre CDO 1.2 e CDONTS?
CDONTS envia e-mail através de SMTP para o servidor local. Se você não tiver um servidor SMTP no servidor local, você pode usar o servidor virtual SMTP que instala o IIS para encaminhar seus emails de SMTP para o servidor de email SMTP apropriado. Para usar o CDONTS para enviar email a partir do SQL Server, execute estas etapas:
  1. Instale o IIS e que ele seja executado no computador que estiver executando o SQL Server.
  2. Especifica o servidor de email SMTP como o "host inteligente" para que o serviço IIS SMTP roteia automaticamente todos os emails SMTP que é enviado ao servidor de yourlocal seu servidor de email SMTP para entrega.
  3. Crie um procedimento armazenado no SQL Server que você pode usar o email tosend.
Quando você usar o CDONTS em vez do SQL Mail, não é necessário ter um cliente de email como o Microsoft Outlook instalado no computador que está executando o SQL Server. Além disso, você não precisa ter um Microsoft Exchange server. Você pode usar qualquer servidor de email que ofereça suporte a email SMTP como o "host inteligente". No entanto, você não pode ler e processar o email é enviado para o computador que está executando o SQL Server usando CDONTS. Você também não pode substituir a funcionalidade de email do agente SQL.

As instruções que se seguem dependem do Microsoft Windows 2000. Se o IIS 4.0 estiver instalado no computador, você pode configurar o Microsoft Windows NT 4.0 da mesma forma. No entanto, as etapas têm pequenas diferenças.

Para obter mais informações sobre como configurar o "host inteligente" no Microsoft Windows NT 4.0, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
230235 Como configurar o serviço IIS SMTP para retransmitir SMTP email

Configurar o Host inteligente

  1. Clique em Iniciar, aponte para programas, aponte para Ferramentas administrativase, em seguida,
    Clique em Gerenciador de serviços de Internet para abrir o Gerenciador do IIS.
  2. Abra a árvore para o seu servidor. Do mouse em Default SMTP Virtual Servere, em seguida, clique em Propriedades.
  3. Localize na guia entrega e, em seguida, clique em Avançado.
  4. Digite o nome do seu servidor de email SMTP na caixa de texto Host inteligente . Se você não souber o nome do seu servercontact de correio SMTP o administrador do sistema.
  5. Certifique-se de que o serviço de protocolo de transferência de correio simples (SMTP) está sendo executado. O serviço SMTP é parte do Service.Therefore de administração do IIS, também deverá estar executando o IIS Admin Service.

Criar um procedimento armazenado para enviar email CDONTS

Observação Os exemplos de empresas, organizações, produtos, nomes de domínio, endereços de email, logotipos, pessoas, lugares e eventos descritos neste artigo são fictícios. Nenhuma associação com qualquer empresa real, organização, produto, nome de domínio, endereço de email, logotipo, pessoa, lugares ou eventos é intencional ou deve ser inferida.

Você pode usar código semelhante ao seguinte para criar um procedimento armazenado no banco de dados que envia email usando os procedimentos do SQL Server automação OLE armazenados para chamar o modelo de objeto 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, use o procedimento armazenado que você criou e fornecer os parâmetros corretos:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Observação Somente os membros da função de servidor fixa sysadmin podem executar os procedimentos de automação OLE armazenados. Se o usuário do SQL Server não é um membro da função de servidor fixa sysadmin , você não pode usar o procedimento armazenado mencionado no exemplo para enviar email. Em uma situação assim, talvez você precise desenvolver um aplicativo cliente para enviar emails com CDONTS. Por exemplo, você pode usar um aplicativo do Microsoft Visual Basic.

CDONTS envia o email para o servidor virtual de SMTP local. O servidor encaminha o e-mail para o servidor de email SMTP que é especificado na caixa de texto Host inteligente . O servidor de email SMTP envia o email para o endereço de email especificado no para: argumento ("someone2@example.com" no exemplo). O nome especificado no de: argumento
aparecerá como o remetente do email ("someone@example.com" neste exemplo) com o assunto "Teste de CDONTS" e a mensagem "ele funciona" como o corpo do email. Ninguém é copiado no email porque você não forneceu um argumento para o CC ou para o campo Cco .

Você pode modificar o exemplo para que ele enviará o email baseado em HTML ou anexos. Para obter documentação sobre CDONTS, visite o seguinte site da Microsoft:
http://msdn.microsoft.com/Library
No painel esquerdo, expanda mensagens e colaboração, expanda Collaboration Data Objectse, em seguida, expanda CDO 1.2.1.

Você pode encontrar documentação para os procedimentos de SQL Server automação OLE armazenados nos Manuais Online do SQL Server 2000.

Como usar o CDO para o Microsoft Windows 2000 (CDOSYS)

O CDOSYS oferece um modelo de objeto para o desenvolvimento de aplicativos de mensagens no Microsoft Windows 2000. Ele também fornece funcionalidade aprimorada sobre a biblioteca de CDO para Windows NT Server (CDONTS) existente. CDOSYS requer o Windows 2000 e um local ou um servidor SMTP remoto.

Você pode configurar o CDOSYS para apontar para os servidores SMTP por meio de programação para dar aos desenvolvedores flexibilidade na configuração de servidores SMTP.

Para obter mais informações sobre CDOSYS, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
195683 Relação entre bibliotecas CDO 1. x e CDOSYS.DLL
Porque CDOSYS pode enviar um email para um servidor SMTP remoto, CDOSYS não exige que você tenha o Internet Information Server instalado e em execução no computador que está executando o SQL Server. Também, você não precisa configurar o servidor virtual SMTP. Tudo o que você precisa fazer é criar um procedimento armazenado no SQL Server que você pode usar para enviar email.

Quando você usar o CDOSYS em vez do SQL Mail, não é necessário ter um cliente de email como o Microsoft Outlook instalado no computador que está executando o SQL Server. Além disso, você não precisa ter um servidor do Exchange. Você pode usar qualquer servidor de email que ofereça suporte a email SMTP como seu servidor de email SMTP remoto. No entanto, você não pode ler ou processar o email é enviado para o SQL Server se você usar o CDOSYS. Você também não pode substituir a funcionalidade de email do agente SQL.

Uso do CDOSYS com o SQL Server objeto de automação OLE se baseia em SQL Server automação OLE para invocar o modelo de objeto CDOSYS. Isso 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 o CDOSYS pode ser chamado dos procedimentos de automaçã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 email CDOSYS

Você pode usar código semelhante ao seguinte para criar um procedimento armazenado no banco de dados que envia email usando os procedimentos do SQL Server automação OLE armazenados para chamar o modelo de objeto CDOSYS.

Neste exemplo, podemos fornecer um grau opcional de tratamento de erros para verificar o hresult de cada instrução EXEC sp_OA * . Se o hresult (@hr) for zero, a instrução sp_OA * anterior foi um sucesso. No entanto, se esse hresult é diferente de zero, a instrução sp_OA * anterior falhou.

Para cada falha hresult diferente de zero, uma linha é inserida na tabela [dbo].[cdosysmail_failures] que observa o local e o momento da falha. Além disso, o último erro é interpretado usando o procedimento sp_OAGetErrorInfo armazenados para relatar a origem e a descrição do erro. Descrição do erro é impresso para a conexão do cliente. Também a descrição do erro, a hora e o local de falha são inseridos na tabela [dbo].[cdosysmail_failures] no banco de dados para que você possa identificar e diagnosticar falhas após o fato.

Se o procedimento sp_OAGetErrorInfo armazenados em si falhar, o exemplo imprime a seguinte mensagem de erro para a conexã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, use o procedimento armazenado que você criou e fornecer os parâmetros corretos.
   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
Observação Somente os membros da função de servidor fixa sysadmin podem executar os procedimentos de automação OLE armazenados. Se o usuário do SQL Server não é um membro da função de servidor fixa sysadmin , você não pode usar o procedimento armazenado mencionado no exemplo para enviar email. Em uma situação assim, talvez você precise desenvolver um aplicativo cliente para enviar mensagens com CDOSYS. Por exemplo, você pode usar um aplicativo do Microsoft Visual Basic.

CDOSYS envia o email ao servidor de email SMTP remoto é especificado como cdoSMTPServerName.

O servidor de email SMTP envia o email para o endereço de email especificado no para: argumento ("someone2@example.com" neste exemplo). O nome especificado no de: argumento aparecerá como o remetente do email ("someone@example.com" neste exemplo).

Você pode modificar este exemplo para que ele envie email baseado em texto ou anexos. Para obter documentação sobre CDOSYS, visite o seguinte site da Microsoft:
http://msdn.microsoft.com/Library
No painel esquerdo, expanda mensagens e colaboração, expanda Collaboration Data Objectse, em seguida, expanda CDO para Windows 2000.

Mais Informações

Sugerimos que você enviar um email usando o diretório de retirada SMTP local em vez de usar o nome de email do SMTP remoto. O exemplo sp_send_cdosysmail armazenados procedimento executado em processo com o SQL Server e falhará se o servidor SMTP está off-line ou quebrados. Envio de email por meio do diretório de recebimento local requer apenas que o procedimento armazenado tem permissão para o diretório de recebimento. O servidor SMTP independentemente tratará o email.

Para obter mais informações sobre como enviar mensagens usando o diretório de captura local, clique no número abaixo para ler o artigo na Base de dados de Conhecimento Microsoft:
286430 Como enviar HTML formatado email usando o CDO para Windows 2000 e o diretório de captura local

Propriedades

ID do artigo: 312839 - Última revisão: terça-feira, 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 pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.
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