Cum de a trimite poștă electronică fără a utiliza SQL Mail în SQL Server

Traduceri articole Traduceri articole
ID articol: 312839 - View products that this article applies to.
Măriți totul | Reduceți totul

În această pagină

Rezumat

SQL Mail oferă o modalitate ușoară de a trimite și a citi e-mail din Microsoft SQL Server. Cu toate acestea, deoarece SQL Mail este o aplicație de MAPI, un subsistem MAPI trebuie să fie prezente pe server. Microsoft Windows NT 4.0 instalează un subsistem MAPI atunci când instalați Windows Mesagerie. Cu toate acestea, Microsoft Windows 2000 nu oferă un subsistem MAPI. Prin urmare, dacă doriți să utilizați SQL Mail, trebuie să instalați un client MAPI, cum ar fi Microsoft Outlook.

Puteți utiliza alte metode pentru a trimite Simple Mail Transfer Protocol (SMTP) e-mail direct la SQL Server. De exemplu, puteți utiliza obiecte acoperire de date colaborare pentru NT Server (CDONTS) sau colaborare date obiecte pentru Windows 2000 (CDOSYS) în combinație cu procedurile SQL Server OLE Automation stocate sp_OA . Acest articol conține exemple de cum să utilizeze aceste tehnici pentru a trimite e-mail pentru un server de e-mail Internet. Aveți posibilitatea să modificați tehnici, astfel încât să va oferi un sistem mai robust de discuții. De exemplu, poate doriți să adăugați eroare codul de manipulare. Metodele în exemplele oferă o modalitate de lectură sau pentru prelucrarea electronică.

Notă CDOSYS este disponibil incepand cu Windows 2000, și vă recomandăm să utilizați CDOSYS în loc de CDONTS. CDONTS nu este acceptat cu Windows Server 2003 și sisteme de operare mai târziu.

Notă Aceste exemple de programare ilustra tehnici care le puteți utiliza pentru a invoca modelul de obiect CDO în Transact-SQL. Sunteți responsabil pentru orice programare extensii exemplelor sau pentru orice stres de testare care este necesar pentru a rula cod într-un mediu de producție.

Microsoft oferă exemple de programare pentru ilustrare numai, fără garanție, fie explicite sau implicite. Aceasta include, dar nu se limitează la, garanțiile implicite de vandabilitate sau potrivire pentru un anumit scop. Acest articol presupune că sunteți familiarizat cu limbajul de programare care este fiind demonstrată și cu instrumente care sunt folosite pentru a crea și pentru procedurile de depanare. Inginerii de suport Microsoft pot ajuta la explicarea funcționalitatea de o procedură specială, dar ei nu va modifica aceste exemple pentru a oferi functionalitate a adăugat sau construi proceduri pentru a îndeplini cerințele dumneavoastră specifice.

Cum să utilizați CDO pentru Microsoft Windows NT Server (CDONTS)

CDONTS este un simplu Mail Transfer Protocol (SMTP) specifice server OLE care este special conceput pentru a oferi mesagerie functionality la spre aplica?ie bazată pe web. Ca atare, CDONTS acceptă trimiterea e-mail bazate pe HTML. Aplicatii bazate pe MAPI, cum ar fi SQL Mail, nu. Implicit, Microsoft Internet Information Server (IIS) 4.0 sau ulterioară, se instalează CDONTS. Implicit, Microsoft Windows 2000 se instalează Microsoft Internet Information Server (IIS) 5.0.

Pentru mai multe informații despre CDONTS, faceți clic pe următorul număr de articol pentru a vedea articolul în bază de cunoștințe Microsoft:
177850 Care este diferența dintre CDO 1.2 și CDONTS?
CDONTS trimite e-mail prin SMTP server locale. Dacă nu aveți un server SMTP pe server local, utilizați SMTP virtual server care IIS instalează să distribuie poșta electronică SMTP la serverul de mail SMTP corespunzătoare. Pentru a utiliza CDONTS pentru a trimite e-mail de SQL Server, urmați acești pași:
  1. Instala IIS și să-l rulează pe computer isrunning că SQL Server.
  2. Specifica?i serverul tau de mail SMTP ca gazda dumneavoastra"inteligente" astfel încât serviciul de IIS SMTP rute automat orice SMTP e-mail care este trimis la yourlocal server pentru serverul tau de mail SMTP pentru livrare.
  3. Creați o procedură stocată în SQL Server that tu poți folos tosend poștă electronică.
