sp_processmail (Transact-SQL)

Verwendet erweiterte gespeicherte Prozeduren (xp_findnextmsg, xp_readmail und xp_deletemail) zum Verarbeiten eingehender E-Mail-Nachrichten aus dem Posteingang für MicrosoftSQL Server. Es wird vorausgesetzt, dass jede Nachricht eine Abfrage im Nachrichtentext enthält. Diese Prozedur verwendet die erweiterte gespeicherte Prozedur xp_sendmail, um das Resultset als Anlage an den Absender der Nachricht zurückzusenden.

Wichtiger HinweisWichtig

Vermeiden Sie die Verwendung dieser Prozedur. Die sp_processmail-Prozedur verarbeitet Informationen, die Ihnen per E-Mail von unbekannten Quellen gesendet werden. Daher kann auf diese Weise böswilliger Code in Ihre Umgebung gelangen. Sie müssen den Code mit großer Sorgfalt überprüfen, bevor Sie ihn ausführen. Diese Prozedur ist aus Gründen der Abwärtskompatibilität enthalten, sie wird jedoch erst bei einer Aktivierung von SQL Mail installiert.

HinweisHinweis

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

sp_processmail [ [ @subject = ] 'subject' ] 
     [ , [ @filetype = ] 'filetype' ] 
     [ , [ @separator = ] 'separator' ] 
     [ , [ @set_user = ] 'user' ] 
     [ , [ @dbuse = ] 'dbname' ]

Argumente

  • [ @subject = ] 'subject'
    Die Betreffzeile von E-Mail-Nachrichten, die als von SQL Server zu verarbeitende Abfragen interpretiert werden. subject ist vom Datentyp varchar(255), der Standardwert ist NULL. Wird dieser Parameter angegeben, verarbeitet sp_processmail nur solche Nachrichten, die die entsprechende Angabe in der Betreffzeile aufweisen. Standardmäßig verarbeitet SQL Server alle E-Mail-Nachrichten so, als enthielte der Nachrichtentext eine Abfrage.

  • [ @filetype = ] 'filetype'
    Die Dateierweiterung, die beim Zurücksenden des Abfrageresultsets an den Absender der Nachricht als Anlage verwendet wird. filetype ist vom Datentyp varchar(3), der Standardwert ist "'txt"'.

  • [ @separator = ] 'separator'
    Das Spaltentrennzeichen (Feldabschlusszeichen) für jede Spalte des Resultsets. Diese Informationen werden an die erweiterte gespeicherte Prozedur xp_sendmail übergeben, um das Resultset an den Absender zurückzusenden. separator ist vom Datentyp varchar(3). Der Standardwert ist 'tab', was einen Spezialfall für die Verwendung des Tabstoppzeichens zwischen Spalten darstellt.

  • [ @set_user = ] 'user'
    Der Sicherheitskontext, in dem die Abfrage ausgeführt werden soll. user ist vom Datentyp varchar(132), der Standardwert ist guest.

  • [ @dbuse = ] 'dbname'
    Der Datenbankkontext, in dem die Abfrage ausgeführt werden soll. dbname ist vom Datentyp varchar(132), der Standardwert ist master.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Resultsets

Keine

Hinweise

Bei eingehender E-Mail wird vorausgesetzt, dass eine einzelne gültige SQL Server-Abfrage im Nachrichtentext enthalten ist. sp_processmail behandelt nur ungelesene Nachrichten. Die Ergebnisse der Abfrage werden an den Absender der Nachricht zurückgesandt, und alle E-Mail-Benutzer auf der CC-Liste der ursprünglichen Nachricht erhalten eine Kopie. Nachdem die Nachrichten abgearbeitet wurden, werden sie aus dem Posteingang gelöscht. Werden häufig E-Mails an den Server gesendet, sollte sp_processmail ebenfalls häufig ausgeführt werden. Um ein regelmäßiges Verarbeiten von E-Mails einzurichten, können Sie mithilfe des SQL Server-Agents einen sp_processmail-Auftrag planen. Dadurch werden E-Mails mit der angegebenen Häufigkeit verarbeitet und eine formlose Meldung mit der Anzahl der verarbeiteten Abfragen im Auftragsverlauf aufgezeichnet.

