xp_readmail (języka Transact-SQL)

Odczytuje wiadomości ze skrzynki odbiorczej poczty SQL .Procedura ta jest używana przez sp_processmail do przetwarzania wszystkich wiadomości w Skrzynce odbiorczej poczty SQL .

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.

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

Składnia

xp_readmail [ [ @msg_id= ] 'message_id' ]
     [ , [ @type= ] 'type' [ OUTPUT ] ] 
     [ , [ @peek= ] 'peek' ]
     [ , [ @suppress_attach= ] 'suppress_attach' ]
     [ , [ @originator= ] 'sender' OUTPUT ]
     [ , [ @subject= ] 'subject' OUTPUT ]
     [ , [ @message= ] 'message' OUTPUT ]
     [ , [ @recipients= ] 'recipients [ ;...n ]' OUTPUT ]
     [ , [ @cc_list= ] 'copy_recipients [ ;...n ]' OUTPUT ]
     [ , [ @bcc_list= ] 'blind_copy_recipients [ ;...n ]' OUTPUT ]
     [ , [ @date_received= ] 'date' OUTPUT ]
     [ , [ @unread= ] 'unread_value' OUTPUT ]
     [ , [ @attachments= ] 'attachments [ ;...n ]' OUTPUT ])
     [ , [ @skip_bytes= ] bytes_to_skip OUTPUT ]
     [ , [ @msg_length= ] length_in_bytes OUTPUT ]
     [ , [ @originator_address= ] 'sender_address' OUTPUT ] ]