Atunci când utilizați CDONTS în loc de SQL Mail, nu trebuie să aveți un client de mail cum ar fi Microsoft Outlook instalat pe computer care execută SQL Server. De asemenea, nu trebuie să aveți un server Microsoft Exchange. Puteți utiliza orice server de corespondență care acceptă poștă electronică SMTP ca gazda dumneavoastra"inteligente". Cu toate acestea, nu puteți citi și procesul de e-mail care este trimis la computer care execută SQL Server folosind CDONTS. De asemenea, nu poate înlocui funcționalitatea de Mail de Agent SQL.

Instrucțiunile care urmează se bazează pe Microsoft Windows 2000. Dacă IIS 4.0 este instalat pe computer, puteți configura Microsoft Windows NT 4.0 în mod similar. Cu toate acestea, pașii va diferă ușor.

Pentru mai multe informații despre cum să configurați gazdă"inteligente" pe Microsoft Windows NT 4.0, faceți clic pe următorul număr de articol pentru a vedea articolul în bază de cunoștințe Microsoft:
230235 Cum să configurați serviciul de IIS SMTP pentru a releu SMTP poștă

Configurați gazdă inteligentă

  1. Faceți clic pe Start, indicați spre programe, indica?i spre Instrumente de administrare, și apoi
    faceți clic pe Internet Services Manager pentru a deschide IIS Manager.
  2. Deschideți arborele pentru server-ul dvs. Implicit SMTP Virtual Server, și apoi atunci pocnitură Properties.
  3. Localizați fila livrare și apoi faceți clic pe avansat.
  4. Tastați nume de sign-in serverului SMTP poștă în caseta de text Cu gazdă inteligentă . Dacă nu știți nume de sign-in dumneavoastră SMTP poștă servercontact administratorul de poștă.
  5. Asigurați-vă că se execută serviciul Simple Mail Transfer Protocol (SMTP). Serviciul SMTP este parte a IIS Admin Service.Therefore, IIS Admin serviciul, de asemenea, trebuie să se execute.

Creați o procedură stocată pentru a trimite CDONTS E-Mail

Notă Exemplele de firme, organizații, produse, nume de domenii, adresele de poștă electronică, logo-uri, oameni, locuri, și evenimentele descrise în acest articol sunt fictive. Este destinat și trebuie dedusă nici o asociere cu orice companie reală, organizație, produs, nume de domeniu, adresă de poștă electronică, logo-ul, persoana, locuri sau evenimente.

Utilizați cod, care este similar cu următorul pentru a crea o procedură stocată în baza acoperire de date care trimite e-mail folosind procedurile SQL Server OLE Automation stocate pentru a invoca modelul de obiect 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

Apoi, utilizați procedura stocată creat și oferi parametrii corect:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Notă Numai membrii rolului fix server sysadmin pot executa proceduri OLE Automation stocate. Dacă utilizatorul SQL Server nu este un membru al rolului sysadmin fixe server, se poate utiliza procedura stocată care este menționat în exemplul de a trimite poștă electronică. În astfel de situații, trebuie să dezvolte o aplicație client pentru a trimite e-mail cu CDONTS. De exemplu, puteți utiliza o aplicație Microsoft Visual Basic.

