Postup při odesílání e-mailů bez použití SQL pošty na serveru SQL Server

Překlady článku Překlady článku
ID článku: 312839 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Pošta SQL poskytuje snadný způsob odesílání a čtení e-mailu z Microsoft SQL Server. Nicméně protože SQL Mail je aplikace MAPI, rozhraním MAPI subsystém musí být na serveru k dispozici. Nainstaluje Microsoft Windows NT 4.0 Podsystém MAPI při instalaci Windows Messaging. Však Microsoft Windows 2000 neposkytuje podsystému MAPI. Proto, pokud chcete použít SQL Mail je třeba nainstalovat klienta MAPI, například aplikaci Microsoft Outlook.

Můžete použít Další metody pro odesílání e-mailů Simple Mail Transfer Protocol (SMTP) přímo z SQL Server. Můžete například použít Collaboration Data Objects pro NT Server (CDONTS) nebo Collaboration Data objektů pro systém Windows 2000 (CDOSYS) v kombinaci SQL Server automatizace OLE s sp_OA uložené procedury. V tomto článku obsahuje příklady použití těchto technik k odeslání e-mailu sítě Internet e-mailový server. Můžete změnit postupy, aby poskytovaly více Robustní poštovní systém. Můžete například přidat kód pro zpracování chyb. Metody v příkladech neposkytují prostředky pro čtení nebo pro zpracování e-mailů.

Poznámka: CDOSYS je dostupná od verzí systému Windows 2000 a doporučujeme používat CDOSYS místo objekty CDONTS. Objekty CDONTS není podporován v systému Windows Server 2003 a novější operační systémy.

Poznámka: Tyto programovací příklady ilustrují techniky, které můžete použít. Chcete-li použít model objektu CDO v Transact-SQL. Jste odpovědní za jakékoli programování rozšíření příklady nebo pro všechny zdůrazňují, to znamená testování požadované pro spuštění kódu ve výrobním prostředí.

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez žádné záruky výslovně uvedené nebo odvozené. To zahrnuje, ale není omezen Chcete-li, mlčky předpokládaných záruk obchodovatelnosti nebo vhodnosti pro konkrétní účel. Tento článek předpokládá, že jste obeznámeni s plánem jazyk, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu, nemohou tyto však Příklady poskytují další funkce nebo konstrukce podle vašeho zvláštní požadavky.

Použití CDO pro systém Microsoft Windows NT Server (CDONTS)

Objekty CDONTS je zvláštní OLE Simple Mail Transfer Protocol (SMTP) Server, který je navržen speciálně pro poskytují funkce pro zasílání zpráv Webové aplikace. Objekty CDONTS jako takové podporuje odesílání elektronické pošty ve formátu HTML. Aplikace založené na rozhraní MAPI, jako SQL Mail, tomu tak není. Ve výchozím nastavení aplikace Microsoft Internet Informační Server (IIS) verze 4.0 nebo vyšší, nainstaluje objekty CDONTS. Ve výchozím nastavení aplikace Microsoft Systém Windows 2000 nainstaluje Microsoft Internet Information Server (IIS) 5.0.

Další informace o objekty CDONTS, klepněte následující číslo článku databáze Microsoft Knowledge Base:
177850Jaký je rozdíl mezi CDO 1.2 a objekty CDONTS?
Objekty CDONTS odešle místní e-mailů přes SMTP Server. Pokud nemáte SMTP server na místním serveru, můžete použít Virtuální server SMTP, které služba IIS instaluje směrování e-mailů SMTP na odpovídající poštovní server SMTP. Odeslání e-mailu ze serveru SQL Server pomocí objekty CDONTS postupujte takto:
  1. Instalace služby IIS a jeho spuštění v počítači, který je spuštění serveru SQL Server.
  2. Zadejte poštovní server SMTP jako "inteligentní hostitele" tak, aby Služba SMTP služby IIS automaticky směruje všechny elektronické pošty SMTP, který je odeslán do místní server k poštovnímu serveru SMTP pro doručení.
  3. Vytvoření uložené procedury serveru SQL Server, která slouží k odeslání e-mailu.
Při použití objekty CDONTS namísto SQL Mail, není nutné máte e-mailového klienta, jako je aplikace Microsoft Outlook nainstalována v počítači, který je spuštění serveru SQL Server. Rovněž není nutné mít serveru Microsoft Exchange server. Můžete použít poštovní server, který podporuje elektronické pošty SMTP jako "inteligentní hostitele." Však nelze číst a zpracovávat e-maily odeslané do počítače, je spuštěn SQL Server pomocí objekty CDONTS. Také nelze nahradit funkce SQL Agent pošty.

Postupujte podle pokynů spoléhat na Microsoft Windows 2000. Pokud je v počítači nainstalována služba IIS 4.0, můžete Podobně nakonfigurujte Microsoft Windows NT 4.0. Nicméně postup bude záviset mírně.

