xp_readmail (języka Transact-SQL)

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

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.

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

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'
    Is the ID of the message to read.message_id is varchar(255), with no default.

  • [ @ type = ] "type'
    Czy typ komunikatu, aby powrócić na podstawie MAPI definicji:

    IP[ M|C ].Vendorname.subclass

    If used on input, this must define the type for a specific message; type is ignored on input if message_id is NULL.type is varchar(255), with a default of NULL.Poczta SQL obsługuje typy wiadomości IPM i IPC.

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

  • [ @peek = ] 'peek'
    Is whether SQL Server returns the message of the mail without changing the mail status to read.peek is varchar(5), with a default of FALSE.Jeśli zestaw na wartość FALSE, wiadomość jest traktowana tak, jakby została przeczytana.Jeśli zestaw na wartość TRUE, wiadomość jest traktowana tak, jakby nie została przeczytana.

  • [ @suppress_attach = ] 'suppress_attach'
    Is whether mail attachments are suppressed.suppress_attachis varchar(255), with a default of 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 ustawiona na wartość FALSE, tam jest nie zapobiegania pliki tymczasowe przeczytaniu wiadomości z załącznikami.

  • [ @originator = ] 'sender'
    Is the returned mail sender.senderis varchar(255), with no default.

  • [ @subject = ] 'subject'
    Is the returned the subject of the mail message.subject is varchar(255), with no default.

  • [ @message = ] 'message'
    Is the returned body or the actual text of the mail message.message is text, with no default.

  • [ @recipients = ] 'recipients [ ;... n] '
    Jest to Lista oddzielonych średnikami adresaci wiadomości e-mail mają być zwrócone.Recipient names are separated by a semicolon (
    ;
    ).recipient_list is varchar(255), with no default.

  • [ @cc_list = ] 'copy_recipients [ ;... n] '
    Jest to lista adresatów na CC oddzielone średnikami: pole do wiadomości pocztowej, które mają zostać zwrócone. Recipient names are separated by a semicolon (
    ;
    ).cc_list is varchar(255), with no default.

  • [ @bcc_list = ] 'blind_copy_recipients[ ;... n] '
    Jest oddzielone średnikami listą adresatów na UDW: pole wiadomości mają być zwrócone. Recipient' names are separated by a semicolon (
    ;
    ).bcc_list is varchar(255), with no default.Jeśli serwer poczty e-mail nie dostarcza następnie wartości dla pole UDW blind_copy_recipients jest pusty.

  • [ @date_received = ] 'date'
    Is the returned date of the mail message.date is varchar(255), with no default.

  • [ @unread = ] 'unread_value'
    Is whether a message has been previously unread (true) or not (false).unread_value is varchar(5), with a default of TRUE.

  • [ @attachments = ] 'attachments [ ;... n] '
    Jest to Lista oddzielonych średnikami zwracane tymczasowej ścieżki załączników do wiadomości dla wiadomości.Temporary paths are separated by a semicolon (
    ;
    ).attachments is varchar(255), with no default.

  • [ @skip_bytes = ] bytes_to_skipOUTPUT
    Jeśli dla danych wejściowych jest przekazywana wartość inną niż 0, ten parametr określa liczbę bajtów, aby pominąć przed odczytaniem następnego 255 bajtów (maks.) wiadomość do body_of_message wyjściowe parametru. When bytes_to_skip is used, body_of_message includes the next portion of the message and bytes_to_skip returns with the next starting point within the message (the previous bytes_to_skip plus the length of message).bytes_to_skip is int, with a default of 0.

  • [ @msg_length = ] length_in_bytesOUTPUT
    Jest to całkowita długość wiadomości, w bajtach.When used with bytes_to_skip in a stored procedure, this parameter allows messages to be read in chunks of 255 bytes.length_in_bytes is int.

  • [ @originator_address = ] 'sender_address'
    Is the resolved mail address of the originator of the mail message.sender_address is varchar(255), with no default.

Wartości kodów powrotnych

0 (sukces) lub 1 (brak)

Zestawy wyników

xp_readmail zwraca zestaw z tych kolumn wyników.

Nazwa kolumna

Description

Autor

Nadawca wiadomości e-mail

Data odebrane

Data otrzymania wiadomości e-mail

Adresaci

Osoby, do którego wiadomość została wysłana

Lista DW

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

Lista UDW

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

Temat

Wiersz tematu wiadomości e-mail

Komunikat

Treść wiadomości (tekst)

Nieprzeczytane

Czy to jest komunikat nieprzeczytane

Załączniki

Załączniki do wiadomości

Identyfikator komunikatu

Identyfikator komunikatu

Typ

typ komunikatu

Remarks

Niepowodzenie z wyjątkiem nieprawidłowy parametr jest rejestrowany z Microsoft Dziennik aplikacji systemu Windows.

Istnieją dwie metody użycia 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 w wyniku zestaw do klient, nie należy podawać żadnych parametry wejścia.

Awaria, aby zmienić ustawienie domyślne dla suppress_attach parametru na wartość TRUE powoduje dwa potencjalne problemy zabezpieczeń załączników.

  • Po pierwsze Jeśli dwóch różnych użytkowników mają ten sam katalog tymczasowy i zaloguj się do tego samego komputera, będą mogli wyświetlać załączniki sobie nawzajem.Można określić, załączniki są przechowywane, a także czy dwóch użytkownicy współużytkują ten sam katalog tymczasowy przeglądając attachments Zmienna, dane wyjściowe.

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

Aby odczytać jednej wiadomości ze skrzynki odbiorczej, podać prawidłowy message_id zwrócone przez xp_findnextmsg jako parametr wejściowy, aby xp_readmail.Można określić peek i suppress_attach wiadomość jest odczytywany jako parametry wejściowe do kontrolowania sposobu. Podczas korzystania z peek i suppress_attach w przypadku tej metoda wszystkie pozostałe parametry są parametry wyjściowe opcjonalny zawierający szczegółowe informacje z wiadomości do odczytu.

Można wyświetlić przykład użycia xp_findnextmsg jako parametr wejściowy, aby xp_readmail , wykonując następujące polecenie:

sp_helptext 'sp_processmail';

Gdy używanej przy odczycie pojedynczej wiadomości xp_readmail mogą odczytywać wiadomości tekstowe dłuższe niż 255 bajtów w sekcjach.Użycie length_in_bytes Aby odczytać wiadomości tekstowe dłuższe niż 255 bajtów w sekcjach. Za pomocą length_in_bytes jako dane wejściowe i wyjściowe parametr umożliwia kodowanie pętli do przetwarzania tekstu całą wiadomość. Następujący kod pokazano przykład takiego pętli, przy założeniu, że message_id jest ustawiona na 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

Członkostwo w grupie wymaga sysadmin stała rola 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 stała rola serwera.

Przykłady

W poniższym przykładzie zwraca stan podczas czytania wiadomości.W tym przykładzie wartość Identyfikator wiadomości z xp_findnextmsg znajduje się w zmiennej lokalnej @message\_id i przekazany 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