CDONTS trimite mesajul de poștă electronică locale SMTP virtual server. Server apoi rutează e-mail la serverul de mail SMTP specificat în caseta de text Cu gazdă inteligentă . Serverul de mail SMTP trimite mail la adresa de e-mail specificată în la: argumentul ("someone2@example.com" în exemplu). nume de sign-in specificat în la: argument
apare ca expeditor de e-mail ("someone@example.com" în acest exemplu) cu subiectul "Test de CDONTS" și mesajul "funcționează" ca organism de e-mail. Nimeni nu este copiat pe e-mail pentru că ai furnizează un argument pentru CC sau pentru câmpul BCC .

Aveți posibilitatea să modificați exemplu, astfel încât acesta va trimite poștă electronică bazate pe HTML sau atașări. Pentru documentare despre CDONTS, vizitați următorul site Web Microsoft:
http://MSDN.Microsoft.com/Library
În panou din partea stângă, extinde mesagerie si colaborare, extindeți Obiectele acoperire de date colaborare, și apoi atunci expand CDO 1.2.1.

Puteți găsi documentație pentru procedurile SQL Server OLE Automation stocate în SQL Server 2000 carti Online.

Cum să utilizați CDO pentru Microsoft Windows 2000 (CDOSYS)

CDOSYS oferă un model obiect pentru a dezvolta aplicații de mesagerie Microsoft Windows 2000. Acesta oferă, de asemenea, funcționalitate sporită peste existente Biblioteca CDO pentru Windows NT Server (CDONTS). CDOSYS necesită Windows 2000, și un local sau un server SMTP.

Puteți configura CDOSYS pentru a indica spre fermă de servere SMTP programatic să dea dezvoltatorii flexibilitate în configurarea fermă de servere SMTP.

Pentru mai multe informații despre CDOSYS, faceți clic pe următorul număr de articol pentru a vedea articolul în bază de cunoștințe Microsoft:
195683 Relația dintre biblioteci de CDO 1.x și CDOSYS.DLL
Deoarece CDOSYS pot trimite e-mail la un server SMTP de la distanță, CDOSYS nu are nevoie ca aveti Internet Information Server instalat și rulează pe computerul care execută SQL Server. De asemenea, nu trebuie să configurați serverul SMTP virtual. Tot ce trebuie să faceți este să creați o procedură stocată în SQL Server care se pot utiliza pentru a trimite e-mail.

Atunci când utilizați CDOSYS în loc de SQL Mail, nu trebuie să aveți un client de mail cum ar fi Microsoft Outlook instalat pe computer care execută SQL Server. De asemenea, nu trebuie să aveți un server Exchange. Puteți utiliza orice server de corespondență care acceptă SMTP poștă ca serverul de mail SMTP la distanță. Cu toate acestea, nu poate citi sau procesul de e-mail care este trimis la SQL Server, dacă utilizați CDOSYS. De asemenea, nu poate înlocui funcționalitatea de Mail de Agent SQL.

Utilizarea CDOSYS cu obiect SQL Server OLE Automation se bazeaza pe SQL Server OLE Automation să invoce modelul de obiect CDOSYS. Acest lucru a fost testat cu SQL Server 2000 pachet Service Pack 1 (SP1) și SQL Server 2000 pachet Service Pack 2 (SP2). Microsoft nu garantează că CDOSYS poate fi apelat din procedurile OLE Automation stocate pe versiunile de SQL Server care au fost lansate înainte de SQL Server 2000 SP1.

Creați o procedură stocată pentru a trimite CDOSYS Mail

Utilizați cod, care este similar cu următorul pentru a crea o procedură stocată în baza acoperire de date care trimite e-mail folosind procedurile SQL Server OLE Automation stocate pentru a invoca modelul de obiect CDOSYS.

În acest eșantion, oferim un grad opțional de eroare de manipulare a verifica hresult de fiecare declarație EXEC sp_OA * . Dacă hresult (@hr) este zero, sp_OA * declarația anterioară a fost un succes. Cu toate acestea, dacă acea hresult este nenul, sp_OA * declarația anterioară nu a reușit.