Argumenty

  • [ @msg_id = ] 'message_id'
    Jest to identyfikator wiadomości do przeczytania.message_idjest varchar(255), z braku domyślne.

  • [ @type = ] 'type'
    typ komunikatu zwraca opiera się na definicji MAPI :

    IP[ M|C ].Vendorname.subclass

    Jeśli używana na wejściu, to należy zdefiniować typ dla określonej wiadomości; typejest ignorowane, jeśli wprowadzania message_id ma wartość NULL.typejest varchar(255), domyślna wartość NULL.SQL Mail obsługuje typy wiadomości IPM i IPC.

  • DANE WYJŚCIOWE
    Po określeniu umieszcza wartości parametru określonej w parametru wyjściowego.

  • [ @peek = ] 'peek'
    Jest czy SQL Server zwraca wiadomość poczty bez zmiany stanu poczty do odczytu. peek jest varchar(5), domyślna wartość FALSE.Jeśli zestaw na wartość FALSE, poczty jest traktowany tak, jakby zostały przeczytane.Jeśli zestaw na wartość TRUE, poczty jest traktowany tak, jakby nie zostały przeczytane.

  • [ @ suppress_attach = ] 'suppress_attach"
    To, czy załączniki wiadomości są pomijane.suppress_attachjest varchar(255), domyślna wartość FALSE.Jeśli zestaw na wartość TRUE, SQL Server uniemożliwia tworzenie tymczasowych plików, kiedy xp_readmail odczytuje wiadomości z załącznikami.Jeśli zestaw wartość FALSE, tam nie zapobiegania pliki tymczasowe przeczytaniu wiadomości z załącznikami.

  • [ @ zleceniodawcy = ] 'sender"
    Jest nadawcy poczty zwrócone.senderjest varchar(255), z braku domyślne.

  • [ @ podmiotu = ] 'subject"
    Zwracane jest temat wiadomości poczty.subjectjest varchar(255), z braku domyślne.

  • [ @ wiadomości = ] 'message"
    Jest zwracany organowi lub rzeczywisty tekst wiadomości.messagejest tekstu, z Brak domyślnej.

  • [ @recipients = ' recipients ;... n] '
    Jest rozdzielaną średnikami listę adresatów wiadomości mają być zwrócone.Nazwy adresatów są oddzielone średnikiem (;).recipient_listjest varchar(255), z braku domyślne.

  • [ @cc_list = ' copy_recipients ;... n] '
    Jest rozdzielaną średnikami listę adresatów "w DW: pole wiadomości mają być zwrócone.Nazwy adresatów są oddzielone średnikiem (;).cc_listjest varchar(255), z braku domyślne.

  • [ @bcc_list = ' blind_copy_recipients**;... n] '
    Jest rozdzielaną średnikami listę adresatów UDW: pole wiadomości mają być zwrócone.Odbiorca " nazwy są oddzielane średnikami (
    ;**).bcc_listjest varchar(255), z braku domyślne.Jeśli serwer poczty e-mail nie podano wartości UDW polenastępnie blind_copy_recipients jest pusta.

  • [ @ date_received = ] 'date"
    Jest zwracany data wiadomości pocztowej.datejest varchar(255), z braku domyślne.

  • [ @ nieprzeczytane = ] 'unread_value"
    To, czy wiadomość została wcześniej nieprzeczytane (true) lub nie (false).unread_valuejest varchar(5), domyślna wartość TRUE.

  • [ @attachments = ' attachments ;... n] '
    Jest rozdzielaną średnikami listę zwrócone tymczasowe ścieżek załączników do wiadomości dla wiadomości.Tymczasowe ścieżki są oddzielone średnikiem (;).attachmentsjest varchar(255), z braku domyślne.

  • [ @ skip_bytes = ] bytes_to_skipdanych wyjściowych
    Jeśli wartość inną niż 0 zostanie przekazany do wprowadzania danych, ten parametr określa liczbę bajtów, aby pominąć przed odczytaniem dalej 255 bajtów (max) wiadomość do body_of_message parametru wyjściowego.Po bytes_to_skip jest używana, body_of_message zawiera następna część wiadomości i bytes_to_skip zwraca następny punkt początkowy w wiadomości (poprzedniego bytes_to_skip plus długość message).bytes_to_skipjest int, domyślna wartość 0.

  • [ @ msg_length = ] length_in_bytesdanych wyjściowych
    Jest całkowitą długością wiadomości w bajtach.Gdy używana z bytes_to_skip w procedura składowanaten parametr umożliwia wiadomości odczytywane fragmentów z 255 bajtów.length_in_bytesis int.

  • [ @ originator_address = ] 'sender_address"
    Jest adresem poczty rozpoznać nadawcą wiadomości pocztowej.sender_addressjest varchar(255), z braku domyślne.

Wartości kodów powrotnych

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

Zestawy wyników

xp_readmail zwraca zestaw wyników te kolumny.

Nazwa kolumny

Opis

Zleceniodawca

Nadawcy wiadomości e-mail

Data otrzymania

Data otrzymania wiadomości e-mail

Adresaci

Osoby, do której wysłano wiadomość

Lista DW

Osoby na "DW:" wiersz wiadomości e-mail

Lista UDW

Osoby na "UDW:" wiersz wiadomości e-mail

Przedmiot

Wiersz tematu wiadomości e-mail

Komunikat

Treść wiadomości (tekst)

Nieprzeczytane

Czy to jest komunikat nieprzeczytane

Załączniki

Załączniki wiadomości

Identyfikator komunikatu

Identyfikator komunikatu

Typ

Typ wiadomości

Uwagi

Niepowodzenie z wyjątkiem nieprawidłowy parametr jest zalogowany do Microsoft Informacje aplikacji systemu Windows

Istnieją dwa sposoby używania xp_readmail:

  • Zwraca wszystkie wiadomości w Skrzynce odbiorczej jako zestaw wyników do klient.

  • Przeczytaj pojedynczej wiadomości ze skrzynki odbiorczej.

Aby przywrócić zawartość skrzynki odbiorczej jako zestaw wyników klient, nie udostępniają żadnych parametrów wejściowych.

Awaria, aby zmienić ustawienie domyślne dla suppress_attach parametr raises spełnione dwa potencjalne problemy dotyczące zabezpieczeń dla załączników.

  • Po pierwsze Jeśli dwóch różnych użytkowników współużytkują ten sam katalog tymczasowy i zalogować się na tym samym komputerze, będą mogli wyświetlać załączniki sobie wzajemnie.Można określić miejsce przechowywania załączników i czy dwóch użytkownicy współużytkują ten sam katalog tymczasowy przeglądając attachments dane wyjściowe zmiennej.

  • Drugi, xp_deletemail nie powoduje usunięcia tych załączników, należy ręcznie usunąć wszystkich załączników.

Aby odczytać pojedynczej wiadomości ze skrzynki odbiorczej, podać prawidłowy message_id zwrócone przez xp_findnextmsg jako parametru wejściowego do xp_readmail.Można określić peek i suppress_attach jako parametry wejściowe do sterowania sposobem wiadomości jest odczytu.Podczas korzystania z peek i suppress_attach z tej metoda, wszystkie pozostałe parametry są parametry wyjściowe opcjonalny zawierający szczegółowe informacje z wiadomości do odczytu.

Przykład użycia można wyświetlić xp_findnextmsg jako parametru wejściowego do xp_readmail , wykonując następujące polecenie:

sp_helptext 'sp_processmail';

Gdy odczytane pojedynczej wiadomości, xp_readmail może odczytywać wiadomości tekstowe dłuższe niż 255 bajtów w sekcjach.Użycie length_in_bytes do czytania wiadomości tekstowe dłuższe niż 255 bajtów w sekcjach.Za pomocą length_in_bytes jako danych wejściowych i parametrów wyjściowych umożliwia kodowanie pętli do przetwarzania tekstu całą wiadomość.Następujący kod przedstawia przykład pętli, przy założeniu, że message_id jest zestaw identyfikator prawidłowy komunikat zwrócony przez xp_findnextmsg.

USE master;
GO

-- Set up variables.

DECLARE @status INT,
        @message_part VARCHAR(255),
        @msg_id VARCHAR(255),
        @message_length INT,
        @skip_bytes INT,
        @message VARCHAR(MAX) ;

-- Find the next message

EXEC @status = dbo.xp_findnextmsg
     @msg_id = @msg_id OUTPUT ;


-- If xp_findnextmsg completed successfully and
-- there is a message in the inbox, read the message.

IF (@status = 0  AND @msg_id IS NOT NULL)
BEGIN
   WHILE (1=1)
   BEGIN
        EXEC @status = dbo.xp_readmail
             @msg_id = @msg_id,
             @msg_length = @message_length OUTPUT,
             @skip_bytes = @skip_bytes OUTPUT,
             @message = @message_part OUTPUT ;

        IF @status <> 0 BREAK ;

        SET @message = ISNULL(@message, '') + @message_part ;

        PRINT @message_length ;
        PRINT @skip_bytes;

        IF @message_length = @skip_bytes BREAK ;

    END ;
    
    IF @status = 0
    BEGIN
       SELECT 'Message ID' = @msg_id, 'Message Body' = @message ;
    END ;
    ELSE
        SELECT 'Could not read message.' ;
END;

GO

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

Poniższy przykład zwraca stan podczas czytania wiadomości.W tym przykładzie wartość wiadomości identyfikator z xp_findnextmsg jest umieszczana w zmiennej lokalnej @message_id i przekazywana do xp_readmail.

USE master ;
GO

DECLARE @status INT,
    @msg_id VARCHAR(255),
    @originator VARCHAR(255),
    @cc_list VARCHAR(255),
    @subject VARCHAR(255),
    @query VARCHAR(8000);


-- Find the next message

EXEC @status = dbo.xp_findnextmsg
     @msg_id = @msg_id OUTPUT ;


-- If xp_findnextmsg completed successfully and
-- there is a message in the inbox, read the message.

IF (@status = 0  AND @msg_id IS NOT NULL)
BEGIN
    EXEC @status = dbo.xp_readmail
        @msg_id = @msg_id,
        @originator = @originator OUTPUT,
        @cc_list = @cc_list OUTPUT,
        @subject = @subject OUTPUT,
        @message = @query OUTPUT,
        @peek = 'TRUE',
        @suppress_attach = 'TRUE'

END;
GO