Udostępnij za pośrednictwem


xp_sendmail (języka Transact-SQL)

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

Uwaga

This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Aby wysłać pocztę z SQL Server, należy użyć Database Mail.

Topic link iconKonwencje składni języka Transact-SQL

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 to lista adresatów wiadomości e-mail oddzielonych średnikami.

  • [ @message=] 'message'
    Is the message body to be sent.messagecan be up to 8,000 bytes.

  • [ @query=] 'query'
    Is a valid SQL Server query, the result of which is sent in mail.xp_sendmail uses a bound connection for the query parameter.The query connection made by SQL Mail is not blocked by locks held by the klient that issues the xp_sendmail request.Dzięki temu xp_sendmail ułatwia korzystanie z wewnątrz wyzwalaczy.The query statement, however, cannot refer to the inserted and deleted logical tables, because these tables are only available within a trigger.querycan be up to 8,000 bytes.

  • [ @attachments=] **'**attachments [ ;... n] '
    Znajduje się lista plików, aby dołączyć do wiadomości pocztowej oddzielone średnikami.Jeśli używasz @ kwerendy parametr podczas @ attach_results ma wartość PRAWDA, @ załączników parametr można określić tylko jeden plik, aby dołączyć do wiadomości pocztowej.W takim przypadek należy wysyłać więcej niż jeden plik, należy uruchomić xp_sendmail osobno dla każdego dołączonego pliku.

  • [ @copy_recipients=] **'**copy_recipients [ ;... n] '
    Czy listy rozdzielone średnikami identyfikowania adresatów kopii wiadomości e-mail.

  • [ @blind_copy_recipients=] **'**blind_copy_recipients[ ;... n] '
    Jest opcjonalna lista oddzielonych średnikami identyfikowania adresatów niewidomych kopię wiadomości.

  • [ @subject=] 'subject'
    Parametr jest określenie tematu wiadomości e-mail.If subjectis not specified, "SQL Server Message" is the default.

  • [ @type=] 'type'
    Czy dane wejściowe typ komunikatu na podstawie definicji poczty MAPI:

    IP[ M|C ].Vendorname.subclass

    Jeśli type ma wartość NULL, xp_sendmail używa typu komunikatu IPM. Typy wiadomości, które zaczynają się IPM pojawia się w Skrzynce odbiorczej z klient poczty i są znalezione i czytane przez xp_findnextmsg.Typy wiadomości, które zaczynają się IPC nie są wyświetlane w Skrzynce odbiorczej z klient poczty i muszą być znalezione lub odczytu, ustawiając type parametr. Wartość domyślna jest równa NULL.Poczta SQL obsługuje typy wiadomości IPM i IPC.

  • [ @attach_results=] 'attach_value'
    Czy parametr opcjonalny określający zestaw wyników kwerendy powinny być wysyłane wiadomości e-mail jako załączony plik zamiast jest dołączany do wiadomości e-mail.Jeśli @ załączników nie jest NULL, a @ attach_results ma wartość PRAWDA, pierwsza nazwa pliku w attachments jest używana jako nazwa pliku dla wyniki. Jeśli @ załączników ma wartość NULL, generowany jest nazwa pliku z rozszerzeniem .txt.Wartością domyślną jest FALSE, co oznacza, że zestaw wyników jest dołączany do wiadomości.

  • [ @no_output=] 'output_value'
    Jest parametrem opcjonalne, które wysyła pocztę, lecz nie zwraca żadnych danych wyjściowych z sesja klient, który wysłał wiadomość.Wartością domyślną jest FALSE, co oznacza, że w sesja klient SQL Server otrzymuje dane wyjściowe.

  • [ @no_header=] 'header_value'
    Jest parametrem opcjonalne, które wysyła wyniki kwerendy w poczcie, ale nie wysyła informacji nagłówka kolumna z wyników kwerendy.Wartością domyślną jest FALSE, co oznacza, że informacje w nagłówku kolumna nie jest wysyłany z wyniki kwerendy.

  • [ @width=] width
    Parametr opcjonalny, jest ustawienie szerokości wiersza w tekście danych wyjściowych kwerendy.Ten parametr jest taka sama, jak /w parametrisql narzędzie.W przypadku kwerend długo dane wyjściowe wierszy produkcji za pomocą width z attach_results Aby wysłać dane wyjściowe bez podziałów wiersza w środku wierszy danych wyjściowych. Domyślna szerokość wynosi 80 znaków.

  • [ @separator=] 'separator'
    To ciąg separatora kolumn dla każdej kolumna zestaw wyników.Domyślnie separator kolumna jest puste miejsce.Użycie separator kolumna umożliwia łatwiejsze analizy zestaw wyników w arkuszach kalkulacyjnych i innych aplikacji.Na przykład użyć separator z attach_results Wysyłanie plików za pomocą wartości rozdzielanych przecinkami.

  • [ @echo_error=] 'echo_value'
    Gdy ma wartość PRAWDA, powoduje, że poczta SQL, aby przechwytywać żadnych komunikatów serwera lub biblioteki DB błędów napotkanych podczas wykonywania kwerendy i dołączyć je do wiadomości pocztowej nie zapisu dziennik błędów.Ponadto liczby wierszy zwracanych/wierszy wpływa jest dołączana do wiadomości pocztowej.

    Uwaga

    Kiedy echo_error ma wartość PRAWDA, xp_sendmail zwraca stan 0 (sukces), jeżeli poczta jest pomyślnie wysłany, nawet jeśli wystąpią błędy biblioteki DB lub komunikaty lub kwerenda nie zwraca żadnych wyniki.

  • [ @set_user=] 'user'
    Jest kontekstem zabezpieczeń, w którym powinny być uruchamiane kwerendy.Jeśli użytkownik nie jest określony, domyślnie kontekstu zabezpieczeń stosuje użytkownika uruchomione xp_sendmail.

  • [ @dbuse=] 'database'
    Jest kontekstem bazy danych, w którym powinny być uruchamiane kwerendy.Wartością domyślną jest NULL, czyli użytkownik znajduje się w domyślna baza danych.

