Senden von E-Mail ohne Verwenden von SQL Mail in SQL Server

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 312839 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D312839
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
312839 How to send e-mail without using SQL Mail in SQL Server
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

SQL Mail bietet eine einfache Methode, um E-Mail von Microsoft SQL Server zu senden und zu lesen. Da SQL Mail jedoch eine MAPI-Anwendung ist, muss ein MAPI-Subsystem auf dem Server vorhanden sein. Microsoft Windows NT 4.0 installiert ein MAPI-Subsystem, wenn Sie Windows Messaging installieren. Microsoft Windows 2000 bietet jedoch kein MAPI-Subsystem. Wenn Sie SQL Mail verwenden möchten, müssen Sie deshalb einen MAPI-Client wie Microsoft Outlook installieren.

Sie können andere Methoden verwenden, um SMTP-E-Mail (SMTP = Simple Mail Transfer Protocol) direkt vom SQL Server aus zu versenden. Sie können beispielsweise CDO (Collaboration Data Objects) für NT Server (CDONTS) oder CDO für Windows 2000 (CDOSYS) in Kombination mit den gespeicherten SQL Server-Prozeduren für OLE-Automatisierung sp_OA verwenden. Dieser Artikel enthält Beispiele für die Verwendung dieser Verfahren zum Senden von E-Mail an einen Internet-E-Mail-Server. Sie können die Verfahren abändern, um ein stabileres E-Mail-System zu erhalten. So können Sie beispielsweise Code zur Fehlerbehandlung hinzufügen. Die in diesen Beispielen dargestellten Methoden ermöglichen weder das Lesen noch das Bearbeiten von E-Mail.

Hinweis: CDOSYS ist seit Windows 2000 verfügbar. Sie sollten CDOSYS anstelle von CDONTS verwenden CDONTS wird von Windows Server 2003 oder späteren Betriebssystemen nicht unterstützt.

Hinweis: Diese Programmcodes veranschaulichen Verfahren, mit denen Sie das CDO-Objektmodell in Transact-SQL aufrufen können. Es liegt in Ihrer Verantwortung, Programmerweiterungen für die Beispiele zu erstellen oder Belastungstests durchzuführen, die für die Ausführung des Codes in einer Betriebsumgebung erforderlich sind.

Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. In diesem Artikel wird vorausgesetzt, dass Sie mit der in den Beispielen verwendeten Programmiersprache und mit den zum Erstellen und Debuggen von Prozeduren verwendeten Tools vertraut sind. Die Spezialisten von Microsoft Support Services können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind.

Verwenden von CDO für Microsoft Windows NT Server (CDONTS)

CDONTS ist ein SMTP-spezifischer OLE-Server, der speziell dafür entwickelt wurde, Messaging-Funktionen für webbasierte Anwendungen bereitzustellen. So unterstützt CDONTS das Versenden von HTML-basierter E-Mail. MAPI-basierte Anwendungen wie SQL Mail unterstützen dies nicht. CDONTS wird standardmäßig zusammen mit Microsoft Internet Information Server (IIS) 4.0 oder höher installiert. Microsoft Internet Information Server (IIS) 5.0 wird standardmäßig zusammen mit Microsoft Windows 2000 installiert.

Weitere Informationen über CDONTS finden Sie im folgenden Artikel der Microsoft Knowledge Base:
177850 INFO: das Difference Between CDO 1.2 und der CDONTS lauten wie?
CDONTS sendet E-Mail über SMTP an den lokalen Server. Wenn Sie auf Ihrem lokalen Server nicht über einen SMTP-Server verfügen, können Sie den von IIS installierten virtuellen SMTP-Server verwenden, um Ihre SMTP-E-Mail an den entsprechenden SMTP-E-Mail-Server weiterzuleiten. Gehen Sie folgendermaßen vor, um CDONTS zum Senden von E-Mail aus SQL Server zu verwenden:
  1. Installieren Sie IIS, und führen Sie es auf dem Computer aus, auf dem SQL Server ausgeführt wird.
  2. Definieren Sie Ihren SMTP-E-Mail-Server als "Smarthost", sodass der SMTP-Dienst von IIS automatisch die gesamte an den lokalen Server gesendete SMTP-E-Mail zur Übermittlung an Ihren SMTP-E-Mail-Server weiterleitet.
  3. Erstellen Sie eine gespeicherte Prozedur in SQL Server, die Sie zum Senden von E-Mail verwenden können.