Další informace o tom, jak "inteligentní hostitel" Konfigurace systému Microsoft Windows NT 4.0, naleznete v následujících tématech číslo článku databáze Microsoft Knowledge Base:
230235Konfigurace služby IIS SMTP k přenosu SMTP mail

Konfigurace inteligentních hostitelů

  1. Klepněte na tlačítko Start, přejděte na příkaz programy, přejděte na položku Nástroje pro správua poté
    Klepněte na položku Správce služeb sítě Internet otevřete Správce služby IIS.
  2. Otevřete strom pro váš server. Výchozí virtuální Server SMTP, klepněte pravým tlačítkem myši a potom klepněte na příkaz Vlastnosti.
  3. Vyhledejte kartu doručování a potom klepněte na tlačítko Upřesnit.
  4. V textovém poli Inteligentní hostitel zadejte název poštovního serveru SMTP. Pokud neznáte název poštovního serveru SMTP Obraťte se na správce.
  5. Ujistěte se, že SMTP Simple Mail Transfer Protocol () Služba je spuštěna. Služba SMTP je součástí služby Správa služby IIS. Proto musí být spuštěna rovněž služba správy služby IIS.

Vytvoření uložené procedury k odeslání e-mailové objekty CDONTS

Poznámka: Společností, organizací, produktů, názvy domén, e-mailové adresy, loga, osoby, místa a události uvedené v tomto článku jsou smyšlené. Žádná souvislost s všechny skutečnou společností, organizací, produktů, je-li určen název domény, e-mailovou adresu, loga, osoby, místa nebo události nebo neměla by být vyvozována.

Můžete použít kód, který je podobný následující Chcete-li vytvořit uloženou proceduru v databázi, který odešle e-mail pomocí serveru SQL Server Automatizace OLE uložené procedury k vyvolání modelu objektu 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

Dále použít uloženou proceduru, kterou jste vytvořili a poskytují správné parametry:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Poznámka: Automatizace OLE uložené procedury spustit pouze členové role serveru sysadmin . Pokud není uživatel serveru SQL Server členem role sysadmin dlouhodobého serveru, nelze použít uloženou proceduru, která je podle příkladu odesílání e-mailů. V takovém případě bude pravděpodobně nutné rozvíjet klientské aplikace odesílání e-mailů s objekty CDONTS. Například je možné pomocí aplikace Microsoft Visual Basic.

Objekty CDONTS odešle na e-mailu místní virtuální server SMTP. Server poté směruje do SMTP poštovního serveru, který je zadán do pole Inteligentního hostitele . Poštovní server SMTP odešle e-mail na e-mailu Adresa, která je určena v na: argumentu ("someone2@example.com" v příkladu). Název, je uveden v z: argument
Zobrazí se jako odesílatele e-mailu ("someone@example.com" v tomto příkladu) s předmětem "Test CDONTS" a zpráva "funguje" jako zprávy elektronické pošty. Nikdo se zkopíruje na e-mailem, protože není poskytnut argument pro kopie nebo SKRYTÁ pole.

Je možné upravit tak, aby vám odešle Nebo HTML e-mailové přílohy. Dokumentace o objekty CDONTS, naleznete Následující Web společnosti Microsoft:
http://msdn.microsoft.com/library
V levém podokně rozbalte položku zasílání zpráv a spolupráci, Collaboration Data Objectsrozbalte a potom rozbalte balíček CDO 1.2.1.

Naleznete dokumentaci SQL Server OLE Automatizace uložené procedury v SQL Server 2000 Books Online.

Použití CDO pro systém Windows 2000 (CDOSYS)

CDOSYS poskytuje objektový model pro vývoj zasílání zpráv aplikace v systému Microsoft Windows 2000. Poskytuje také rozšířené funkce přes existující knihovny CDO pro systém Windows NT Server (CDONTS). CDOSYS vyžaduje V systému Windows 2000 a místní nebo vzdálený server SMTP.

Můžete nakonfigurovat Přejděte na položku servery SMTP pomocí programu pro pružnost vývojáři CDOSYS Při konfiguraci serverů SMTP.

Pro Další informace o CDOSYS, klepněte na následující číslo článku zobrazení článek znalostní báze Microsoft Knowledge Base:
195683Vztah mezi knihovny CDO 1.x a CDOSYS.KNIHOVNA DLL
Vzhledem k tomu, že CDOSYS zasílat e-maily do vzdálených SMTP Server, CDOSYS nevyžaduje, abyste měli Internet Information Server nainstalována a spuštěna v počítači se systémem SQL Server. Můžete také provést není nutné konfigurovat virtuální server SMTP. Vše co musíte udělat je vytvořit uložené procedury serveru SQL Server, který slouží k odesílání e-mailů.

