Come inviare posta elettronica senza utilizzare SQL Mail in SQL Server

Traduzione articoli Traduzione articoli
Identificativo articolo: 312839 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

SQL Mail fornisce un modo semplice per inviare e leggere la posta elettronica da Microsoft SQL Server. Tuttavia, poichÚ SQL Mail Ŕ un'applicazione MAPI, un sottosistema MAPI deve essere presente sul server. Quando si installa Windows Messaging, in Microsoft Windows NT 4.0 viene installato un sottosistema MAPI. Tuttavia, Microsoft Windows 2000 non fornisce un sottosistema MAPI. Pertanto, se si desidera utilizzare SQL Mail, Ŕ necessario installare un client MAPI come Microsoft Outlook.

╚ possibile utilizzare altri metodi per inviare posta elettronica Simple Mail Transfer Protocol (SMTP) direttamente da SQL Server. Ad esempio, Ŕ possibile utilizzare Collaboration Data Objects per NT Server (CDONTS) o di collaborazione dati oggetti per Windows 2000 (CDOSYS) in combinazione con sp_OA SQL Server stored procedure di automazione OLE. In questo articolo contiene esempi di come utilizzare queste tecniche per inviare posta elettronica a un server di posta Internet. ╚ possibile modificare le tecniche in modo che forniscano un sistema pi¨ affidabile di mailing. Ad esempio, Ŕ possibile aggiungere codice di gestione degli errori. I metodi negli esempi non forniscono un mezzo per la lettura o per elaborare la posta elettronica.

Nota. CDOSYS Ŕ disponibile a partire da Windows 2000 e si consiglia di utilizzare CDOSYS anzichÚ CDONTS. CDONTS non Ŕ supportato con Windows Server 2003 e versioni successive.

Nota. Questi esempi di programmazione di illustrano le tecniche che Ŕ possibile utilizzare per richiamare il modello a oggetti CDO in Transact-SQL. Si Ŕ responsabile per tutte le estensioni di programmazione per gli esempi o per qualsiasi stress test che Ŕ necessario per l'esecuzione del codice in un ambiente di produzione.

Microsoft fornisce esempi di programmazione puramente a scopo illustrativo, senza alcuna garanzia espressa o esplicita. Questo include, ma non Ŕ limitato a, le garanzie implicite di commerciabilitÓ o idoneitÓ per uno scopo particolare. In questo articolo si presuppone che si abbia familiaritÓ con il linguaggio di programmazione in questione e con gli strumenti utilizzati per creare ed eseguire il debug di procedure. Tecnici del supporto Microsoft possono spiegare la funzionalitÓ di una particolare procedura, ma in nessun caso a modificheranno questi esempi per fornire funzionalitÓ aggiuntive o creare procedure atte a soddisfare specifiche esigenze.

Come utilizzare CDO per Microsoft Windows NT Server (CDONTS)

CDONTS Ŕ un server OLE Simple Mail Transfer Protocol (SMTP) specifico che Ŕ stata appositamente progettato per fornire funzionalitÓ di messaggistica per le applicazioni basate su Web. Di conseguenza, CDONTS supporta l'invio di posta elettronica in formato HTML. Le applicazioni basate su MAPI, come SQL Mail, non lo Ŕ. Per impostazione predefinita, Microsoft Internet Information Server (IIS) 4.0 o versioni successive, installa CDONTS. Per impostazione predefinita, Microsoft Windows 2000 viene installato Microsoft Internet Information Server (IIS) 5.0.

Per ulteriori informazioni su CDONTS, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
177850 Qual Ŕ la differenza tra CDO 1.2 e CDONTS?
CDONTS invia posta elettronica tramite SMTP al server locale. Se non Ŕ un server SMTP sul server locale, Ŕ possibile utilizzare il server virtuale SMTP che consente di installare IIS per instradare la posta elettronica SMTP al server di posta SMTP appropriato. Per utilizzare CDONTS per inviare posta elettronica da SQL Server, attenersi alla seguente procedura:
  1. Installare IIS e fare in modo che in esecuzione sul computer che isrunning di SQL Server.
  2. Specificare il server di posta SMTP come "SmartHost" in modo che il servizio SMTP di IIS vengono indirizzati automaticamente qualsiasi messaggio di posta elettronica SMTP viene inviato al server yourlocal per il server di posta SMTP per il recapito.
  3. Creare una stored procedure in SQL Server che Ŕ possibile utilizzare la posta elettronica tosend.
Quando si utilizzano oggetti CDONTS invece di SQL Mail, non Ŕ necessario disporre di un client di posta come Microsoft Outlook installata nel computer che esegue SQL Server. Inoltre, non Ŕ necessario disporre di un server di Microsoft Exchange. ╚ possibile utilizzare qualsiasi server di posta elettronica che supporta la posta elettronica SMTP come "dello SmartHost". Tuttavia, Ŕ Impossibile leggere ed elaborare messaggi di posta elettronica viene inviato al computer che esegue SQL Server utilizzando CDONTS. ╚ inoltre possibile sostituire la funzionalitÓ di posta elettronica di agente SQL.