Wenn Sie DCONTS anstelle von SQL Mail verwenden, muss kein E-Mail-Client wie Microsoft Outlook auf dem Computer installiert sein, auf dem SQL Server ausgeführt wird. Sie benötigen auch keinen Microsoft Exchange-Server. Sie können jeden E-Mail-Server, der SMTP-E-Mail unterstützt, als "Smarthost" verwenden. Sie können jedoch mithilfe von CDONTS keine E-Mails lesen oder bearbeiten, die an den Computer gesendet werden, auf dem SQL Server ausgeführt wird. Außerdem können Sie nicht die Funktionalität von SQL Agent-E-Mail ersetzen.

Die folgenden Anleitungen beziehen sich auf Microsoft Windows 2000. Wenn IIS 4.0 auf dem Computer installiert ist, können Sie Microsoft Windows NT 4.0 ähnlich konfigurieren. Die einzelnen Schritte unterscheiden sich jedoch geringfügig.

Weitere Informationen darüber, wie Sie den Smarthost auf Microsoft Windows NT 4.0 konfigurieren, finden Sie im folgenden Artikel der Microsoft Knowledge Base:
230235 XCON: Konfigurieren des II-SMTP-Diensts, um SMTP weiterzuleiten

Konfigurieren des Smarthost

  1. Klicken Sie auf Start, zeigen Sie auf Programme, zeigen Sie auf Verwaltung, und klicken Sie anschließend auf Internetdienste-Manager, um den IIS-Manager zu öffnen.
  2. Öffnen Sie die Verzeichnisstruktur für den Server. Klicken Sie mit der rechten Maustaste auf Virtueller Standardserver für SMTP, und klicken Sie anschließend auf Eigenschaften.
  3. Gehen Sie zur Registerkarte Übermittlung, und klicken Sie anschließend auf Erweitert.
  4. Geben Sie den Namen Ihres SMTP-E-Mail-Servers in das Feld Smarthost ein. Wenden Sie sich an Ihren E-Mail-Administrator, wenn Sie den Namen Ihres SMTP-E-Mail-Servers nicht wissen.
  5. Stellen Sie sicher, dass der SMTP-Dienst ausgeführt wird. Der SMTP-Dienst ist ein Teil des IIS-Verwaltungsdienstes. Der IIS-Verwaltungsdienst muss deshalb ebenfalls ausgeführt werden.

Erstellen einer gespeicherten Prozedur zum Senden von CDONTS-E-Mail

Hinweis: Die in diesem Artikel verwendeten Beispiele für Firmen, Unternehmen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte und Ereignisse sind fiktiv. Ein Bezug auf echte Firmen, Organisationen, Produkte, Domänennamen, E-Mail-Adressen, Logos, Personen, Orte oder Ereignisse ist nicht beabsichtigt oder ableitbar.

Sie können einen ähnlichen Code wie den folgenden verwenden, um eine gespeicherte Prozedur in der master-Datenbank zu erstellen, die E-Mails sendet, indem Sie das CDONTS-Objektmodell mittels gespeicherter SQL Server-Prozeduren für die OLE-Automatisierung aufrufen.

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

Verwenden Sie als nächstes die gespeicherte Prozedur, die Sie erstellt haben, und geben Sie die richtigen Parameter ein:
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
Hinweis: Nur Mitglieder der festen Serverrolle sysadmin sind berechtigt, die gespeicherten Prozeduren für die OLE-Automatisierung auszuführen. Wenn der SQL Server-Benutzer kein Mitglied der festen Serverrolle sysadmin ist, können Sie die im Beispiel für das Senden von E-Mail erwähnte gespeicherte Prozedur nicht verwenden. In einem solchen Fall müssen Sie möglicherweise eine Clientanwendung entwickeln, um E-Mails mit CDONTS zu senden. Sie können z. B. eine Microsoft Visual Basic-Anwendung verwenden.

CDONTS sendet die E-Mail an den lokalen virtuellen SMTP-Server. Der Server leitet anschließend die E-Mail an den SMTP-E-Mail-Server weiter, der im Textfeld Smarthost festgelegt ist. Der SMTP-E-Mail-Server sendet die E-Mail an die im Argument To: angegebene E-Mail-Adresse (in diesem Beispiel "someone2@example.com"). Der im Argument From: angegebene Name erscheint als Absender der E-Mail (in diesem Beispiel "someone@example.com"), wobei "Test of CDONTS" der Betreff und die Nachricht "It works" der Text der E-Mail ist. Es wird keine Kopie der E-Mail gesendet, weil Sie kein Argument für die Felder CC und BCC angegeben haben.

