Udostępnij za pośrednictwem


xp_sendmail (języka Transact-SQL)

Wysyła wiadomość e-mail, które mogą obejmować kwerendy zestaw wyników załącznika, do określonych adresatów.Ta rozszerzona procedura składowana używa poczty SQL do wysłania wiadomości.

Ostrzeżenie

Ta funkcja zostanie usunięta z przyszłej wersji programu Microsoft SQL Server. Należy unikać stosowania tej funkcji w nowych projektach oraz zaplanować modyfikację aplikacji, w których obecnie jest używana ta funkcja.Aby wysłać pocztę z SQL Server, użyj Poczta bazy danych.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

xp_sendmail { [ @recipients= ] 'recipients [ ;...n ]' } 
     [ ,[ @message= ] 'message' ] 
     [ ,[ @query= ] 'query' ] 
     [ ,[ @attachments= ] 'attachments [ ;...n ]' ] 
     [ ,[ @copy_recipients= ] 'copy_recipients [ ;...n ]'
     [ ,[ @blind_copy_recipients= ] 'blind_copy_recipients [ ;...n ]'
     [ ,[ @subject= ] 'subject' ]
     [ ,[ @type= ] 'type' ] 
     [ ,[ @attach_results= ] 'attach_value' ]
     [ ,[ @no_output= ] 'output_value' ] 
     [ ,[ @no_header= ] 'header_value' ] 
     [ ,[ @width= ] width ] 
     [ ,[ @separator= ] 'separator' ] 
     [ ,[ @echo_error= ] 'echo_value' ] 
     [ ,[ @set_user= ] 'user' ] 
     [ ,[ @dbuse= ] 'database' ]

Argumenty

  • [ @recipients = ' recipients ;... n] '
    Jest rozdzielaną średnikami listę adresatów wiadomości e-mail.

  • [ @ wiadomości = ] 'message"
    Jest treść wiadomości do wysłania.messagemoże być maksymalnie 8000 bajtów.

  • [ @ kwerendy =] 'query"
    Jest prawidłowy SQL Server kwerendę, wynik jest wysyłany w wiadomości.xp_sendmail używa połączenia związanego dla query parametru.query Połączenia SQL poczty nie jest blokowany przez blokady przechowywane przez klient , który wystawia xp_sendmail żądania.Dzięki temu xp_sendmail ułatwia korzystanie z wewnątrz wyzwalaczy.queryinstrukcja, jednak nie odwołać się do dodaje się i usunięte logiczne tabele, ponieważ tabele te są dostępne w ramach wyzwalacz tylko.query* *może być maksymalnie 8000 bajtów.

  • [ @attachments= ' attachments ;... n] '
    Jest rozdzielaną średnikami listę plików, aby dołączyć do wiadomości pocztowej.Jeśli używasz @ kwerendy parametr podczas @ attach_results ma wartość PRAWDA, @ Załączniki parametru można określić tylko jeden plik, aby dołączyć do wiadomości pocztowej.W tym przypadek, aby wysłać więcej niż jeden plik, należy uruchomić xp_sendmail oddzielnie dla każdego dołączonego pliku.

  • [ @ copy_recipients = ' copy_recipients ;... n] '
    Jest rozdzielaną średnikami listę identyfikowania adresatów kopii wiadomości e-mail.

  • [ @ blind_copy_recipients = 'blind_copy_recipients;... n] '
    Opcjonalna lista rozdzielonych średnikami identyfikujący adresatów kopię wiadomości.

  • [ @ podmiotu = ] 'subject"
    To parametr określający temat wiadomości e-mail.Jeśli subjectnie jest określony, "WiadomośćSQL Server" jest to ustawienie domyślne.

  • [ @type = ] 'type'
    typ komunikatu danych wejściowych opiera się na definicji poczty MAPI :

    IP[ M|C ].Vendorname.subclass

    Jeśli type ma wartość NULL, xp_sendmail używa typ komunikatu IPM.Typy, które rozpoczynają się od IPM są wyświetlane w Skrzynce odbiorczej poczty klient i są znalezione i czytane przez xp_findnextmsg.Typy, które rozpoczynają się od IPC nie są wyświetlane w Skrzynce odbiorczej poczty klient i muszą być znalezione lub odczytu poprzez ustawienie type parametru.Wartością domyślną jest NULL.SQL Mail obsługuje typy wiadomości IPM i IPC.

  • [ @ attach_results =] 'attach_value"
    To parametr opcjonalny określający zestaw wyników kwerendy powinny być przesyłane pocztą jako dołączonego pliku zamiast jest dołączany do wiadomości e-mail.Jeśli @ Załączniki nie jest NULL i @ attach_results ma wartość PRAWDA, pierwsza nazwa pliku w attachments jest używana jako nazwa pliku dla wyniki.Jeśli @ Załączniki ma wartość NULL, generowany jest nazwa pliku z rozszerzeniem .txt.Wartością domyślną jest FALSE, która oznacza, że zestaw wyników jest dołączana do wiadomości.

  • [ @ no_output =] 'output_value"
    To parametr opcjonalny, który wysyła pocztę, lecz nie zwraca żadnych danych wyjściowych klient. Wartością domyślną jest FALSE, która oznacza, że klient sesja z SQL Server otrzymuje dane wyjściowe.

  • [ @ no_header =] 'header_value"
    To parametr opcjonalny, który wysyła wyniki kwerendy w programie Poczta, ale nie wysyła informacje nagłówka kolumna z wynikikwerendy.Wartością domyślną jest FALSE, która oznacza, że informacje w nagłówku kolumna jest wysyłane z wynikikwerendy.

  • [ @ szerokość =] width
    Opcjonalny parametr Ustawia szerokość linii tekstu wyjściowego dla kwerendy.Ten parametr jest taka sama, jak /w parametr w isql narzędzia.Dla produkujących długie wiersze danych wyjściowych kwerendy, użyj width z attach_results do wysyłania danych wyjściowych bez podziałów wierszy w środku wierszy danych wyjściowych.Domyślna szerokość wynosi 80 znaków.

  • [ @ separatora =] 'separator"
    kolumnajest- ciąg separatora dla każdej kolumna zestaw wyników.Domyślnie, kolumna-separatorem jest puste miejsce.Użyj menu separator kolumna umożliwia, ułatwia analizowanie zestaw wyników w arkuszach kalkulacyjnych i innych aplikacji.Na przykład, użyj separator z attach_results na wysyłanie plików z pliku wartości rozdzielanych przecinkami.

  • [ @ echo_error =] 'echo_value"
    Gdy ma wartość TRUE, powoduje przechwytywać wszystkie wiadomości z serwera poczty SQL lub DB-Biblioteka błędów napotkanych podczas uruchamiania kwerendy i dołączyć je do wiadomości pocztowej, zamiast zapisywania w dziennik błędów.Ponadto liczba wierszy zwracanych/wierszy wpływa jest dołączany do wiadomości pocztowej.

    Ostrzeżenie

    Po echo_error ma wartość PRAWDA, xp_sendmail zwraca stan 0 (sukces), jeżeli poczta jest pomyślnie wysłany, nawet jeśli DB-napotka błędy biblioteki lub wiadomości lub kwerenda nie zwraca żadnych wyniki.

  • [ @ set_user =] 'user"
    Jest kontekst zabezpieczeń, w którym należy uruchomić kwerendę.Jeśli użytkownika nie jest określony, domyślnie kontekst zabezpieczeń użytkownika z systemem xp_sendmail.

  • [ @ dbuse =] 'database"
    Jest kontekst bazy danych, w którym należy uruchomić kwerendę.Wartością domyślną jest NULL, co oznacza, że użytkownik jest umieszczany w domyślna baza danych.

Wartości kodów powrotnych

0 (sukces) lub 1 (błąd)

Zestawy wyników

Po pomyślnym, xp_sendmail zwraca komunikat.

Uwagi

Poczta SQL sesja musi być uruchomiona przed xp_sendmail jest uruchamiane.Sesje można uruchomić automatycznie lub z xp_startmail.Aby uzyskać więcej informacji na temat zestaw SQL poczty automatycznie sesja , zobacz Konfigurowanie rozszerzone profile MAPI poczty.Poczta SQL jednej sesja obsługuje wszyscy użytkownicy SQL Server wystąpienie, ale w czas tylko jeden użytkownik może wysyłać wiadomości.Innym użytkownikom wysyłanie wiadomości e-mail automatycznie oczekiwania ich obrotów, aż do pierwszego użytkownika wiadomość jest wysyłana.

Jeśli query jest określony, xp_sendmail loguje się do SQL Server jako klient i uruchamia określonej kwerendy.SQL Poczta tworzy oddzielne połączenie SQL Server; Nie udostępniaj tego samego połączenia jako oryginalnego wydania połączenia klient xp_sendmail.

Ostrzeżenie

querymoże być blokowany przez blokada nałożonej przez połączenia klient , wydane xp_sendmail.Na przykład, jeśli aktualizujesz tabela w obrębie transakcji i Tworzenie wyzwalacza dla aktualizacji, która próbuje wybrać taki sam zaktualizowane informacje wiersza jako query parametr połączenia SQL poczty jest blokowany przez blokada na wyłączność utrzymywane w wierszu przez klient początkowego połączenia.

xp_sendmail jest uruchamiany w kontekście zabezpieczeń SQL Server.Prawidłowego użytkownika xp_sendmail można uzyskać dostęp do plików załączników do wiadomości w kontekście zabezpieczeń administratora.Jeśli musi mieć dostęp użytkownicy inni niż administratorzy systemu xp_sendmail i chcesz zabezpieczyć się przed niechroniony dostęp do plików załączników, administrator systemu można utworzyć wywołuje procedura składowana xp_sendmail i zapewnia potrzebne funkcje, ale które nie ujawnia attachments parametru.Ta procedura składowana musi być zdefiniowana w wzorca bazy danych.Administrator systemu następnie udziela uprawnienia wykonać procedura składowana potrzebne użytkownikom bez udzielania uprawnień do podstawowej xp_sendmail procedurę.

xp_sendmail wysyła wiadomość i kwerendy, zestaw wyników lub załączników do określonych adresatów i używa połączenia związanego dla query parametru.Kwerendy połączenia SQL poczty nie jest blokowany przez blokady przechowywane przez klient , który wystawia xp_sendmail żądania.Dzięki temu xp_sendmail ułatwia korzystanie z wewnątrz wyzwalaczy.queryinstrukcja, jednak nie dotyczą logiczne tabel wstawionych i usuniętych, które są dostępne w ramach wyzwalacz tylko.

Ostrzeżenie

Próba uruchomienia może spowodować naruszenie zasad dostępu xp_sendmail kiedy pocztowym i książki adresowej są w udziale pliku, który usługa MSSQLServer nie może uzyskać dostępu z powodu niewystarczającej uprawnień.

xp_sendmail nie obsługuje w pełni xml typu danych.Kwerendy używające xml Typ danych może być nieprawidłowo sformatowany.Użycie Poczta bazy danych do wysyłania wiadomości e-mail zawierającej xml danych.

Uprawnienia

Wymaga członkostwa w sysadmin stała rola serwera, ale uprawnienia wykonywania mogą być przyznane innym użytkownikom.Jednak ze względów bezpieczeństwa zalecane jedynie uprawnienia dla tej procedura składowana dla członków sysadmin stała rola serwera.

Przykłady

A.Wysyłanie wiadomości do jednego adresata.

Poniższy przykład wysyła wiadomość do użytkownika Dan Wilson (adres e-mail jest danw), master Baza danych jest pełny.

EXEC master.dbo.xp_sendmail 
    @recipients=N'danw@Adventure-Works.com',
    @message=N'The master database is full.' ;

B.Wysyłanie wiadomości do wielu adresatów

Poniższy przykład wysyła wiadomości do użytkowników Dan Wilson i Ashvini Sharma (adres e-mail jest ashvinis), wraz z kopią wysyłane Peter Connelly (adres e-mail jest peterc).W przykładzie określono również wiersz tematu wiadomości.

EXEC master.dbo.xp_sendmail 
    @recipients=N'danw@Adventure-Works.com;ashvinis@Adventure-Works.com',
     @message=N'The master database is full.',
     @copy_recipients=N'peterc@Adventure-Works.com',
     @subject=N'Master database status' ;
GO

C.Wysyłanie wyniki

Poniższy przykład wysyła wyniki sp_configure do Dan Wilson.

EXEC master.dbo.xp_sendmail 
    @recipients=N'danw@Adventure-Works.com',
    @query = N'EXEC sp_configure' ;
GO

D.Wysyłanie wyniki jako dołączonego pliku

Poniższy przykład wysyła wyniki kwerendy SELECT * FROM INFORMATION_SCHEMA.TABLES jako załącznik pliku tekstowego do Dan Wilson.Przykład zawiera wiersz tematu wiadomości e-mail i wiadomości pojawi się przed załącznikiem.@width Parametr jest używany do zapobiegania podziałów wierszy danych wyjściowych.

EXEC master.dbo.xp_sendmail
    @recipients = N'danw@Adventure-Works.com', 
    @query = N'SELECT * FROM INFORMATION_SCHEMA.TABLES',
    @subject = N'SQL Server Report',
    @message = N'The contents of INFORMATION_SCHEMA.TABLES:',
    @attach_results = 'TRUE',
    @width = 250 ;

E.Wysyłanie wiadomości przekracza 7,990 bajtów znaków

Poniższy przykład pokazuje jak wysłać wiadomość dłużej niż 7,990 znaków.Ponieważ message jest ograniczona do długości VARCHAR (mniej wierszy obciążenie, jakie są wszystkie parametry procedura składowana ), w tym przykładzie zapisuje długą wiadomość do globalnego tymczasowej tabela , która składa się z pojedynczego tekst kolumna.Zawartość ta tymczasowa tabela są przesyłane pocztą przy użyciu @query parametru.

CREATE TABLE ##mail_body(c1 NVARCHAR(4000)) ;

DECLARE @cmd VARCHAR(56) ;

INSERT ##mail_body(c1)
VALUES ('Put your long message here.') ;

SET @cmd = 'SELECT c1 FROM ##mail_body' ;

EXEC master.dbo.xp_sendmail 
    @recipients = 'danw@Adventure-Works.com', 
    @query = @cmd,
    @no_header= 'TRUE' ;

DROP TABLE ##mail_body ;