Le istruzioni che seguono si basano su Microsoft Windows 2000. Se nel computer Ŕ installato IIS 4.0, Ŕ possibile configurare Microsoft Windows NT 4.0 in modo analogo. Tuttavia, i passaggi saranno leggermente diversi.

Per ulteriori informazioni su come configurare "SmartHost" in Microsoft Windows NT 4.0, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base:
230235 Come configurare il servizio SMTP di IIS per l'inoltro SMTP della posta

Configura lo SmartHost

  1. Fare clic su Start, scegliere programmi, Strumenti di amministrazione, quindi
    Fare clic su Gestione servizi Internet per aprire Gestione IIS.
  2. Aprire la struttura del server. Destro del mouse sul Server virtuale SMTP predefinitoe quindi scegliere proprietÓ.
  3. Individuare la scheda recapito e quindi fare clic su Avanzate.
  4. Digitare il nome del server di posta SMTP nella casella di testo SmartHost . Se non si conosce il nome del servercontact di posta SMTP all'amministratore della posta.
  5. Assicurarsi che sia in esecuzione il servizio Simple Mail Transfer Protocol (SMTP). Il servizio SMTP fa parte di Service.Therefore di amministrazione di IIS, IIS Admin Service deve inoltre essere in esecuzione.

Creare una Stored Procedure per l'invio di posta elettronica CDONTS

Nota. SocietÓ, organizzazioni, prodotti, nomi di dominio, indirizzi di posta elettronica, logo, persone, luoghi ed eventi utilizzati in questo articolo sono fittizi. Nessuna associazione con societÓ, organizzazione, prodotto, nome di dominio, indirizzo di posta elettronica, logo, persona, luoghi o eventi Ŕ puramente casuale.

╚ possibile utilizzare codice simile al seguente per creare una stored procedure nel database che invia posta elettronica utilizzando SQL Server stored procedure di automazione OLE per richiamare il modello di oggetto 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

Quindi, utilizzare la stored procedure creata e fornire i parametri corretti:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Nota. Solo i membri del ruolo predefinito del server sysadmin possono eseguire le procedure di automazione OLE memorizzati. Se l'utente di SQL Server non Ŕ un membro del ruolo predefinito del server sysadmin , Ŕ possibile utilizzare la stored procedure Ŕ indicata nell'esempio per l'invio di posta elettronica. In tale situazione, potrebbe essere necessario sviluppare un'applicazione client per l'invio di posta elettronica con CDONTS. Ad esempio, Ŕ possibile utilizzare un'applicazione di Microsoft Visual Basic.

CDONTS Invia messaggio di posta elettronica al server virtuale SMTP locale. Il server instrada la posta elettronica al server di posta SMTP specificato nella casella di testo SmartHost . Il server di posta SMTP invia la posta all'indirizzo e-mail specificato nel a: argomento ("someone2@example.com" nell'esempio). Il nome specificato nel da: argomento
viene visualizzato come mittente del messaggio di posta elettronica ("someone@example.com" in questo esempio) con l'oggetto "Test di CDONTS" e il messaggio "funziona" come corpo del messaggio di posta elettronica. Non viene copiato nel messaggio di posta elettronica perchÚ non Ŕ stato fornito un argomento per CC o per il campo Ccn .

╚ possibile modificare l'esempio in modo che invia posta elettronica in formato HTML o allegati. Per la documentazione su CDONTS, visitare il seguente sito Web Microsoft:
http://msdn.microsoft.com/library
Nel riquadro sinistro, espandere di messaggistica e collaborazione, espandere Collaboration Data Objectse quindi espandere CDO 1.2.1.

╚ possibile trovare documentazione per SQL Server stored procedure di automazione OLE nella documentazione in linea di SQL Server 2000.

Come utilizzare CDO per Microsoft Windows 2000 (CDOSYS)

CDOSYS fornisce un modello a oggetti per lo sviluppo di applicazioni di messaggistica in Microsoft Windows 2000. Offre inoltre funzionalitÓ avanzate tramite la libreria di CDO per Windows NT Server (CDONTS) esistente. CDOSYS richiede Windows 2000 e una locale o un server SMTP remoto.

╚ possibile configurare CDOSYS per puntare ai server SMTP a livello di codice per offrire agli sviluppatori la flessibilitÓ nella configurazione del server SMTP.

Per ulteriori informazioni su CDOSYS, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
195683 Relazione tra librerie di CDO 1. x e CDOSYS.DLL
PoichÚ CDOSYS possono inviare posta elettronica a un server SMTP remoto, CDOSYS non richiede di disporre di Internet Information Server installato e in esecuzione sul computer che esegue SQL Server. Inoltre, non Ŕ necessario configurare il server virtuale SMTP. ╚ sufficiente consiste nel creare una stored procedure in SQL Server che Ŕ possibile utilizzare per l'invio di posta elettronica.

