Al momento sei offline in attesa che la connessione Internet venga ristabilita

Come inviare posta elettronica senza utilizzare SQL Mail in SQL Server

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.

312839

IN QUESTA ATTIVITÀ

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) = nullASDeclare @MailID intDeclare @hr intEXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUTEXEC @hr = sp_OASetProperty @MailID, 'From',@FromEXEC @hr = sp_OASetProperty @MailID, 'Body', @BodyEXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCCEXEC @hr = sp_OASetProperty @MailID, 'CC', @CCEXEC @hr = sp_OASetProperty @MailID, 'Subject', @SubjectEXEC @hr = sp_OASetProperty @MailID, 'To', @ToEXEC @hr = sp_OAMethod @MailID, 'Send', NULLEXEC @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: 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.

back to the top

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 existsIF (EXISTS (SELECT * FROM dbo.sysobjects WHERE name = N'cdosysmail_failures' AND type='U')) DROP TABLE [dbo].[cdosysmail_failures]GO-- Create new cdosysmail_failures tableCREATE 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)GOIF (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: Nel riquadro sinistro, espandere di messaggistica e collaborazione, espandere Collaboration Data Objectse quindi espandere CDO per Windows 2000.

back to the top
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
POP3 internet lotus notes novell groupwise

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 312839 - Ultima revisione: 06/24/2014 04:48:00 - Revisione: 2.0

  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • kbsqlsetup kbhowtomaster kbmt KB312839 KbMtit
Feedback