Pentru fiecare eșec hresult nenul, un rând se inserează în tabel [dbo].[cdosysmail_failures] care ia act de locul și momentul de eșec. În plus, ultima eroare este interpretată prin utilizarea sp_OAGetErrorInfo stocate procedură să raporteze sursă și Descrierea erorii. Această descriere de eroare este tipărit la conexiune client. De asemenea, această descriere de eroare, marcă de timp și loc de eșec sunt inserate în tabelul [dbo].[cdosysmail_failures] in baza acoperire de date astfel încât să puteți identifica și diagnostica eșecuri după fapt.

Dacă procedura sp_OAGetErrorInfo stocate în sine nu reușește, exemplu imprimă următorul mesaj de eroare în conexiune client:

sp_OAGetErrorInfo nu a reu?it
-- 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

Apoi, utilizați procedura stocată creat și oferi parametrii corect.
   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
Notă Numai membrii rolului fix server sysadmin pot executa proceduri OLE Automation stocate. Dacă utilizatorul dumneavoastră SQL Server nu este un membru al rolului sysadmin fixe server, se poate utiliza procedura stocată care este menționat în exemplul de a trimite poștă electronică. În astfel de situații, trebuie să dezvolte o aplicație client pentru a trimite mail cu CDOSYS. De exemplu, puteți utiliza o aplicație Microsoft Visual Basic.

CDOSYS trimite e-mail la distanță SMTP server de mail, care este specificat ca cdoSMTPServerName.

Serverul de mail SMTP trimite mail la adresa de e-mail specificată în la: argumentul ("someone2@example.com" în acest exemplu). nume de sign-in specificat în la: argumentul apare ca expeditor de e-mail ("someone@example.com" în acest exemplu).

Aveți posibilitatea să modificați acest exemplu pentru a trimite text-bază poștă electronică sau atașări. Pentru documentare despre CDOSYS, vizitați următorul site Web Microsoft:
http://MSDN.Microsoft.com/Library
În panou din partea stângă, extinde mesagerie si colaborare, extindeți Obiectele acoperire de date colaborare, și apoi atunci expand CDO pentru Windows 2000.

Informații suplimentare

Am sugera că trimite e-mail utilizând directorul local pickup SMTP folosind nume de sign-in de mail SMTP la distanță. Proba de sp_send_cdosysmail stocate procedură se execută în proces cu SQL Server și nu va reuși dacă serverul SMTP este offline sau rupte. Trimiterea de e-mail prin director local pickup numai impune ca procedura stocată a permisiunea de la directorul de preluare. Serverul SMTP se va ocupa în mod independent de mail.

Pentru mai multe informații despre cum să trimiteți mail folosind director local pickup, faceți clic pe următorul număr de articol pentru a vedea articolul în bază de cunoștințe Microsoft:
286430 Cum de a trimite HTML formatat mail folosind CDO pentru Windows 2000 și director local pickup

Proprietă?i

ID articol: 312839 - Ultima examinare: 24 iunie 2014 - Revizie: 2.0
Se aplică la:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Cuvinte cheie: 
kbsqlsetup kbhowtomaster kbmt KB312839 KbMtro
Traducere automată
IMPORTANT: Acest articol este tradus cu ajutorul software-ului Microsoft de traducere automată ?i poate fi corectat prin intermediul tehnologiei Community Translation Framework (CTF). Microsoft oferă articole traduse automat, post-editate de comunitate ?i articole traduse de oameni, pentru a permite accesul la toate articolele din Baza noastră de cuno?tin?e în mai multe limbi. Articolele traduse automat ?i post-editate pot con?ine gre?eli de vocabular, sintaxă ?i/sau gramatică. Microsoft nu este responsabil de inexactită?ile, erorile sau daunele cauzate de traducerea gre?ită a con?inutului sau de utilizarea acestuia de către clien?i. Găsi?i mai multe informa?ii despre traducerea în colaborare la http://support.microsoft.com/gp/machine-translation-corrections/ro.
Face?i clic aici pentru a vizualiza versiunea în limba engleză a acestui articol: 312839

Trimite?i feedback

 

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