Share via


Xp_readmail (Transact-SQL)

Posta iletisi SQL Posta Kutusu'ndan okur.Bu yordam tarafından kullanılan sp_processmail SQL posta gelen tüm postaları işlemek için.

Not

Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

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 ] ]

Bağımsız değişkenler

  • [ @msg_id = ] 'message_id'
    Okumak için iletiyi kimliğidir.message_idİş varchar(255), ile hiçbir varsayılan.

  • [ @type = ] 'type'
    ileti türü dönmek için MAPI tanımını temel alır:

    IP[ M|C ].Vendorname.subclass

    Girişte kullandıysanız, bu türü belirli bir ileti için tanımlamanız gerekir; typeGiriş açıksa göz ardı message_id ise null.typeİş varchar(255), varsayılan değer null.SQL Posta iletisi türlerini destekleyen IPM ve IPC.

  • ÇIKIŞ
    Belirtilen çıktı parametresinde belirtilen parametre değeri yerleştirir.

  • [ @peek = ] 'peek'
    Olup olmadığını SQL Server posta durum değiştirmeden posta iletisi döndürüyor okunur.peek olan varchar(5), varsayılan değer false.Okunmuş olduğu gibi karşın posta false olarak küme çalýþtýrýlýrsa.İşlem yok Okunmuş Posta true olarak küme yapılır.

  • [ @ suppress_attach = ] 'suppress_attach'
    Posta ekleri olup bastırılmış durumda.suppress_attachİş varchar(255), varsayılan değer false.Varsa true olarak küme SQL Server geçici oluşturulmasını engeller yaparken xp_readmail ek içeren bir iletiyi okur.Ekleri olan iletiler okunduğunda küme yanlış, orada hiçbir önlem geçici dosyaların ise.

  • [ Gönderen = ] 'sender'
    Dönen posta gönderenin durumda.senderİş varchar(255), ile hiçbir varsayılan.

  • [ Konu = ] 'subject'
    Döndürülen olan posta iletisinin konusu.subjectİş varchar(255), ile hiçbir varsayılan.

  • [ @ Message = ] 'message'
    Döndürülen gövde veya posta iletisinin gerçek metin değil.messageİş metin, hiçbir varsayılan ile.

  • [ @recipients = ' recipients ;... n] '
    Döndürülecek posta iletisinin alıcılarını noktalı virgülle ayrılmış listesi verilmiştir.Alıcı adlarını noktalı virgülle ayrılmış (;).recipient_listİş varchar(255), ile hiçbir varsayılan.

  • [ @cc_list = ' copy_recipients ;... n] '
    Alıcılar noktalı virgülle ayrılmış listesi ' cc üzerinde: posta iletisi döndürülmesinialan .Alıcı adlarını noktalı virgülle ayrılmış (;).cc_listİş varchar(255), ile hiçbir varsayılan.

  • [ @bcc_list = ' blind_copy_recipients**;... n] '
    Gizli alıcılar için noktalı virgülle ayrılmış listesi verilmiştir: döndürülecek posta iletisininalan .Alıcı ' adları noktalı virgülle ayrılmış (
    ;**).bcc_listİş varchar(255), ile hiçbir varsayılan.E-posta sunucusu gizli alaniçin bir değer sonra sağlayamıyorsa blind_copy_recipients boştur.

  • [ @ date_received = ] 'date'
    Posta iletisi döndürülen tarih olacaktır.dateİş varchar(255), ile hiçbir varsayılan.

  • [ Okunmamış @ = ] 'unread_value'
    Olup bir ileti okunmamış önceden olduğu (true) veya (false).unread_valueİş varchar(5), varsayılan değer true.

  • [ @attachments = ' attachments ;... n] '
    İade edilen geçici posta ekleri ileti yollarını noktalı virgülle ayrılmış listesi verilmiştir.Geçici yolları noktalı virgülle ayrılmış (;).attachmentsİş varchar(255), ile hiçbir varsayılan.

  • [ @ skip_bytes = ] bytes_to_skipçıkış
    0 Dışında bir değer girişi için verilmezse, bu parametre iletiye için sonraki 255 bayt (maks.) okumadan önce atlanacak bayt sayısını belirtir body_of_message çıkış parametresi.Zaman bytes_to_skip kullanılan, body_of_message iletinin sonraki kısmı içerir ve bytes_to_skip sonraki başlangıç noktası bir iletinin içinde döndürür (önceki bytes_to_skip yanı sıra uzunluğu, message).bytes_to_skipİş int, varsayılan değer 0.

  • [ @ msg_length = ] length_in_bytesçıkış
    Toplam ileti bayt uzunluğunda.Aşağıdakilerle kullanıldığında bytes_to_skip Bu parametre saklı yordamokuyun parçalar iletilere izin verir255 bayt.,length_in_bytesis int.

  • [ @ originator_address = ] 'sender_address'
    Çözümlenen posta gönderen posta adresidir.sender_addressİş varchar(255), ile hiçbir varsayılan.

Dönüş Kodu Değerleri

0 (başarılı) veya 1 (hata)

Sonuç Kümeleri

Xp_readmail bir sonuç kümesi ile bu sütunlar döndürür.

Sütun adı

Açıklama

Gönderen

E-posta iletisinin göndereni

Alınma tarihi

İletinin alındığı tarih

Alıcılar

İletinin gönderildiği kişiler

Bilgi listesi

Kişilerin "cc:" e-posta iletisinin satırı

Gizli listesi

Kişiler üzerinde "gizli:" e-posta iletisinin satırı

Konu

E-posta iletisinin konu satırında

İleti

İleti gövdesi (metin)

Okunmamış

Bu iletinin okunmamış olup

Ekleri

İleti eklerinin

İleti kimliği

İleti kimliği

Tür

İleti türü

Açıklamalar

Geçersiz bir parametre dışında herhangi bir hata için günlüğe Microsoft Windows Uygulama günlüğünü

Kullanmanın iki yolu vardır xp_readmail:

  • Tüm iletiler Gelen Kutusu'nda bir sonuç kümesi olarak istemcidöndürür.

  • Tek bir iletiyi gelen kutusundan okuyun.

Gelen Kutusu içeriğini bir sonuç kümesi olarak istemcigeri dönmek için giriş parametreleri sunmaz.

Değiştirmek için varsayılan hata suppress_attach parametresi true raises iki olası güvenlik sorunlarını ekler.

  • İki farklı kullanıcının aynı geçici dizine ve aynı bilgisayarda oturum paylaşıyorsanız, ilk olarak, birbirlerinin ekleri ekleyebilirler.Eklerin depolandığı ve inceleyerek iki kullanıcı aynı geçici dizini olup paylaşmak belirleyebilirsiniz attachments Çıkış değişkeni.

  • İkinci, xp_deletemail her eki el ile silmek için bu eklerin silinmesine neden olmaz.

Tek bir iletiyi Gelen Kutusu'ndan okumak için geçerli bir tedarik message_id tarafından döndürülen xp_findnextmsg giriş parametresi olarak xp_readmail.Belirtebileceğiniz peek ve suppress_attach denetlemek için giriş parametresi olarak ileti yoludur okunur.Kullanırken peek ve suppress_attach Bu yöntem, diğer tüm parametreleri olan isteğe bağlı çıkış parametreleri içeren belirli bilgi iletiden olacak okunur.

Kullanarak bir örnek görebilirsiniz xp_findnextmsg giriş parametresi olarak xp_readmail aşağıdaki komutu çalýþtýrarak:

sp_helptext 'sp_processmail';

Tek bir iletiyi okumak için kullanıldığında xp_readmail bölümlerde 255 bayttan uzun ileti metni okuyabilirsiniz.Use length_in_bytes bölümler. 255 bayttan uzun ileti metnini okumak içinKullanarak length_in_bytes bir giriş ve bir çıkış parametresi olarak verir kodlama döngüsü işleme tüm ileti metni.Aşağıdaki kod böyle bir döngü gösterilmiştir varsayarak message_id tarafından döndürülen geçerli ileti tanımlayıcısı için küme olan 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

İzinler

Üyelik gerektiren sysadmin sabit sunucu rolüancak yürütme izinleri diğer kullanıcılara verilir.Ancak, güvenlik nedenleriyle, bu saklı yordam izinlerini üyelerine sınırlı öneririz sysadmin sabit sunucu rolü.

Örnekler

Aşağıdaki örnek, bir iletiyi okurken durumu döndürür.Bu örnekte,'yi değerini bir ileti kimliği xp_findnextmsg bulunduğu konumdaki yerel değişkeni içinde @message_id ve geçirilen 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