Sie können das Beispiel abändern, sodass HTML-basierte E-Mails oder Anhänge gesendet werden. Weitere Informationen über CDONTS finden Sie auf der folgenden Microsoft-Website:
http://msdn.microsoft.com/library
Erweitern Sie im linken Bereich Messaging and Collaboration, erweitern Sie Collaboration Data Objects, und erweitern Sie anschließend CDO 1.2.1.

Informationen zu den gespeicherten SQL Server-Prozeduren für OLE-Automatisierung finden Sie in der Online-Dokumentation zu SQL Server 2000.

Verwenden von CDO für Microsoft Windows 2000 (CDOSYS)

CDOSYS stellt ein Objektmodell für die Entwicklung von Messaging-Anwendungen auf Microsoft Windows 2000 bereit. Es bietet außerdem erweiterte Funktionalität gegenüber der vorhandenen CDO für Windows NT Server (CDONTS)-Bibliothek. Für CDOSYS ist Windows 2000 erforderlich und ein lokaler oder Remote-SMTP-Server.

Sie können CDOSYS per Programm so konfigurieren, dass auf SMTP-Server verwiesen wird, um Entwicklern größere Flexibilität beim Konfigurieren von SMTP-Servern zu bieten.

Weitere Informationen über CDOSYS finden Sie im folgenden Artikel der Microsoft Knowledge Base:
195683 Beziehung zwischen 1.x-CDO-Bibliothek und CDOSYS.DLL
Da CDOSYS E-Mail an einen Remote-SMTP-Server senden kann, muss kein Internet Information Server auf dem Computer installiert und ausgeführt werden, auf dem SQL Server ausgeführt wird. Sie müssen auch keinen virtuellen SMTP-Server konfigurieren. Sie müssen lediglich eine gespeicherte Prozedur in SQL Server erstellen, die Sie zum Senden von E-Mail verwenden können.

Wenn Sie CDOSYS anstelle von SQL Mail verwenden, muss kein E-Mail-Client wie Microsoft Outlook auf dem Computer installiert sein, auf dem SQL Server ausgeführt wird. Sie benötigen auch keinen Exchange-Server. Sie können jeden E-Mail-Server, der SMTP-E-Mail unterstützt, als remote SMTP-E-Mail-Server verwenden. Sie können jedoch mit CDOSYS keine an SQL Server gesendete E-Mail lesen oder bearbeiten. Außerdem können Sie nicht die Funktionalität von SQL Agent-E-Mail ersetzen.

Um CDOSYS mit dem SQL Server-OLE-Automatisierungsobjekt zu verwenden, muss das CDOSYS-Objektmodell über SQL Server-OLE-Automatisierung aufgerufen werden. Dies wurde mit SQL Server 2000 Service Pack 1 (SP1) und SQL Server 2000 Service Pack 2 (SP2) getestet. Es wird nicht garantiert, dass CDOSYS über gespeicherte Prozeduren für OLE-Automatisierung auf SQL Server-Versionen, die vor SQL Server 2000 SP1 veröffentlicht wurden, aufgerufen werden kann.

Erstellen einer gespeicherten Prozedur zum Senden von CDOSYS-E-Mail

Sie können einen ähnlichen Code wie den folgenden verwenden, um eine gespeicherte Prozedur in der master-Datenbank zu erstellen, die E-Mails sendet, indem Sie das CDOSYS-Objektmodell mittels gespeicherter SQL Server-Prozeduren für die OLE-Automatisierung aufrufen:

In diesem Beispiel wird ein optionaler Grad der Fehlerbehandlung vorgegeben, der das "hresult" jeder EXEC sp_OA*-Anweisung prüft. Falls das hresult (@hr) Null ist, war die vorangegangene sp_OA*-Anweisung erfolgreich. Wenn jedoch das hresult nicht Null ist, war die vorangegangene sp_OA*-Anweisung nicht erfolgreich.