Die Ergebnisse werden als angefügte Datei versendet. Der vollständige Dateiname der gesendeten Datei beginnt mit "Sql" gefolgt von einer zufälligen Zahlenfolge und der angegebenen Dateierweiterung, z. B. Sql356.txt.

Wichtiger HinweisWichtig

Um an die Mailnachricht ein passendes Symbol anzufügen, müssen Sie sicherstellen, dass der Dateityp richtig zugewiesen ist. Doppelklicken Sie zum Erstellen einer Dateizuordnung auf dem Desktop auf Arbeitsplatz, und klicken Sie im Menü Extras auf Ordneroptionen. Geben Sie im Dialogfeld Ordneroptionen auf der Registerkarte Dateitypen die Anwendung an, mit der die Datei geöffnet werden soll.

Sie können verschiedene sp_processmail-Aufträge für Abfragen in unterschiedlichen Datenbanken einrichten. So können Sie beispielsweise festlegen, dass Abfragen für die AdventureWorks-Datenbank den Betreff "SQL:AdventureWorks" haben müssen. Dann können Sie sp_processmail ausführen und dabei für subject den Wert SQL:AdventureWorks und für dbname den Wert AdventureWorks angeben. Andere Datenbankabfragen und Gruppierungen können jeweils unterschiedliche Formatierungsstrukturen haben. Verteilungstasks können z. B. den subject-Wert SQL:distribution und den dbname-Wert distribution aufweisen. Alle Aufträge können mit dem SQL Server-Agent geplant werden.

Zudem stehen zahlreiche Möglichkeiten zum Anpassen der gespeicherten Systemprozedur sp_processmail zur Verfügung: Rufen Sie den Text der Prozedur mit der gespeicherten Systemprozedur sp_helptext ab, ändern Sie den Transact-SQL-Code, und erstellen Sie eine neue Prozedur mit angepasstem Verhalten. Folgende Änderungen sind möglich:

  • Nur bestimmte benutzerdefinierte Nachrichtentypen werden verarbeitet, indem der @type-Parameter mit der erweiterten gespeicherten Prozedur xp_findnextmsg verwendet wird.

  • Die Nachricht wird nach dem Verarbeiten mit read (gelesen) markiert, aber nicht gelöscht (führen Sie xp_readmail erneut aus, wobei peek auf false festgelegt ist).

  • Die Abfrageergebnisse werden im Text der E-Mail-Nachricht gesendet. Dazu wird die Prozedur xp_sendmail aufgerufen, wobei attach_result auf false festgelegt wird und der attachments-Parameter entfernt wird.

  • Der Sicherheitskontext zum Ausführen der Abfrage wird entsprechend dem Benutzerkontext des Absenders festgelegt. Wenn die E-Mail-Benutzernamen mit den SQL Server-Anmeldenamen identisch sind, muss hierzu lediglich der Aufruf von xp_sendmail so geändert werden, dass im Aufruf set_user**=@originator** verwendet wird. Wenn die E-Mail-Benutzernamen keine gültigen SQL Server-Anmeldenamen sind (weil sie z. B. eingebettete Leerzeichen enthalten), können Sie einen Nachschlag in einer Tabelle oder eine Zeichenersetzung vornehmen, um den gültigen SQL Server-Anmeldenamen an xp_sendmail zu übergeben.

Berechtigungen

Nur Mitglieder der festen Serverrolle sysadmin können diese Prozedur ausführen.

Beispiele

Im folgenden Beispiel werden alle Nachrichten im Posteingang als Abfragen in der AdventureWorks-Datenbank verarbeitet. Resultsets werden an den Client im CSV-Format (durch Trennzeichen getrennte Werte, Comma-Separated Values) zurückgegeben.

EXEC sp_processmail
    @filetype = 'CSV'
    ,@separator = ','
    ,@dbuse = 'AdventureWorks';