Quando si utilizza CDOSYS invece di SQL Mail, non Ŕ necessario disporre di un client di posta come Microsoft Outlook installata nel computer che esegue SQL Server. Inoltre non Ŕ necessario disporre di un server di Exchange. ╚ possibile utilizzare qualsiasi server di posta elettronica che supporta i messaggi di posta elettronica SMTP come server di posta SMTP remoto. Tuttavia, non Ŕ possibile leggere o elaborare i messaggi inviati a SQL Server se si utilizza CDOSYS. ╚ inoltre possibile sostituire la funzionalitÓ di posta elettronica di agente SQL.

Utilizzo di CDOSYS con SQL Server oggetto di automazione OLE si basa su SQL Server automazione OLE per richiamare il modello a oggetti CDOSYS. Questo Ŕ stato testato con SQL Server 2000 Service Pack 1 (SP1) e SQL Server 2000 Service Pack 2 (SP2). Microsoft non garantisce che CDOSYS pu˛ essere chiamato dalle procedure di automazione OLE memorizzati in versioni di SQL Server che sono state rilasciate prima di SQL Server 2000 SP1.

Creare una Stored Procedure per l'invio della posta CDOSYS

╚ possibile utilizzare codice simile al seguente per creare una stored procedure nel database che invia posta elettronica utilizzando SQL Server stored procedure di automazione OLE per richiamare il modello a oggetti CDOSYS.

In questo esempio Ŕ fornire un grado facoltativo di gestione degli errori per verificare il valore hresult di ogni istruzione EXEC sp_OA * . Se il valore di hresult (@hr) Ŕ zero, l'istruzione precedente sp_OA * Ŕ stato un successo. Tuttavia, se tale valore hresult Ŕ diverso da zero, la precedente istruzione sp_OA * non riuscita.

Per ogni errore hresult diverso da zero, viene inserita una riga nella tabella [dbo].[cdosysmail_failures] di notes che il luogo e momento dell'errore. Inoltre, l'ultimo errore viene interpretato utilizzando la procedura sp_OAGetErrorInfo memorizzati per segnalare l'origine e la descrizione dell'errore. Descrizione dell'errore viene stampata la connessione client. Descrizione dell'errore, ora e luogo di errore vengono anche inseriti nella tabella [dbo].[cdosysmail_failures] nel database in modo che Ŕ possibile identificare e diagnosticare gli errori dopo il fatto.

Se la procedura sp_OAGetErrorInfo memorizzati stesso non riesce, nell'esempio viene stampato il seguente messaggio di errore per la connessione di client:

sp_OAGetErrorInfo non riuscita
-- 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

Successivamente, utilizzare la stored procedure creata e fornire i parametri corretti.
   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. Solo i membri del ruolo predefinito del server sysadmin possono eseguire le procedure di automazione OLE memorizzati. Se l'utente di SQL Server non Ŕ un membro del ruolo predefinito del server sysadmin , non Ŕ possibile utilizzare la stored procedure Ŕ indicata nell'esempio per l'invio di posta elettronica. In tale situazione, potrebbe essere necessario sviluppare un'applicazione client per inviare posta con CDOSYS. Ad esempio, Ŕ possibile utilizzare un'applicazione di Microsoft Visual Basic.

CDOSYS Invia messaggio di posta elettronica al server di posta SMTP remoto viene specificato come cdoSMTPServerName.

Il server di posta SMTP invia la posta all'indirizzo e-mail specificato nel a: argomento ("someone2@example.com" in questo esempio). Il nome specificato nel da: argomento verrÓ visualizzato come mittente del messaggio di posta elettronica ("someone@example.com" in questo esempio).

╚ possibile modificare questo esempio per inviare posta elettronica in formato testo o allegati. Per la documentazione su CDOSYS, visitare il seguente sito Web Microsoft:
http://msdn.microsoft.com/library
Nel riquadro sinistro, espandere di messaggistica e collaborazione, espandere Collaboration Data Objectse quindi espandere CDO per Windows 2000.

Informazioni

╚ consigliabile che il messaggio Ŕ inviato utilizzando la directory di prelievo SMTP locale anzichÚ il nome di posta SMTP remoto. L'esempio sp_send_cdosysmail stored procedure estese nel processo di SQL Server e avrÓ esito negativo se il server SMTP Ŕ interrotto o non in linea. L'invio di posta elettronica tramite la directory di prelievo locale richiede solo che la stored procedure dispone dell'autorizzazione per la directory di prelievo. Il server SMTP gestirÓ in modo indipendente la posta.

Per ulteriori informazioni su come inviare posta elettronica utilizzando la directory di prelievo locale, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
286430 ModalitÓ di invio HTML formattato posta utilizzando CDO per Windows 2000 e la directory di prelievo locale

ProprietÓ

Identificativo articolo: 312839 - Ultima modifica: martedý 24 giugno 2014 - Revisione: 2.0
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Chiavi:á
kbsqlsetup kbhowtomaster kbmt KB312839 KbMtit
Traduzione automatica articoli
IMPORTANTE: il presente articolo Ŕ stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l?obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre Ŕ perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilitÓ per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualitÓ della traduzione.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 312839
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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