Für jeden hresult-Wert, der nicht Null ist, wird eine Zeile in der Tabelle "[dbo].[cdosysmail_failures]" hinzugefügt, die den Ort und die Uhrzeit des aufgetretenen Problems anzeigt. Zusätzlich wird der letzte Fehler durch die gespeicherte Prozedur sp_OAGetErrorInfo interpretiert, um die Fehlerquelle und -beschreibung festzuhalten. Diese Fehlerbschreibung wird an der Client-Verbindung ausgegeben. Außerdem werden die Fehlerbeschreibung, die Uhrzeit und der Fehlerort in die Datenbank-Tabelle "[dbo].[cdosysmail_failures]" eingefügt, damit Sie die Fehler identifizieren und analysieren können.

Falls die gespeicherte Prozedur sp_OAGetErrorInfo selbst fehlschlägt, wird im Beispiel der folgende Fehler an der Clientverbindung ausgegeben:

sp_OAGetErrorInfo failed
-- 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

Verwenden Sie als nächstes die gespeicherte Prozedur, die Sie erstellt haben, und geben Sie die richtigen Parameter ein.
   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
Hinweis: Nur Mitglieder der festen Serverrolle sysadmin sind berechtigt, die gespeicherten Prozeduren für die OLE-Automatisierung auszuführen. Wenn Ihr SQL Server-Benutzer kein Mitglied der festen Serverrolle sysadmin ist, können Sie die im Beispiel für das Senden von E-Mail erwähnte gespeicherte Prozedur nicht verwenden. In einem solchen Fall müssen Sie möglicherweise eine Clientanwendung entwickeln, um E-Mails mit CDOSYS zu senden. Sie können z. B. eine Microsoft Visual Basic-Anwendung verwenden.

CDOSYS sendet die E-Mail an den Remote-SMTP-E-Mail-Server, der als cdoSMTPServerName angegeben ist.

Der SMTP-E-Mail-Server sendet die E-Mail an die im Argument To: angegebene E-Mail-Adresse (in diesem Beispiel "someone2@example.com"). Der im Argument From: angegebene Name erscheint als Absender der E-Mail (in diesem Beispiel "someone@example.com").

Sie können dieses Beispiel abändern, sodass textbasierte E-Mails oder Anhänge gesendet werden. Weitere Informationen über CDOSYS finden Sie auf der folgenden Microsoft-Website:
http://msdn.microsoft.com/library
Erweitern Sie im linken Bereich Messaging and Collaboration, erweitern Sie Collaboration Data Objects, und erweitern Sie anschließend CDO for Windows 2000.

Weitere Informationen

Es wird dringend empfohlen, dass Sie eine E-Mail mithilfe des lokalen SMTP-Abholverzeichnisses senden und nicht mit dem Remote-SMTP-Mailnamen. Das Beispiel der gespeicherten Prozedur sp_send_cdosysmail wird in einem Prozess mit SQL Server ausgeführt und schlägt fehl, wenn der SMTP-Server offline ist oder nicht korrekt funktioniert. Das Senden einer E-Mail mithilfe des lokalen Abholverzeichnisses setzt voraus, dass die gespeicherte Prozedur Zugriff auf das Abholverzeichnis besitzt. Der SMTP-Server wird die E-Mail unabhängig davon bearbeiten.

Weitere Informationen zum Versand von E-Mails mithilfe des lokalen Abholverzeichnisses finden Sie im folgenden Artikel der Microsoft Knowledge Base:
286430 Wie HTML gesandt wird, formatierte Mail, die CDO für Windows 2000 und das lokale Pickup-Verzeichnis verwendet

Informationsquellen

Weitere Informationen über gespeicherte SQL Server-Prozeduren für OLE-Automatisierung finden Sie im Kapitel "Gespeicherte Systemprozeduren" in der Online-Dokumentation zu SQL Server 2000.



Haben Sie keine Antworten auf Ihre Fragen gefunden? Besuchen Sie in diesem Fall bitte die deutsche Microsoft SQL Server-Newsgroup unter der folgenden Adresse: Microsoft SQL Server-Newsgroup
Englischsprachige Newsgroups zu unterschiedlichen Themenbereichen von SQL Server finden Sie unter der folgenden Adresse:Microsoft SQL Server Newsgroups

Möchten Sie uns Ihre Meinung zu diesem oder anderen Knowledge Base-Artikeln zu Microsoft SQL Server mitteilen? Hinterlassen Sie uns eine Nachricht mit Ihrer Meinung unter SQLKB@Microsoft.com.

Eigenschaften

Artikel-ID: 312839 - Geändert am: Mittwoch, 30. Mai 2007 - Version: 10.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Keywords: 
kbhowtomaster KB312839
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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