Použijete-li místo SQL Mail CDOSYS, není nutné mít e-mailového klienta Podobně jako aplikace Microsoft Outlook nainstalována v počítači se systémem SQL Server. Rovněž není nutné mít na serveru Exchange. Můžete použít jakýkoli poštovní server jako vzdálené poštovní server SMTP, který podporuje protokolu SMTP. Však nelze Číst a zpracovávat e-maily odeslané na server SQL Server při použití CDOSYS. Můžete také funkce SQL Agent Mail nelze nahradit.

Použití CDOSYS s SQL Server OLE automatizace objektu závisí na SQL Server automatizace OLE Chcete-li vyvolat CDOSYS objektový model. To byl testován s SQL Server 2000 Service Aktualizace Service Pack 1 (SP1) a SQL Server 2000 Service Pack 2 (SP2). Společnost Microsoft nepodporuje zaručit, že CDOSYS lze volat z automatizace OLE uložené procedury ve verzích serveru SQL Server, které byly vydány před SQL Server 2000 SP1.

Vytvoření uložené procedury k odeslání zprávy CDOSYS

Můžete použít kód, který je podobný následující vytvořit uložené procedury do aplikace databáze, který odešle e-mail pomocí SQL Server OLE automatizace uložené procedury k vyvolání CDOSYS objektový model.

V této ukázce nabízíme volitelný stupeň chyby zpracování ke kontrole každého příkazu EXEC sp_OA * hodnota hresult. Pokud hodnota hresult (@hr) je nulová, předchozí prohlášení sp_OA * bylo úspěšné. Však pokud tato hodnota hresult je nenulové, předchozí prohlášení sp_OA * nepodařilo.

Pro každou nenulovou hodnotu hresult selhání řádek vložena do tabulky [dbo].[cdosysmail_failures] označující místo, a čas výskytu chyby. Navíc poslední chyba je interpretován pomocí sp_OAGetErrorInfo uložená procedura na zdroj a popis chyby. Tato chyba Popis je vytištěn na připojení klienta. Také tento popis chyby čas a místo poruchy jsou vloženy do tabulky [dbo].[cdosysmail_failures] v databázi, takže můžete identifikovat a diagnostikovat chyby ve skutečnosti.

Pokud selže sp_OAGetErrorInfo uložené procedury, sám, v příkladu se vytiskne následující chybová zpráva Chcete-li připojení klienta:

sp_OAGetErrorInfo se nezdařilo
-- 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

Dále použít uloženou proceduru, kterou jste vytvořili a poskytovat správné Parametry.
   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
Poznámka: Automatizace OLE uložené procedury spustit pouze členové role serveru sysadmin . Pokud není uživatel serveru SQL Server členem role sysadmin dlouhodobého serveru, nelze použít uloženou proceduru, která je podle příkladu odesílání e-mailů. V takovém případě bude pravděpodobně nutné Vytvořte klientskou aplikaci odesílat poštu pomocí CDOSYS. Například můžete použít aplikace Microsoft Visual Basic.

CDOSYS odešle na e-mailu vzdálené poštovní server SMTP, který je zadán jako cdoSMTPServerName.

Poštovní server SMTP odešle e-mail na e-mailu Adresa, která je určena v na: argumentu ("someone2@example.com" v tomto příkladu). Název, je uveden v z: argument, zobrazí se jako odesílatele e-mailu ("someone@example.com" v tomto příkladu).

Můžete upravit tento příklad ji odeslat text e-mailové nebo přílohy. Dokumentace o CDOSYS naleznete na následujícím webu společnosti Microsoft Web:
http://msdn.microsoft.com/library
V levém podokně rozbalte položku zasílání zpráv a spolupráci, Collaboration Data Objectsrozbalte a potom rozbalte položku CDO pro Windows 2000.

Další informace

Důrazně doporučujeme odeslat e-mail pomocí místní SMTP namísto použití vzdálené pošty název SMTP vyzvedávací adresář. Ukázkové sp_send_cdosysmail v procesu s SQL Server uložené procedury spustí a bude selhat v případě, že SMTP server je offline nebo poškozený. Odesílání e-mailů přes místní sběrného adresáře vyžaduje, aby uložená procedura má oprávnění výstupní adresář. SMTP server zpracuje nezávisle pošta.

Pro další informace informace o odesílání pošty pomocí místní sběrného adresáře, klepněte na tlačítko na následující číslo článku databáze Microsoft Knowledge Základní:
286430Jak odeslat HTML formátovaný pošty pomocí objektů CDO pro Windows 2000 a místní sběrného adresáře.

Vlastnosti

ID článku: 312839 - Poslední aktualizace: 20. července 2013 - Revize: 13.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Klíčová slova: 
kbsqlsetup kbhowtomaster kbmt KB312839 KbMtcs
Strojově přeložený článek
DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.
Projděte si také anglickou verzi článku: 312839

Dejte nám zpětnou vazbu

 

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