Wartości kodów powrotnych

0 (sukces) lub 1 (brak)

Zestawy wyników

Jeśli próba zakończy się pomyślnie, xp_sendmail zwraca komunikat.

Remarks

Sesja korespondencji SQL musi być uruchomiona przed xp_sendmail jest uruchamiany.Sesje, można uruchomić automatycznie lub z xp_startmail.Aby uzyskać więcej informacji na temat konfigurowania sesja SQL poczty automatycznie, zobacz temat Configuring Extended MAPI Mail Profiles. Jedna sesja korespondencji SQL obsługuje wszyscy użytkownicy SQL Server wystąpienie, ale w danym czasie tylko jeden użytkownik może wysłać wiadomość. Innym użytkownikom wysyłanie wiadomości e-mail automatycznie czekać ich włącza 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. Poczta SQL uzyskuje połączenie oddzielne SQL Server; nie współużytkuje tego samego połączenia w oryginalnym wydaniu połączenia klient xp_sendmail.

Uwaga

query może być blokowany przez blokada utrzymywane przez połączenia klient, wydane xp_sendmail.Na przykład, jeśli aktualizowania tabela w obrębie transakcji i Tworzenie wyzwalacza dla aktualizacji, która próbuje wybrać taki sam, aktualne informacje na temat wiersza jako query parametr, połączenie jest zablokowane przez wyłącznej blokada poczty SQL posiadaniu znajduje się w wierszu początkowego połączenia.

xp_sendmail jest uruchamiany w kontekście zabezpieczeń SQL Server. Prawidłowego użytkownika xp_sendmail może uzyskiwać dostęp do plików dla załącznika do wiadomości pocztowej w kontekście zabezpieczeń administratora.Jeśli musi mieć dostęp użytkownicy inni niż administratorzy systemu xp_sendmail , a użytkownik chce zabezpieczyć się przed niechroniony dostęp do plików załączników, administrator systemu można utworzyć procedura przechowywana, która wywołuje xp_sendmail i zapewnia potrzebne funkcje, ale nie ujawnia attachments parametr. Ta procedura przechowywana, musi być zdefiniowana w wzorzec bazy danych.Administrator systemu następnie udziela uprawnienia do wykonywania na procedura przechowywana na potrzeby użytkowników bez udzielania uprawnień do podstawowej xp_sendmail procedurę.

xp_sendmail wysyła wiadomości i zestaw wyników kwerendy lub załącznik do określonych adresatów i korzysta z połączenia związanego dla query parametr. The query connection made by SQL Mail is not blocked by locks held by the klient that issues the xp_sendmail request.Dzięki temu xp_sendmail ułatwia korzystanie z wewnątrz wyzwalaczy.The query instrukcja, however, cannot refer to the logical inserted and deleted tables that are only available within a trigger.

Uwaga

Próba uruchomienia może spowodować naruszenie zasad dostępu xp_sendmail , gdy pocztowym i książki adresowej znajdują się 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 Typ danych. Wykonuje kwerendę dotyczącą tej użycia xml Typ danych może być niepoprawnie sformatowany. Użycie Database Mail Aby wysłać wiadomość e-mail zawierającą XML dane.

Uprawnienia

Członkostwo w grupie wymaga sysadmin ustalić roli serwera, ale inni użytkownicy mogą być przyznane uprawnienia wykonać.Ze względów bezpieczeństwa zaleca się jednak że uprawnienia dla tej procedura przechowywana jest ograniczona do członków sysadmin ustalić roli serwera.

Przykłady

A.Wysyłanie wiadomości do jednego adresata

W poniższym przykładzie wysyła wiadomość do użytkownika (wiadomości e-mail jest Wilson daN danw), master Baza danych jest zapełniona.

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 powoduje wysłanie wiadomości do użytkowników daN Wilson i Ashvini Sharma (wiadomości e-mail jest ashvinis), kopie wysyłanych do Peter Connelly (wiadomości e-mail jest peterc). W przykładzie określa się 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

W poniższym przykładzie wysyła wyniki sp_configure Aby 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łączony plik

W poniższym przykładzie wysyła wyniki kwerendy SELECT * FROM INFORMATION_SCHEMA.TABLES jako załącznika pliku tekstowego do daN Wilson. W przykładzie zawiera wiersz tematu wiadomości e-mail i wiadomości, które będą widoczne przed załącznikiem.The @width parameter is used to prevent line breaks in the output lines.

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 znaki 7,990 bajt

W poniższym przykładzie pokazano, jak wysłać wiadomość przekracza znaki 7,990 bajtów.Ponieważ message ogranicza się do długości VARCHAR (wiersz dodatkowe, podobnie jak wszystkie parametry procedura przechowywana), w tym przykładzie zapisuje długą wiadomość do tabela tymczasowa globalne składa się z kolumna jeden tekst. Zawartość tej tabela tymczasowa następnie są wysyłane wiadomości e-mail przy użyciu @query parametr.

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 ;